Obliczanie liczby bitów dużej potęgi liczby całkowitej

10

Biorąc pod uwagę dwie liczby całkowite i n w reprezentacji binarnej, jaka jest złożoność obliczania wielkości bitowej x n ?xnxn

Jednym ze sposobów jest obliczenie poprzez obliczenie aproksymacji log 2 ( x ) z wystarczającą dokładnością. Wygląda na to, że obliczenie log 2 ( x ) z k bitów dokładności można wykonać w O ( M ( k ) log k ), gdzie M (1+log2(xn)=1+nlog2(x)log2(x)log2(x)kO(M(k)logk) oznacza czas potrzebny do obliczenia iloczynu dwóch liczb całkowitych o długości k . Daje to (nie specjalnie prosty) algorytm złożoności w przybliżeniu O ( s log 2 s ), jeśli s jest ograniczeniem wielkości bitowej zarówno x, jaki n (jeśli nie popełniłem błędu).M(k)kO(slog2s)sxn

Czy możemy pokonać gdzie s jest rozmiarem x i n (w przypadku, gdy mają one porównywalne rozmiary)? Czy istnieje prosty algorytm pozwalający uzyskać tę złożoność lub lepszą?O(slog2(s))sxn

Uwaga: Interesuje mnie złożoność modelu teoretycznego, takiego jak maszyny Turinga.

Bruno
źródło
Proponuję migracji / "promowanie" to Theoretical Computer Science
vzn
@vzn: Nie sądzę, żeby to było przydatne ...
Bruno,
Dlaczego nie? to pytanie przypomina mi algorytmiczne ataki na hipotezę Dysona, np. takie jak objęte przez RJLipton w 1 , 2
od
Po prostu dlatego, że znalazłem odpowiedź na moje pytanie, więc nie muszę zadawać jej w innym miejscu.
Bruno

Odpowiedzi:

1

[edytuj] Zgodnie z sugestią, edytuję swoją odpowiedź, aby podać więcej szczegółów.

Odpowiedź na drugie pytanie jest moim nr :

Propozycja. Obliczenie z dokładnością k jest co najmniej tak trudne, jak obliczenie rozmiaru bitu x 2 k .log(x)kx2k

Dowód. Niech oznacza rozmiar bitu liczby całkowitej y . Najpierw zauważ, że dla nieujemnej liczby całkowitej y rozmiar bitu y wynosi 1 + log y .|y|yyy1+logy

Zatem . Teraz 2 k log ( x ) to log ( x ) przesunięte o k pozycje w lewo. Zatem można obliczyć log ( x ) z dokładnością k , po prostu odejmując 1 do rozmiaru bitu x 2 k i przesuwając wynikowe pozycje k w prawo.|x2k|=1+2klogx2klog(x)log(x)klog(x)k1x2kk

Bruno
źródło
1
Dlaczego liczba bitów w umożliwia obliczenie logarytmu x do k bitów precyzji? Czy Twoja redukcja faktycznie działa? Co jeśli specjalny przypadek, w którym n = 2 k był znacznie łatwiejszy / trudniejszy niż wszystkie inne możliwe wartości n (nie-potęgi-dwóch)? Czy potrafisz wykluczyć tę możliwość? x2klogxkn=2kn
DW
@DW: Wracam do tego pytania, po komentarzu vzn. Mój dowód jest następujący: Liczba bitów liczby całkowitej wynosi 1 + log y . Zatem liczba bitów w x 2 k wynosi 1 + 2 k log x . Ponadto 2 k log x jest taki sam jak log x, ale przesunięto pozycje k w lewo. Zatem 2 k log x daje (przynajmniej) k pierwszych bitówy1+logyx2k1+2klogx2klogxlogxk2klogxk . Zatem jeśli możesz obliczyć liczbę bitów x 2 k , odejmując 1 od wyniku, otrzymujesz pierwsze k bitów log x . Czy to ma sens? logxx2k1klogx
Bruno,
Tak, to ma dla mnie większy sens! Zwłaszcza, że ​​próbujesz tylko wykazać twardość. Czy mogę zachęcić cię do zaktualizowania odpowiedzi za pomocą tego bardziej szczegółowego wyjaśnienia? Dziękujemy za powrót do tej kwestii i udokumentowanie odpowiedzi na własne pytanie.
DW