| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Числа Фибоначчи |
| Автор: politex 22.11.2004, 13:44 |
| Как можно найти n-элемент и S(n)-сумму чисел Фибоначчи |
| Автор: maxim1000 22.11.2004, 14:21 |
| а в чем проблема? если совсем просто, то в виде рекурсивной функции, при вычислении накапливать или вопрос в оптимизации? |
| Автор: politex 22.11.2004, 14:55 | ||
| 2 maxim1000 Da, vopros v optimizatsii. U nas prosto pamyat i vremiya ogranichena. Time limit: 0,2 s Memory limit: 600 Kb. Nash kod takoy:
|
| Автор: maxim1000 22.11.2004, 15:09 | ||
| есть один интересный подход: рассмотрим числа Фибоначчи, как состояние динамической дискретной системы x - последнее число y - предпоследнее (x,y)->(x+y,x) данное преобразование линейное, а значит, описывается матрицей (2*2) (1 1) (0 1) первоначальный вектор (1,1) для получения n-го числа Фибоначчи нуно возвести матрицу в n-ю степень и подействовать ней на (1,1) (одна из координат и будет ответом) возведение матрицы в n-ю степень занимает порядка log n операций теперь о сумме: для вычисления суммы в состояние системы можно ввести еще один параметр - сумма (x,y,s)->(x+y,x,s+x) в этому случае матрица получается 3*3: (1 1 0) (0 1 0) (1 0 1) теперь просто надо возвести в степень ее... Добавлено @ 15:13 ну и немного о возведении матрицы в степень n за время порядка log n
тип matrix использовал для понятности, должен поддерживать операцию умножения и конструктор копии |
| Автор: podval 22.11.2004, 20:54 |
| maxim1000 Дай координаты этого подхода. Где взял? |
| Автор: MBo 23.11.2004, 08:28 |
| Если не возбраняется вещественная арифметика, то s5=Sqrt(5) F(n)=((1+s5)^n-(1-s5)^n)/(2^n*s5) или F(n)=Round(Fi^n/s5) где Fi - золотое сечение, (1+s5)/2 Что же касается суммы, то S(n)=F(n+2)-1 |
| Автор: maxim1000 23.11.2004, 11:57 | ||||
когда-то в лицее рассказывали в виде таких формул:
а когда я вспомнил числа Фибоначчи после того, как изучил линейную алгебру и теорию управления динамическими системами, придумал такой подход к этим формулам (там просто надо расписать матрицу в n-й степени) |