Złożoność obliczeń


Odpowiedzi:


12

Dzięki szybkiej transformacie Fouriera mnożenie liczb bitowych może być wykonane w czasie ˜ O ( k ) (gdzie tylda oznacza , że ignorujemy czynniki polilogarytmiczne). Przez powtarzanie kwadratu możemy obliczyć n n 2 z mnożeniem O ( log n ) , a każde mnożenie obejmuje liczbę większą niż n n 2 , która ma z grubsza n 2 log 2 n bitów. Zatem całkowity wymagany czas wynosi ˜ O ( n 2 (kO~(k)nn2O(logn)nn2)n2log2n .O~(n2(logn)2)=O~(n2)


3

Edytowane w odpowiedzi na komentarze Czas obliczenia można rozłożyć na czas wymagany do obliczenia f 1 ( n ) = n 2 i czas wymagany do wykonania n f 1 ( n ) . Zakładam, że pomnożenie liczby m bitów przez liczbę n bitów zajmuje dokładnie m n czasu metodą podręcznika szkolnego; dodatki itp. są stałym czasem. W rezultacie obliczenie n 2 zajmuje log 2f(n)=nn2f1(n)=n2nf1(n)mnmnn2czas.log22(n)

Załóżmy, że do obliczania używamy potęgowania binarnego . Potęgowanie binarne wykonuje dwa rodzaje operacji przy obliczaniu f ( n ) : podniesienie kwadratu bieżącego produktu i pomnożenie bieżącego produktu przez n , w zależności od tego, czy bieżący bit w rozwinięciu binarnym n 2 wynosi 0 czy 1. W najgorszym przypadku n 2 jest potęgą dwóch, tak że potęgowanie binarne wielokrotnie kwadratuje bieżący iloczyn, aż osiągnie odpowiedź. Zauważ, że n 2 ma m = 2 log 2 ( nf(n)f(n)nn2n2n2 bitów, tak że liczba takich kwadratów wynosi m = m - 1 . Jest to przypadek, który analizujemy poniżej.m=2log2(n)m=m1

Pierwsze podniesienie do kwadratu zajmuje czas , co daje iloczyn o 1 = 2 log 2 ( n ) -bit. Drugie kwadraty przyjmują dwie liczby o 1 bit i biegną w czasie t 2 = o 2 1 , co daje iloczyn o 2 = 2 o 1- bit. Kontynuując, i- ty krok zajmuje t i = 4 i - 1 logt1=log22(n)o1=2log2(n)o1t2=o12o2=2o1iczas i wyjścia aoi=2ilog2(n)-bitowy produkt. Proces ten zatrzymuje się nam-tymetapie; w rezultacie wymaga czasuti=4i1log22noi=2ilog2(n)m

. Texp=[1..m]ti=log22(n)[1..m]4i=4m13log22n

Po uwzględnieniu początkowego kosztu do kwadratu potrzebujemy czasu

Texp+log22n

Uwaga

  • W obliczeniach pominąłem niektóre podłogi i sufity, mając nadzieję, że nie wpłyną one znacząco na odpowiedź.
  • Celowo pominąłem analizę opartą na na korzyść dokładnej górnej granicy, żeby być rygorystycznym. O
  • Powyższe rozumowanie wyjaśnia również, dlaczego moja wcześniejsza analiza była wadliwa. oznaczenie stosowano w szybki i-luźny sposób, i korzystnie pominięta stałe tak, że na przykład, Σ T i magiczną się O ( log n ) . OtiO(logn)
  • Mnożenie można zawsze przyspieszyć za pomocą FFT i innych metod.

1
Jak masz złożoność do obliczeń n 2 ? O(1)n2

4
Mam zamiar powiedzieć, że mnożenie dwóch liczb bitowych zajmuje czas O ( log n ) zamiast czasu O ( 1 ) , musisz to również obliczyć w koszcie potęgowania binarnego. nO(logn)O(1)
Mark Dominus

2
Zauważ, że końcowy wynik ma bitów. Bardzo trudno jest obliczyć n 2 log 2 n bitów w czasie O ( log n ) . n2log2nn2log2nO(logn)

W porządku, przyjmuję do wiadomości
PKG

1
@ThomasAndrews: To zależy od maszyny i modelu kosztów. Nie jest niczym niezwykłym zakładanie modelu pamięci RAM z ciągłym kosztem dodatków.
Raphael
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.