Łańcuch dodawania

Z testwiki
Przejdź do nawigacji Przejdź do wyszukiwania

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

ai=aj+ak,i>0,jk<i.

Pierwszym krokiem tworzenia łańcucha dodawania dla n jest zawsze a1=1+1=2. Drugim krokiem może być a2=1+1=2, a2=1+2=3, bądź a2=2+2=4. Tym samym, długość s łańcucha dodawania dla n jest ograniczona od dołu przez slog2(n) co ma miejsce dla n=2s. Jak łatwo zauważyć długość łańcucha dodawania dla n jest również ograniczona od góry przez sn1.

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

Łańcuchy dodawania o najkrótszej długości l(n) 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 {1,2,3,6,12,24,30,31} zapewnia minimalną długość siedmiu kroków dla n=31, 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 x wymaga tylko siedmiu, a nie 30 iloczynów:

x2=xx,
x3=x2x,
x6=x3x3,
x12=x6x6,
x24=x12x12,
x30=x24x6,
x31=x30x,

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 n takich części jest zadany najkrótszym łańcuchem dodawania dla n.

Przypisy

Szablon:Przypisy

Linki zewnętrzne

  1. D. E. Knuth, The Art of Computer Programming, Vol 2, „Seminumerical Algorithms”, Section 4.6.3, 3rd edition, 1997.
  2. Szablon:Cytuj