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


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Vitaly Lugovsky                      2:5080/1003    16 Jan 2003  19:01:25
 To : Oleg Khovayko
 Subject : Re: коммивояжёр
 -------------------------------------------------------------------------------- 
 
 Oleg Khovayko <olegh@hotpop.com> wrote:
 
 > Так и быть, привожу решение:
 > 
 > int NumWays(int I, int J, int K, vector< vector<int> > matrix) {
 >   vector<int> V(N);
 >   V[I] = 1;
 >   while(K--)
 >     V *= matrix; // тут векторное произведение вектора на матрицу
 >   return V[J];
 > }
 
  Так... Тут я погорячился. Обламываюсь с доказательством - оно
 неэлементарное в достаточной мере для того, чтоб перевод в рекурсию вообще
 считать за труд. Сам же алгоритм простенький, намного короче его и не
 записать:
 
 let numways n i j k m =
   let v0 = Array.make n 0 in v0.(i) <- 1;
   let v = dowhile (fun x -> vm_mul x m) k v0 in
   v.(j)
 
 > А вот еще один пример:
 > Есть дерево. Задача: обойти дерево по слоям.
 > Я утверждаю, что существует итеративное решение этой задачи,
 > пропорциональное N, то есть каждый узел дерева посещается один раз.
 > 
 > Рекуррентный алгоритм - в студию!
 > А потом я дам итерационный...
 
  Вот, типа, самый тупой и примитивный вариант:
 
 let rec tfindl f nl =
   let rec nxtlyr = function
     hd :: tl ->
      (match hd with
        Tnode(v,l,r) -> if f v than raise (Found(v)) else
          l::r::(nxtlyr tl)
       )
    | [] -> []
   in tfindl f (nxtlyr nl)
 
 Причём, тут рекурсия хвостовая - так что стек не растёт ни фига.
 Hефункциональным тут является только исключение - но можно и без исключений
 написать, мало что изменится.
 
  Естественно, каждый узел дерева тут посещается лишь один раз.
 --- ifmail v.2.15dev5
  * Origin: (http://news.cca.usart.ru/) USURT's FidoNET<-> (2:5080/1003@fidonet)
 
 

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

 Тема:    Автор:    Дата:  
 Re: коммивояжёр   Vladimir Vassilevsky   12 Jan 2003 19:07:19 
 Re: коммивояжёр   Vitaly Lugovsky   12 Jan 2003 22:24:50 
 Re: коммивояжёр   Oleg Khovayko   12 Jan 2003 23:29:19 
 Re: коммивояжёр   Vitaly Lugovsky   14 Jan 2003 18:51:52 
 Re: коммивояжёр   Oleg I. Khovayko   14 Jan 2003 18:56:13 
 Re: коммивояжёр   Vitaly Lugovsky   15 Jan 2003 00:14:22 
 Re: коммивояжёp   Alexei Philippov   15 Jan 2003 04:55:49 
 Re: коммивояжёp   Vitaly Lugovsky   15 Jan 2003 19:29:41 
 Re: коммивояжёp   Alexander Krotov   18 Jan 2003 19:05:37 
 Re: коммивояжёр   Oleg Khovayko   15 Jan 2003 05:55:46 
 Re: коммивояжёр   Vitaly Lugovsky   15 Jan 2003 19:36:10 
 Re: коммивояжёр   Vitaly Lugovsky   16 Jan 2003 19:01:25 
 Re: коммивояжёр   Vitaly Lugovsky   16 Jan 2003 19:26:36 
 Re: коммивояжёр   Oleg I. Khovayko   17 Jan 2003 18:48:11 
 Re: коммивояжёр   Vitaly Lugovsky   17 Jan 2003 21:24:04 
 Re: коммивояжёр   Andrew Ezhguroff   15 Jan 2003 02:50:35 
 коммивояжёр   Alex Cvetkov   17 Jan 2003 01:44:23 
 Re: коммивояжёр   Vitaly Lugovsky   17 Jan 2003 15:36:28 
 коммивояжёр   Alexey Krasnov   13 Jan 2003 21:40:48 
 Re: коммивояжёр   Vitaly Lugovsky   14 Jan 2003 18:53:06 
 Re[2]: коммивояжёр   Alexey Krasnov   14 Jan 2003 18:54:10 
 Re: коммивояжёр   Vitaly Lugovsky   15 Jan 2003 00:15:28 
 коммивояжёр   Andrew Aksyonoff   15 Jan 2003 06:14:53 
 Re: коммивояжёр   Vitaly Lugovsky   16 Jan 2003 18:48:29 
 Re: коммивояжёр   Nick Kovaliov   17 Jan 2003 10:50:39 
 Re: коммивояжёр   Vitaly Lugovsky   17 Jan 2003 15:38:45 
 Re: коммивояжёр   Alexander Krotov   17 Jan 2003 17:05:22 
 коммивояжёр   Andrew Aksyonoff   17 Jan 2003 19:56:44 
 Re: коммивояжёр   Vitaly Lugovsky   18 Jan 2003 18:11:29 
 коммивояжёр   Roman Rogozin   14 Jan 2003 02:05:05 
 Re: коммивояжёр   Vitaly Lugovsky   14 Jan 2003 18:53:56 
 коммивояжёр   Dmitry Samoylov   14 Jan 2003 00:45:22 
Архивное /ru.algorithms/14646c9521a0b.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional