Łańcuch dodawania
Ł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]- ↑ D. E. Knuth, The Art of Computer Programming, Vol 2, „Seminumerical Algorithms”, Section 4.6.3, 3rd edition, 1997.
- ↑ Peter Downey , Benton Leong , Ravi Sethi , Computing sequences with addition chains, „SIAM Journal on Computing”, 10 (3), 1981, s. 638–646, DOI: 10.1137/0210047 .