dask писал(а):
maxal писал(а):
На самом деле,
вычислять необязательно. Вместо этого можно воспользоваться формулой
и удваивать индекс чисел Фибоначчи до тех пор, пока не будет получено число
большее заданного, затем вычислить
(по той же формуле) и т.д. По сути - это будет вариант дихотомии (двоичного поиска) на числах Фибоначчи.
Все же получается последовательный перебор.
Где же это последовательный?
(и все промежуточные степени) вычисляется за
арифметических операций. Каждое последующее число Фибоначчи при дихотомии - за O(1) операций каждое, и весь поиск займет
шагов.
Нетрудно видеть, что
(если точнее, то что-то типа
). Вот и получается, что суммарная сложность такого поиска равна
арифметических операций.
Если умножение чисел длины
производить за
машинных операций (понятно, что сложение и сравнение также вписываются в эту оценку), то суммарную сложность можно оценить величиной
машинных операций.
Никаких логарифмов вычислять не нужно, вся работа сводится к операциям сложения, умножения и сравнения целых чисел (примерно той же длины что и
).
Добавлено спустя 15 минут 34 секунды:
Так как придется хранить всего лишь
чисел, то расход памяти в данном алгоритме можно оценить как
битов.
Добавлено спустя 17 минут 1 секунду:
P.S. Лучше работать не напрямую с числами Фибоначчи, а с матрицами вида
Понятно, что произведение матриц такого вида опять же является матрицей такого вида.