Czy możemy obliczyć


11

Szukam wydajnego algorytmu dla problemu:

Wejście : dodatnia liczba całkowita 3n (zapisana w bitach) dla jakiejś liczby całkowitej n0 .

Wyjście : liczba n .

Pytanie : Czy możemy obliczyć n na podstawie bitów 3)n w czasie O(n) ?


To jest teoretyczne pytanie motywowane moją odpowiedzią na pytanie matematyczne. SE Jak znaleźć wzór na ten bijection? . W tym pytaniu autor chciał znaleźć bijection z

{2)n3)m:n0 i m0}
oraz liczb naturalnych N.={1,2),} . Zaproponowałem
2)m3)n2)m(2)n+1)
jako rozwiązanie. Inna odpowiedź brzmiała: „nie ma prostej formuły”, co sprawia, że ​​zastanawiam się, jak (obliczeniowo) proste jest moje proponowane rozwiązanie.

W moim proponowanym rozwiązaniu, jeśli znamy n i m , możemy łatwo obliczyć 2)m(2)n+1) (napisz binarne cyfry n a następnie 1 a następnie m zera). Zajmuje to czas O(n+m) .

Znalezienie z bitów 2 m 3 n jest równoznaczne ze znalezieniem najmniej znaczącego bitu (który można obliczyć, zliczając przesunięcia odpowiednich bitów, pozostawiając 3 n w pamięci). Zajmuje to czas O ( m ) .m2)m3)n3)nO(m)

Musimy jednak również znaleźć , co może być trudniejsze. Można byłoby znaleźć n poprzez wielokrotne dzielenie przez 3 , ale wydaje się to marnotrawstwem. Wymaga n operacji dzielenia, z których każda zajmie czas O ( n ) , więc w sumie jest to czas O ( n 2 ) . [Właściwie po każdej iteracji liczba cyfr będzie zmniejszać się liniowo, ale nadal powoduje to czas O ( n 2 ) .]nn3)nO(n)O(n2))O(n2))

Wydaje się, że powinniśmy być w stanie wykorzystać wiedząc, że wkład to potęga .3)


2
Jaki jest twój dokładny model obliczeń? Jakie operacje są dozwolone w czasie ? (Gdybyśmy mogli wykonywać arytmetykę z liczbami takimi jak log 2 3 , byłoby to całkiem przydatne ...)O(1)log2)3)
Yuval Filmus,

3
Czy downvoter może wyjaśnić downvote? To wcale nie wydaje się trywialne pytanie. Jaki jest najlepszy czas działania w rozsądnym modelu obliczeniowym?
Yuval Filmus,

1
Wyobrażam sobie taśmy z zerami, 1 i pustymi komórkami (z nieskończoną liczbą taśm). Chcę, aby jednobitowe operacje przełączania i lewe / prawe operacje działały w czasie . (Jeśli mamy znacznik 0-ty bit na nieskończonej taśmie, wówczas przesunięcie w lewo / prawo osiąga się poprzez przesunięcie znacznika). W przeciwieństwie do maszyny Turinga nie chcę, aby przesuwanie wskaźnika trwało dłużej. Zatem „przełączanie 0-tego bitu” zajmuje tyle samo czasu, co „przełączanie 124126-tego bitu”. O(1)
Rebecca J. Stones,

Może to być w jakiś sposób związane z tym pytaniem
J.-E.

Czy dolna granica oczywista? Ω(n)
Boris Bukh,

Odpowiedzi:


9

Oczywistym podejściem jest:

