Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Dmitry Pankov                        2:5022/58.27   24 Jul 2001  13:10:02
 To : Dima Kiryakov
 Subject : Числа фибоначи
 -------------------------------------------------------------------------------- 
 
 
 21 июля 2001 года (а было тогда 00:19) бабушка мне сказала, что
 Dima Kiryakov в своем письме к All писал:
 
  DK> Подскажите, как итеративно находить числа Фибоначи.
 
 Из книжульки "Системы искусственного интеллекта" (Лорьен):
 
 === Cut ===
 Итеративные алгоритмы. Чтобы уменьшить эту дорогостоящую из-за большой глубины
 рекурсивность и избежать многократного повторения одних и тех же расчетов,
 можно преобразовать приведенную выше рекурсивную схему в рекуррентную. Иными
 словами, мы расчленим задачу, предположив, что она решена до определенной
 точки, т. е. до некоторого значения i из n. Затем мы выведем из него F(j) по
 крайней мере еще для одного значения j. Для этого выдвигается гипотеза
 рекуррентности. В нашем случае естественно предположить следующее. Пусть F(1),
 F(2), ..., F(i) уже получены. Hачнем с i=2. При этом задача решена полностью,
 когда j = n.
 Если j<>n, приведенная в определении формула F(i+1)= F(i)+F(i-1) позволяет
 распространить рекуррентную гипотезу на одну ступень дальше; следовательно, нам
 известны F(1), F(2), ..., F(i), F(i+1). Более того, приведенная в определении
 формула показывает, что члены F(1),F(2), ..., F(i-2) в данном рекуррентном
 соотношении не участвуют. Вся необходимая информация содержится в тройке [i,
 F(i), F(i-1)]. Пусть в соответствии с гипотезой эта тройка известна; тогда мы
 можем вывести из нее следующую тройку:
 [i+1, F (i+1), F (i)] = [i+1, F (i) + F (i-1), F (i)].
 Тем самым мы упростили гипотезу рекуррентности и нашу схему подсчета. Итак, у
 нас есть искомый итеративный алгоритм.
 Оказывается, нам не нужно было запоминать вектор F[1, n] целиком, а достаточно
 было двух его значений. Hазовем эти значения u и v: u соответствует F(i), a v -
 F(i-1). Тогда от тройки [i, u, v] мы можем перейти к тройке [i+l, u+v, u]
 i = i+l {новое значение i}
 w = u    {сохранение прежнего значения u}
 u = u+v {новое значение u по приведенной в определении формуле}
 v = w     {новое значение v = прежнее значение u=F(i)}
 Hачальные условия и тест остановки программ уже были указаны, так что полный
 алгоритм рассматриваемого третьего типа записывается следующим образом:
 
 Процедура Фибоначчи: F (n)
 i = 2; u = 1; v = 1;
 {Рекуррентная гипотеза: [i, F(i)=u и F(i-1)=v] известны}
 ПОВТОРЯТЬ ДО ТЕХ ПОР ПОКА i <> n
   i = i+1;
   w = u;
   u = u+v;
   v = w;
 КОHЕЦ ЦИКЛА по i
 РЕЗУЛЬТАТ u
 Конец процедуры
 === Cut ===
 С наилучшими пожеланиями, Dmitry
                                                   *e-mail: panda@tula.net*
  .  Тишина
 ... Increase free space on your HDD - del C:\WINDOWS\*.*
 --- X-Mailer: The Bat! (v1.53) Personal
  * Origin: Press any key to continue or any other key to exit (2:5022/58.27)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Числа фибоначи   Dima Kiryakov   21 Jul 2001 00:19:33 
 Числа фибоначи   Kluchnikov Eugene   23 Jul 2001 19:14:02 
 Re: Числа фибоначи   Martynenko Sergey   24 Jul 2001 14:00:28 
 Числа фибоначи   Dmitry Pankov   24 Jul 2001 13:10:02 
 Re: Числа фибоначи   Serge Kanilo   25 Jul 2001 03:59:35 
 Re: Числа фибоначи   Serge Kanilo   25 Jul 2001 05:20:03 
Архивное /ru.algorithms/33783b5d74ec.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional