Przejdź do zawartości

Łańcuch dodawania

Z Wikipedii, wolnej encyklopedii

Łańcuch dodawania dla obliczenia liczby naturalnej to sekwencja liczb naturalnych taka, że każdy jej element jest sumą elementów poprzednich[1], co można zapisać jako:

.

Pierwszym krokiem tworzenia łańcucha dodawania dla jest zawsze . Drugim krokiem może być , , bądź . Tym samym, długość łańcucha dodawania dla jest ograniczona od dołu przez co ma miejsce dla . Jak łatwo zauważyć długość łańcucha dodawania dla jest również ograniczona od góry przez .

Oznaczmy przez najkrótszą długość łańcucha dodawania dla . Jej określenie (sekwencja OEIS A003313) nie jest łatwe; udowodniono, że uogólniona wersja tego problemu jest problemem NP-zupełnym[2]. Ponadto dla może istnieć wiele różnych łańcuchów o najkrótszej długości.

Łańcuchy dodawania o najkrótszej długości można wykorzystać do optymalizacji potęgowania przeprowadzając potęgowanie z wykładnikami całkowitymi przy użyciu liczby iloczynów równej najkrótszej długości łańcucha dodawania dla wykładnika. Na przykład łańcuch zapewnia minimalną długość siedmiu kroków dla , ponieważ

2 = 1 + 1
3 = 2 + 1
6 = 3 + 3
12 = 6 + 6
24 = 12 + 12
30 = 24 + 6
31 = 30 + 1

Tym samym, obliczenie 31. potęgi dowolnej liczby wymaga tylko siedmiu, a nie 30 iloczynów:

,
,
,
,
,
,
,

przy wykorzystaniu iloczynów przeprowadzonych wcześniej. Niezależnie od liczby części elementarnych, minimalny indeks złożenia obiektu składającego się z takich części jest zadany najkrótszym łańcuchem dodawania dla .

Przypisy[edytuj | edytuj kod]

  1. D. E. Knuth, The Art of Computer Programming, Vol 2, „Seminumerical Algorithms”, Section 4.6.3, 3rd edition, 1997.
  2. Peter Downey, Benton Leong, Ravi Sethi, Computing sequences with addition chains, „SIAM Journal on Computing”, 10 (3), 1981, s. 638–646, DOI10.1137/0210047.

Linki zewnętrzne[edytuj | edytuj kod]