Re: коммивояжёр

From
Vitaly Lugovsky (2:5080/1003)
To
Oleg Khovayko
Date
2003-01-15T18:36:10Z
Area
RU.ALGORITHMS
.n5080.z2.fidonet.ftn> <b02f2e$lpp$1@ddt.demos.su>
From: Vitaly Lugovsky <vsl@ontil.ihep.su>

Oleg Khovayko <olegh@hotpop.com> wrote:

>>  Не годится контрпример - ведь это решение представимо в виде рекурсии.
> 
> Пожалуйста, давайте не будем заниматься демагогией и втихаря подменять 
> тему дискуссии. Ведь дискуссия началась в Вашего утверждения:
> <<
>   Это не болтовня, это факт. Любой алгоритм в рекуррентной форме
> представляется гораздо лучше, и анализировать (в том числе и автоматически)
> его удобнее.
> >>
> Иными словами, Вы утверждали, что не существует алгоритмов,
> которые удобнее было бы представлять и анализировать в
> нерекурентной форме.

 Именно так.

> Теперь же Вы говорите о представимости -
> то есть принципиальной возможности представить - невзирая на
> "трудозатраты".

 Прошу прощения за то, что был неправильно понят. Конечно же, имелось в виду
УДОБНО ПРЕДСТАВИМО. Более удобно, чем сама итерация.

> Про представимость - я и никогда не спорил.
> Да, конечно, все представимо. Вопрос - какими силами?

 Всегда меньшими, чем те, что требуются для анализа не-функционального
алгоритма.

> Попробуйте проанализировать этот Ваш рекурентный алгоритм,
> и доказать его вычислительную сложность.

 Что понимается под "доказать вычислительную сложность"?
 Вы бы лучше попробовали ДОКАЗАТЬ сам этот алгоритм. Да ещё и в императивной
форме. Вот тогда сразу рекурсии захочется - гарантирую.

> Я уверяю, что будет существенно больше, чем O(N*N*K).

 Да ну? Он же тождественный итерации. Что за чушь?

> А итерационный алгоритм дает именно такое
> решение, и анализ его тривиален.

 Тривиален? Жыду доказательства этого алгоритма. Будет оч-чень интересно!

> И кодируется он в десять
> строчек - в прямом смысле слова.
> 
> Так и быть, привожу решение:
> 
> 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];
> }

 Ок. Чуть позже (сегодня-завтра, как время найду) приведу неимперативное 
решение той же вычислительной сложности с полным доказательством. Сравним, 
какое из доказательсв проще.

> Теперь: рекурентное описание с анализом - в студию!

 Я про столь тривиальные задачи, как анализ сложности и не говорил. 
Будем доказывать, что этот алгоритм и есть РЕШЕНИЕ задачи.

> А вот еще один пример:
> Есть дерево. Задача: обойти дерево по слоям.
> Я утверждаю, что существует итеративное решение этой задачи,
> пропорциональное N, то есть каждый узел дерева посещается один раз.
> 
> Рекуррентный алгоритм - в студию!
> А потом я дам итерационный...

 Ok. Следующей мессагой и его выдам.

--- ifmail v.2.15dev5
 * Origin: (http://news.cca.usart.ru/) USURT's FidoNET<-> (2:5080/1003@fidonet)