Обратный алгоритм Фибоначчи?

Есть десятки способов вычисления F (n) для произвольного n, многие из которых имеют отличное время выполнения. и использование памяти.

Однако предположим, что я хотел задать противоположный вопрос:

Учитывая F (n) для n> 2, что такое n?

(Ограничение n> 2 существует, поскольку F ( 1) = F (2) = 1 и нет однозначного обратного).

Какой способ решения этой проблемы был бы наиболее эффективным? Это легко сделать за линейное время, перечислив числа Фибоначчи и остановившись, когда вы достигнете целевого числа, но есть ли способ сделать это быстрее, чем это?

EDIT: в настоящее время лучшее решение, опубликованное здесь, выполняется за время O (log n) с использованием памяти O (log n), предполагая, что математические операции выполняются в O (1) и что машинное слово может содержать любое число в пространстве O (1). Мне любопытно, можно ли снизить требования к памяти, поскольку числа Фибоначчи можно вычислять с использованием пространства O (1).

67
задан templatetypedef 9 April 2018 в 20:08
поделиться