Szukam wydajnego algorytmu dla problemu:
Wejście : dodatnia liczba całkowita (zapisana w bitach) dla jakiejś liczby całkowitej .
Wyjście : liczba .
Pytanie : Czy możemy obliczyć na podstawie bitów w czasie ?
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
W moim proponowanym rozwiązaniu, jeśli znamy i , możemy łatwo obliczyć (napisz binarne cyfry a następnie a następnie zera). Zajmuje to czas .
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 ) .
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 ) .]
Wydaje się, że powinniśmy być w stanie wykorzystać wiedząc, że wkład to potęga .