(1) Oblicz przybliżenie do . Możesz go zbliżyć do błędu addytywnego 1, zliczając liczbę bitów w danej reprezentacji binarnej, i do błędu addytywnego ϵ , dodatkowo patrząc na górne O ( log 1log2(3n)ϵbity wejścia. Powinny wystarczyć, aby wybrać stałą wartośćε, tak że (po połączeniu z błędem w etapie (2)) końcowe końców wynik w ciągu addytywnej błędu1/2prawidłowych.O(log1ϵ)ϵ1/2

(2) Oblicz przybliżenie do . Nie znam algorytmów do tego, ale spodziewam się, że wymagają one wielomianu czasu w liczbie potrzebnych bitów precyzji, a potrzebujesz tylko O ( log n ) bitów precyzji.log2(3)O(logn)

(3) Podziel odpowiedź na (1) przez odpowiedź na (2) i zaokrąglij do najbliższej liczby całkowitej.

Tak więc pierwszy krok zajmuje czas liniowy (w większości modeli obliczeniowych, chociaż może nie dla niektórych słabych mocy, takich jak maszyny Turinga z pojedynczą głowicą ), a pozostałe kroki powinny być polilogarytmiczne.


3
Uważam, że obliczenie do t bitów precyzji wymaga czasu O ( M ( t ) log t ) , gdzie M ( t ) O ( t log t 2 log t ) jest czasem pomnożenia t- bit liczby. Zobacz Brent - Zimmermann, loria.fr/~zimmerma/mca/pub226.htmllog2(3)tO(M(t)logt)M.(t)O(tlogt2)logt)t
Ryan O'Donnell,

Dzięki za referencje i przepraszam, że jestem zbyt leniwy, by sam to sprawdzić.
David Eppstein,

9

Dla dowolnej liczby całkowitej zapisanie 3 nw systemie binarnym wymaga dokładnie L = log 2 ( 3 n ) + 1 bitów. Niektóre elementarne algebry sugerują, że L - 2n>03nL=log2(3n)+1 Dla dowolnej długości bituL1w tym zakresie znajduje się co najwyżej jedna liczba całkowita. Zatem, biorąc pod uwagę całkowitą potęgę3,która madługośćLbitów, wykładnik musi być liczbą całkowitą n=L-1

L2log23nL1log23.
L13L
n=L1log23.

4

Oto inne podejście. Biorąc pod uwagę niskie cyfry 3 n , możesz nauczyć się 3 n mod 10 k, a zatem 3 n mod 5 k . Wygląda na to, że 3 to moduł generatora 5 k (tj. 3 ma porządek φ ( 5 k ) = 5 k - 1 × 4 ).k3n3nmod10k3nmod5k35k3φ(5k)=5k1×4

Dlatego, używając dyskretnego dziennika i podnoszenia Hensela, myślę, że powinieneś być w stanie bardzo skutecznie obliczyć z niskich cyfr k 3 n . Innymi słowy, zaczynasz od obliczenia n mod 4 od niskiej cyfry 3 n , poprzez przeniesienie logu dyskretnego 3 n mod 5 do podstawy 3 , modulo 5 ; to ujawnia n mod 4 i można to zrobić w O ( 1 )nmodφ(5k)k3nnmod43n3nmod535nmod4O(1)czas. Następnie znajdziesz dyskretny log do podstawy e , modulo 25 ; ujawnia to n mod 20 i można to zrobić w czasie O ( 1 ) (korzystając z wiedzy n mod 4 , jest tylko 5 możliwości, które musisz wypróbować). Powtarzać. Na każdym kroku korzystasz z wiedzy n mod φ ( 5 k - 1 ), aby pomóc ci wydajnie obliczyć log dyskretny 3 n mod 53nmod25e25nmod20O(1)nmod45nmodφ(5k1) , wykorzystując fakt, że istnieje tylko 5 możliwych wartości dla n mod φ ( 5 k ) .3nmod5k5nmodφ(5k)

Teraz po prostu niech będzie wystarczająco duże, a to ujawni n .kn

Musisz dowiedzieć się, czy czas działania wynosi , ale wydaje mi się, że tak może być. Podejrzewam, że wystarczy pozwolić k = O ( n ) i podejrzewam, że możesz wykonać każdą iterację w czasie O ( 1 ) , łącznie przez czas O ( n ) .O(n)k=O(n)O(1)O(n)

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.