Załóżmy, że otrzymujesz liczbę (używając bitów w kodowaniu binarnym).
Jak szybko można znaleźć (lub stwierdzić, że takie nie istnieje) ?
Na przykład, biorąc pod uwagę wejście , można wyprowadzić .
Naiwny algorytm dla problemu przekroczyłby wszystkie możliwe wartości dla i szukałby wartości która spełnia tę właściwość.
Prostą obserwacją jest to, że nie trzeba sprawdzać wartości mniejszych niż lub większych niż . Jednak (nawet gdybyśmy mogli sprawdzić tylko możliwe wartości na wartości) to kończy się to nieefektywnym algorytmem, który ma charakter wykładniczy w wielkości wejściowej.
Alternatywnym podejściem byłoby przekroczenie możliwych wartości (wystarczy sprawdzić ) i dla każdego sprawdzenia możliwych wartości. Następnie możemy użyć:
Więc dla danego musimy tylko sprawdzić wartości z zakresu , w ten sposób za pomocą przeszukiwanie binarne (gdy jest stałą, jest monotonicznie rosnącą w ), co daje wielomian algorytm działa w .
Nadal wydaje mi się to nieefektywne i myślę, że można to rozwiązać w czasie liniowym (w wielkości wejściowej).