<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3831429</guid>
        <pubDate>Tue, 26 May 2020 03:05:32 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3831429</link>
        <description><![CDATA[Black_Dragon: <strong class='tag-b'>swf</strong><br>
Ну как я понял, цель ДП. :rolleyes:]]></description>
        <author>Black_Dragon</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3831424</guid>
        <pubDate>Mon, 25 May 2020 22:46:49 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3831424</link>
        <description><![CDATA[swf: На Прологе что угодно проканает, даже сортировка &quot;пузырёк&quot;.<br>&quot;Но зачем, сэр?&quot;]]></description>
        <author>swf</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3831402</guid>
        <pubDate>Mon, 25 May 2020 11:19:39 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3831402</link>
        <description><![CDATA[Black_Dragon: А на Prolog-е такое не проканает?<br> :rolleyes:]]></description>
        <author>Black_Dragon</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830272</guid>
        <pubDate>Tue, 05 May 2020 11:42:14 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830272</link>
        <description><![CDATA[FasterHarder: В итоге реализовал через алгоритм Беллмана-Форда:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">procedure FB(pn, ps: integer);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;i, j: integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;for i := 1 to pn do</div><div class="code_line">&nbsp;&nbsp; &nbsp;d[i] := inf;</div><div class="code_line">&nbsp;&nbsp;d[ps] := 0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;for i := 1 to (pn - 1) do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;for j := 1 to (E - 1) do</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if(d[edges[j].v] + edges[j].w &#60; d[edges[j].u]) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;d[edges[j].u] := d[edges[j].v] + edges[j].w;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
автор алгоритма клянется, что там есть метод динамического программирования<br>
ну, не знаю, ну, всякое бывает, наверное, да, что-то из ДП есть, а может и нет, а кто ж его знает, ну да ладно, что ж поделать-то теперь, ну не знаю...<br>
<br>
и так сойдет (с)  :lol: <br>
<br>
ЗЫ: результаты программа выдает ПРАВИЛЬНЫЕ]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830241</guid>
        <pubDate>Mon, 04 May 2020 18:07:20 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830241</link>
        <description><![CDATA[swf: Обнаружила новую книгу, вернее, 3 тома Тим Рафгарден &quot;Совершенный алгоритм&quot;. <br>Будет, что почитать во время самоизолированного летнего отпуска.<br>Один том называется &quot;Жадные алгоритмы и динамическое программирование&quot;.<br>Там, в частности, объясняется различие между ДП и подходом &quot;Разделяй и властвуй&quot;, автор находит 6 отличий. Основная проблема у ДП со склеиванием решений подзадач, которой нет у &quot;Разделяй и властвуй&quot;.<br>16.4.4. Динамическое программирование против «разделяй и властвуй»<br>6. Парадигму «разделяй и властвуй» можно рассматривать как частный случай динамического программирования, в котором каждый рекурсивный вызов выбирает фиксированную коллекцию подзадач для рекурсивного решения. Как более сложная парадигма, динамическое программирование применяется к более широкому кругу задач, чем «разделяй и властвуй», но оно также более технически требовательно в применении (по крайней мере, до тех пор пока у вас не будет достаточного практического опыта).<br>Какую парадигму следует предпочесть, столкнувшись с новой задачей? Если вы видите решение «разделяй и властвуй», непременно используйте его. Если все ваши попытки «разделяй и властвуй» оказываются безуспешными — и в особенности если они оказываются безуспешными, потому что шаг совмещения всегда требует повторного выполнения большого объема вычислений с нуля, — то пришло время попробовать динамическое программирование.]]></description>
        <author>swf</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830222</guid>
        <pubDate>Mon, 04 May 2020 12:51:35 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830222</link>
        <description><![CDATA[AVA12: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>2. Современное ДП характеризуется: рекурсией и рекуррентными соотношениями между элементами динамики, хранение ранее вычисленных значений (мемоизация)</div></div><br>
Что значит &quot;характеризуется&quot;? В перечислении указаны обязательные признаки или всего лишь часто встречающиеся практики?<br>
Мемоизация - это еще одна техника оптимизации, ДП остается ДП и с мемоизацией, и без.]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830197</guid>
        <pubDate>Mon, 04 May 2020 09:42:35 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830197</link>
        <description><![CDATA[swf: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=418496&view=findpost&p=3830178'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AVA12 &#064; <time class="tag-quote__quoted-time" datetime="2020-05-04T01:21:53+00:00">04.05.20, 01:21</time></span><div class='quote '>5. Однако, насколько я понял, зависимости (через состояние) между шагами должны образовывать связный орграф. Если задача разбивается на непересекающиеся подзадачи, которые могут быть решены раздельно-параллельно - это не ДП (так в википедии, и в русской, и в английской).</div></div><br>
Похоже на правду. <br>
Вернее, похоже, что как раз это я и не понимала - чем ДП отличается от разложимой системы продукций. Ну и целевая функция у ДП должна быть аддитивной, т.е. раскладываться в сумму шагов.<br>
<br>
Ну а термин &quot;программирование&quot; и у линейного программирования означает совсем не программирование.]]></description>
        <author>swf</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830185</guid>
        <pubDate>Mon, 04 May 2020 07:42:25 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830185</link>
        <description><![CDATA[FasterHarder: подытожим)<br><br>1. Этот ученый Беллман ввел этот термин в 50-е годы. А давайте-ка подумаем, насколько в эти годы было развито программирование (алгоритма + структуры данных) как таковое? Да оно вообще только ЗАРОЖДАЛОСЬ&#33; Кнут школу еще не закончил)) Дейкстра лишь начал погружение в эту область и пр.мастодонты толком ничего не придумали. Нормальных ЯП не существовало, а копмы, если и были, то выглядели шкафоподобно. Все рассуждения Беллмана о ДП были сделаны исключительно с колокольни КИБЕРНЕТИКИ, чистой голимой кибернетики) То, что понимают сегодня под ДП и то, что понимал Беллман - имеет достаточно слабую связь.<br><br>2. Современное ДП характеризуется: рекурсией и рекуррентными соотношениями между элементами динамики, хранение ранее вычисленных значений (мемоизация)<br><br>А вообще, ведь ДП - чисто термин&#33; Он объединяет ряд техник программирования (там и восходящее программирование и структурный подход и пр. пр.) и не более того. Можно писать &quot;совершенный код&quot;, даже не имея представления о том, что существует какое-то понятия динамического программирования<br>------------------------------------------<br>Поставленная задача в 1ом посте ведь имеет некоторые решения в сети. Там нет примеров кода и структур данных, но есть математические модели. И во всех описаниях был показано способ решения, который пытался показать amk в посте №4 (разбивка на зоны).<br>И на данный момент я вот совсем не уверен, что это не является чуть ли не единственным верным подходом к решению задачи в рамках ДП. Реализовать алгоритм Беллмана-Форда будет попроще...]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830178</guid>
        <pubDate>Mon, 04 May 2020 01:21:53 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830178</link>
        <description><![CDATA[AVA12: Почитал википедию и чуток пролога Беллмана, и, кажется, что-то понял. Если коротко и неточно:<br>
<br>
1. Динамическое программирование (ДП) - это не про <em class='tag-i'>программирование</em>, а про пошаговое управление динамическими системами с целью минимизации/максимизации некоторой функции от параметров системы.<br>
2. Применительно к программированию системой является некий алгоритм, разбитый на шаги, и состояние программы на каждом шаге. Для применения ДП и задача, и алгоритм должны обладать некоторыми определенными свойствами.<br>
3. Целью ДП в программировании является такой выбор действий на каждом шаге алгоритма, чтобы каждое новое состояние содержало новую часть (слагаемые, элементы списка и пр.) решения некоторой общей задачи (либо более точное приближение к решению). Например, в алгоритме Дейкстры на каждом шаге находится предварительная или окончательная оценка расстояния для очередной вершины, а совокупность всех окончательных оценок является решением общей задачи.<br>
4. Каждый следующий шаг должен зависеть только от текущего состояния, точная предыстория никого не интересует.<br>
5. Однако, насколько я понял, зависимости (через состояние) между шагами должны образовывать связный орграф. Если задача разбивается на непересекающиеся подзадачи, которые могут быть решены раздельно-параллельно - это не ДП (так в википедии, и в русской, и в английской).<br>
<br>
Все это смутно понятно и имеет смысл. Все прочее - рекурсия, мемоизация - это шелуха и довески.]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830176</guid>
        <pubDate>Sun, 03 May 2020 22:28:12 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830176</link>
        <description><![CDATA[swf: Такой у меня нет.<br>
У меня единственная бумажная книга<br>
Беллман Р., Калаба Р. Динамическое программирование и современная теория управления<br>
<img class='tag-img' src='https://dl181.zlibcdn.com/covers/books/45/02/cc/4502ccd441f6985fa0f4670a72055b07.jpg' alt='user posted image'>]]></description>
        <author>swf</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830175</guid>
        <pubDate>Sun, 03 May 2020 21:51:10 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830175</link>
        <description><![CDATA[AVA12: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Сам способ решения ДП - мношаговый процесс принятия решений, см. книгу Беллмана, там он даёт все определения.</div></div><br>
Вот <a class='tag-url' href='https://www.google.com/search?tbm=bks&q=isbn:0486428095' target='_blank'>эту</a>? А на какую страницу смотреть, чтобы увидеть определение термина &quot;динамическое программирование&quot; применительно к <em class='tag-i'>программированию</em>? Я просмотрел по диагонали оглавление и пролог, но ничего похожего не нашел.]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830173</guid>
        <pubDate>Sun, 03 May 2020 21:27:27 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830173</link>
        <description><![CDATA[swf: Так, ребята. Я тут кой-чего если не вру, то не договариваю. <br>
Похоже, необходимо, чтобы <strong class='tag-b'>целевая функция системы была аддитивна</strong>, чтобы можно было ДП решать.<br>
<br>
Нашла свой собственный текст (сама писала, но не дописала), пыталась разобраться с ДП. Вот сейчас бы эсперанто сюда, он бы разрешил все сомнения.<br>
---------------------------------------<br>
Динамическое программирование представляет собой совокупность процедур, используемых для оптимизации многошаговых процессов принятия решений. Основной вклад в развитие теории многошаговых процессов внес американский математик Ричард Беллман. Беллманом был сформулирован принцип оптимальности и получено функциональное уравнение. Кроме того, Беллман разработал схемы принятия решений на основе принципа оптимальности для многочисленных задач минимизации или максимизации. <br>
<br>
Область применения динамического программирования<br>
Динамическое программирование применяется для систем, которые характеризуются следующими признаками.<br>
1. Процесс функционирования системы можно представить как   последовательность  n этапов, на каждом этапе происходит смена состояния системы. В начальный момент система находится в начальном состоянии S0. Затем на первом этапе управляющее воздействие x1 переводит систему из состояния S0 в состояние S1 и т. д. На последнем n – 1 шаге система находится в состоянии Sn-1, управляющее воздействие переводит её в конечное состояние  Sn: <br>
S<sub class='tag-sub'>0</sub> -&gt; S<sub class='tag-sub'>1</sub> -&gt; … -&gt; S<sub class='tag-sub'>n-1</sub> -&gt; S<sub class='tag-sub'>n</sub>.<br>
2. Для системы выполняется принцип отсутствия последействия. Суть этого принципа заключается в следующем. Состояние системы на i-м этапе S<sub class='tag-sub'>i</sub> зависит только от состояния системы на предыдущем этапе и управляющего воздействия x<sub class='tag-sub'>i</sub>. И не зависит от состояний системы и управляющих воздействий на более ранних этапах.  Свойство отсутствия последействия называют также свойством отсутствия памяти. Это принцип записывается в виде уравнений <br>
 Sk = φ(Sk-1, x<sub class='tag-sub'>k</sub>),	(1)<br>
которые называются уравнениями состояний.<br>
Например, для задачи поиска длины кратчайшего пути между двумя фиксированными вершинами s и t на нагруженном орграфе рассмотрим две модели, с последействием и без. <br>
<br>
Модель без учёта последействия.<br>
Сначала находим все вершины, смежные с t, т.е. вершины v<sub class='tag-sub'>i</sub>, i = 1 … k, которые соединены с t ориентированной дугой  (v<sub class='tag-sub'>i</sub> -&gt; t). Решение исходной задачи (найти длину кратчайшего пути от s и t) разбивается на две подзадачи меньшего размера, одна из которых решается тривиально, а другую тоже можно разбить на подзадачи: найти длину кратчайшего путь от  s до v<sub class='tag-sub'>i</sub>  и найти вес дуги от v<sub class='tag-sub'>i </sub>до t.  Затем из решений подзадач конструируется решение исходной задачи: длина условно-оптимального пути от s и t, при условии, что путь проходит через вершину v<sub class='tag-sub'>i</sub>, равна  длине кратчайшего пути от  s до v<sub class='tag-sub'>i</sub>  плюс вес дуги от v<sub class='tag-sub'>i</sub> до t.  И, наконец, из всех полученных условно-оптимальных решений выбираем минимальное (через какую вершину vi лучше всего пойти). По такому принципу работает алгоритм Форда-Беллмана. <br>
В этой модели мы исходим из следующего предположения: если кратчайший путь от s до t проходит через вершину v, то его отрезок от s до v будет кратчайшим путем от s до v и отрезок от v до t будет кратчайшим путем от v до t. Это предположение и означает, что у системы нет последействия: неважно, как мы попали в вершину v, нам достаточно знать, что v – наша текущая вершина (текущее состояние системы), из которой мы ищем кратчайший путь от v до t. <br>
<br>
Принцип оптимальности Беллмана: оптимальное поведение обладает тем свойством, что каковы бы ни были первоначальные состояния и решения в начальный момент, последующие решения должны составлять оптимальное поведение относительно состояния, полученного в результате первого решения.<br>
<br>
Модель с учётом последействия.<br>
Существует класс задач о поиске кратчайших путей, для которых принцип оптимальности не выполняется.  Это задачи с фиксированными платежами. Подобные задачи возникают в том случае, если за прохождение вершины сети взимается плата. Рассмотрим простейшую задачу из этого класса – задачу о штрафах за повороты. В этой задаче недостаточно помнить текущую вершину, нужно помнить предысторию: как мы в эту вершину попали. <br>
<br>
3. Пусть X(x<sub class='tag-sub'>1</sub>, ..., x<sub class='tag-sub'>n</sub>) – управление, переводящее систему из состояния S<sub class='tag-sub'>0</sub> в состояние S<sub class='tag-sub'>n</sub>. Тогда целевая функция системы (величина прибыли) F = F(S<sub class='tag-sub'>0</sub>, X)  зависит от начального состояния системы и управления на каждом шаге.<br>
Целевая функция системы (величина прибыли) является аддитивной, т.е. целевая функция всей системы (оптимальная прибыль) равна сумме локальных ЦФ (локальных прибылей) на каждом шаге:<br>
F = f<sub class='tag-sub'>1</sub>(S<sub class='tag-sub'>0</sub>, x<sub class='tag-sub'>1</sub>)+...+ f<sub class='tag-sub'>n</sub>(S<sub class='tag-sub'>n-1</sub>, x<sub class='tag-sub'>n</sub>)(2)<br>
<br>
Окончательно, ДП формулируется так: <br>
определить такое допустимое управление X, переводящее систему из начального состояния S<sub class='tag-sub'>0</sub> в конечное состояние S<sub class='tag-sub'>n</sub>, при котором суммарная целевая функция принимает наибольшее (наименьшее) значение. <br>
--------------------------------------------------------------------------------------------------<br>
<br>
Мне интересно, правильно ли я указала эти 3 признака систем, для которых можно применить ДП.]]></description>
        <author>swf</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830172</guid>
        <pubDate>Sun, 03 May 2020 21:07:05 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830172</link>
        <description><![CDATA[AVA12: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Метод динамического программирования сверху — это простое запоминание результатов решения тех подзадач, которые могут повторно встретиться в дальнейшем.</div></div><br>
Угу, предрасчет, кэширование, нахождение дискриминанта квадратного уравнения - это все динамическое программирование.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Динамическое программирование снизу включает в себя переформулирование сложной задачи в виде рекурсивной последовательности более простых подзадач.</div></div><br>
То есть, без рекурсии никуда. Если вместо рекурсии сделать итерацию - все, это уже не динамическое программирование? И оговорка &quot;включает в себя&quot; настораживает - что, может и не включать? Или должно включать что-то еще? &quot;Динамическое программирование&quot; обязано иметь оба признака - и &quot;сверху&quot;, и &quot;снизу&quot; (кстати, нет ли еще какого-нибудь &quot;динамического программирования сбоку&quot;?)? Или хватит одного варианта? Это вообще необходимые признаки или достаточные?<br>
<br>
А в остальном - да, все четко и понятно.]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830169</guid>
        <pubDate>Sun, 03 May 2020 20:52:49 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830169</link>
        <description><![CDATA[swf: Всех путей между двумя вершинами в полном графе порядка n&#33;<br>
Если n=250, то это больше чем число атомов в видимой нами части вселенной. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-05-03T20:57:09+00:00">03.05.20, 20:57</time></span></span><br>
В стандартном Ф.-Б. алгоритм ДП оптимизирован, вместо таблицы храним одну-единственную текущую строку, так называемый вектор расстояний.<br>
Но может препод хочет как раз неоптимизированный алгоритм с двумерной таблицей - он есть по ссылке, которую я дала (фоксфорд какой-то). Конечно, не проверяла, как это работает.]]></description>
        <author>swf</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830168</guid>
        <pubDate>Sun, 03 May 2020 20:49:20 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830168</link>
        <description><![CDATA[FasterHarder: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=418496&view=findpost&p=3830166'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2020-05-03T20:39:23+00:00">03.05.20, 20:39</time></span><div class='quote '> Задача сводится к поиску всех путей от вершина старта до вершины стопа, и выборе наилучшего варианта.</div></div><br>
идея понятна&#33;<br>
т е ты хочешь сделать ПОЛНЫЙ ПЕРЕБОР всех возможных траекторий от стартовой до заданной. Полный перебор необходим, т к мы не знаем, что данный маршрут оптимальный, пока не переберем всевозможные...<br>
<br>
представим, что городов около 1000 и существует порядка 17 млн траекторий. Львиная доля из них будет иметь одинаковое &quot;начало&quot; и отличаться лишь &quot;хвостиком&quot;. Запомнить ранее вычисленные значения &quot;начал&quot; не представляется возможным (мемоизации нет) и придется КАЖДЫЙ раз все пересчитывать с нуля.<br>
<br>
Вообще, вроде ведь подоходит алго Беллмана-Форда, даже в вики написано, что для заполнения таблицы будем использовать ДП. Может на этом варианте и остановиться?? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-05-03T20:52:44+00:00">03.05.20, 20:52</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=418496&view=findpost&p=3830167'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>swf &#064; <time class="tag-quote__quoted-time" datetime="2020-05-03T20:46:39+00:00">03.05.20, 20:46</time></span><div class='quote '>ДП - табличный способ решения.</div></div><br>
вроде, да. я не помню форда-беллмана наизусть, но вроде там заполнение ячеек таблицы происходит на основании уже некоторых, ранее заполненных значениями ячеек...]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830167</guid>
        <pubDate>Sun, 03 May 2020 20:46:39 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830167</link>
        <description><![CDATA[swf: 1. Да. Во всех задачах о нахождении кратчайшего пути на взвешенных орграфах (Ф.-Б.,Дейкстра, Флойд) предполагается, что система без последействия, т.е. если в оптимальном пути от s до t взять любую промежуточную вершину v, то пути от s до v и от v до t будут также оптимальными. То есть мы предполагаем, что &quot;система&quot; не имеет последействия.<br>
А вот в исходной задаче о штрафах за повороты последействие есть. НАМ НАДО ПОМНИТЬ историю процесса, т.е из какой вершины мы попали в текущую, чтобы знать, будет у нас поворот или нет.<br>
Но если перестроить граф и включить стоимости поворотов в стоимости новых ребер, то в этой конкретной задаче можно избавиться от последействия. Обычно от него избавиться нельзя, конечно.<br>
<br>
2. <strong class='tag-b'>Необходимо</strong>, чтобы не было последействия и обратной связи. Иначе задачу нельзя решать ДП.<br>
Сам способ решения ДП - мношаговый процесс принятия решений, см. книгу Беллмана, там он даёт все определения.<br>
В узком смысле (как часто преподы могут формулировать заданье) ДП - табличный способ решения.<br>
<br>
3. Штопором в самоизоляции не пользуюсь, чёто все вина попадаются с откручивающимися крышками  :D]]></description>
        <author>swf</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830166</guid>
        <pubDate>Sun, 03 May 2020 20:39:23 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830166</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=418496&view=findpost&p=3830165'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AVA12 &#064; <time class="tag-quote__quoted-time" datetime="2020-05-03T20:23:07+00:00">03.05.20, 20:23</time></span><div class='quote '>Вот и еще одно определение.</div></div><br>
В вики ДП описано четко и понятно. <br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Метод динамического программирования сверху — это простое запоминание результатов решения тех подзадач, которые могут повторно встретиться в дальнейшем. Динамическое программирование снизу включает в себя переформулирование сложной задачи в виде <strong class='tag-b'>рекурсивной последовательности более простых подзадач</strong>.</div></div><br>
По условию задачи ТС нужно просто рекурсивно побегать по графу и найти кратчайший по стоимости путь. Задача сводится к поиску всех путей от вершина старта до вершины стопа, и выборе наилучшего варианта. В качестве оптимизации можно запоминать пройденный и найденный минимальный путь, и при следующей итерации, если достижение очередной вершины уже больше запомненного минимального пути - просто обрывать итерацию.]]></description>
        <author>JoeUser</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830165</guid>
        <pubDate>Sun, 03 May 2020 20:23:07 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830165</link>
        <description><![CDATA[AVA12: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Я так понимаю, где ДП:</div></div><br>
Вот и еще одно определение.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Чтобы выбрать оптимальное управление из текущего состояния на текущем шаге не нужно помнить историю процесса, как мы попали в текущее состояние.</div></div><br>
Что значит &quot;помнить историю процесса&quot;? Например, при построении кратчайшего пути (после использования алгоритма Дейкстры) на каждом шаге нужны только входные данные для задачи и последний добавленный в список пути узел. Какие еще узлы есть в списке и как они туда попали - для алгоритма несущественно. Можно даже не хранить этот список, а просто отправлять каждый очередной узел куда-нибудь. Значит ли это, что в данном алгоритме мы не помним историю процесса?<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>То есть можно найти оптимальное решение от начала до некоего фиксированного состояния, затем найти оптимальное решение от фиксированного состояния до конечного, сложить их и получить оптимальное решение при условии, что оно проходит через это фиксированное состояние.</div></div><br>
Я понимаю, как можно применить это заклинание к физической системе и, например, перевести ее из состояния &quot;плоский штопор&quot; в состояние &quot;горизонтальный полет&quot; через фиксированное промежуточное состояние &quot;пикирование&quot;. Но вот каким боком все это относится к задаче о нахождении кратчайшего пути в графе - не понимаю.]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830163</guid>
        <pubDate>Sun, 03 May 2020 20:00:23 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830163</link>
        <description><![CDATA[swf: Рекурсией можно что угодно написать, даже сортировку &quot;пузырёк&quot;  :) <br>
<br>
Я выяснила, к ДП в &quot;узком&quot; смысле относят &quot;табличный&quot; способ решения задачи. Там вообще нет рекурсии.<br>
И по поводу задания. Чего там хотят.<br>
Может, там хотят не оптимизированный алгоритм Ф.-Б., а как здесь первый вариант, с двумерной табличкой<br>
<a class='tag-url' href='https://foxford.ru/wiki/informatika/algoritm-forda-bellmana' target='_blank'>https://foxford.ru/wiki/informatika/algoritm-forda-bellmana</a>]]></description>
        <author>swf</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830157</guid>
        <pubDate>Sun, 03 May 2020 19:46:12 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830157</link>
        <description><![CDATA[FasterHarder: на мой дилетантский взгляд ДП там ярко применимо, где:<br>1. нужно запомнить какое-то решение, чтобы при необходимости извлечь сразу ответ (мемоизация) без повторного решения<br>2. большую задачу можно разбить НА РЯД НЕБОЛЬШИХ, и что самое важное эти подзадачи должны решаться рекурсивно]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830152</guid>
        <pubDate>Sun, 03 May 2020 19:10:45 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830152</link>
        <description><![CDATA[swf: Я так понимаю, где ДП:<br>
1. Система без последействия и обратной связи.<br>
2. Решение находят с помощью многошагового процесса принятия решения (строгое определение всех этих слов - в книге Беллмана &quot;Динамическое программирование и современная теория управления&quot;, 1969 года издания.).<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Принцип оптимальности впервые был сформулирован Ричардом Эрнестом Беллманом в 1953 г. (в трактовке Е.С. Вентцель):<br>
Каково бы ни было состояние системы в результате какого-либо числа шагов, на ближайшем шаге нужно выбирать управление таким образом, чтобы оно в совокупности с оптимальным управлением на всех последующих шагах приводило к оптимальному выигрышу на всех оставшихся шагах, включая данный.</div></div><br>
<br>
Как я это понимаю.<br>
1. Чтобы выбрать оптимальное управление из текущего состояния на текущем шаге не нужно помнить историю процесса, как мы попали в текущее состояние. <br>
Или другими словами. Задача раскладывается на подзадачи, которые можно решать независимо и параллельно, затем объединять их. <br>
(В логике это всю жизнь называлось &quot;разложимая система продукций&quot; вообще-то, но не будем приплетать сюда логику.)<br>
То есть можно найти оптимальное решение от начала до некоего фиксированного состояния, затем найти оптимальное решение от фиксированного состояния до конечного, сложить их и получить оптимальное решение при условии, что оно проходит через это фиксированное состояние.<br>
2. Отсутствие обратной связи, вроде, управление на текущем шаге не меняет предыдущие состояния. Но про обратную связь точно не скажу.<br>
<br>
Таких задач (без последействия и обратной связи) на самом деле не очень много, все они хорошо изучены и все решаются ДП.<br>
Пример, когда одна и та же задача может решаться ДП или не ДП.<br>
Набор заданной суммы из заданных слагаемых. <br>
ДП за псевдополиномиальное время находит ровно одно решение;<br>
алгоритм с возвратом за экспоненциальное время находит все решения.]]></description>
        <author>swf</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830147</guid>
        <pubDate>Sun, 03 May 2020 18:16:04 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830147</link>
        <description><![CDATA[AVA12: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>я думаю, что ты много раз и сам видел всякие определения и рассуждения на эту тему + понимаешь это гораздо лучше меня. В вики целая статья посвящена ДП</div></div><br>
Это все хвилософия. Про смысл жизни, к примеру, много тонн макулатуры понаписано, а четкого определения и критериев все нет. В википедии то же самое. Читаю &quot;определения&quot; и в упор не понимаю, как можно применить их на практике для разделения &quot;вот тут - да, а вот тут - нет&quot;. Что такое, к примеру, &quot;подзадача меньшего размера&quot;? Та же задача, только использующая часть входных данных? Или же другая задача, выход которой подается на вход переформулированной задачи? Или что?<br>
<br>
Вот, к примеру, предложенное мной решение состоит из двух этапов: нахождение кратчайших расстояний и построение кратчайшего пути. Второй этап получает на вход данные, полученные на первом - это и есть две &quot;подзадачи меньшего размера&quot; или еще нет? Каждый этап строит решение постепенно, один узел за другим, на каждом шаге мы получаем все увеличивающуюся часть требуемого на этом этапе результата - это и есть &quot;подзадачи меньшего размера&quot;? Чего не хватает этому решению, чтобы можно было гордо налепить бирку &quot;dynamic programming inside&quot;? Или же тут всего хватает? Но оба приема - и поэтапное преобразование входных данных, и постепенное построение результата - используются в программировании повсеместно. Тогда получается, что любой алгоритм - даже, например, решение квадратного уравнения - можно относить к динамическому программированию?]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830145</guid>
        <pubDate>Sun, 03 May 2020 18:11:25 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830145</link>
        <description><![CDATA[swf: <a class='tag-url' href='https://foxford.ru/wiki/informatika/algoritm-forda-bellmana' target='_blank'>https://foxford.ru/wiki/informatika/algoritm-forda-bellmana</a><br>
Алгоритм тот же (что и везде), но вводят функцию с двумя аргументами.]]></description>
        <author>swf</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830143</guid>
        <pubDate>Sun, 03 May 2020 17:50:01 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830143</link>
        <description><![CDATA[FasterHarder: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=418496&view=findpost&p=3830138'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>swf &#064; <time class="tag-quote__quoted-time" datetime="2020-05-03T17:38:01+00:00">03.05.20, 17:38</time></span><div class='quote '>Алгоритм Форда-Беллмана</div></div><br>
да, кстати, точняк), правда там не должно быть отрицательных циклов.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=418496&view=findpost&p=3830138'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>swf &#064; <time class="tag-quote__quoted-time" datetime="2020-05-03T17:38:01+00:00">03.05.20, 17:38</time></span><div class='quote '>Беллман и ДП придумал</div></div><br>
тоже верно, в 50-е годы]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830141</guid>
        <pubDate>Sun, 03 May 2020 17:47:01 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830141</link>
        <description><![CDATA[amk: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=418496&view=findpost&p=3830134'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2020-05-03T17:15:53+00:00">03.05.20, 17:15</time></span><div class='quote '>на 1-ом этапе нужно получить эти зоны/группы/слои. В этом поможет обход графа В ШИРИНУ (+очередь).</div></div> Для графов общего вида это не работает.]]></description>
        <author>amk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830138</guid>
        <pubDate>Sun, 03 May 2020 17:38:01 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830138</link>
        <description><![CDATA[swf: Алгоритм Форда-Беллмана тоже метод динамического программирования. Инфа 100%, в какой-то книге читала.<br>
Собственно, Беллман и ДП придумал, и этот алгоритм. <br>
Граф нужно представить списками инцидентности типа &quot;пред&quot;, т.к. для каждой вершины нужно знать список предыдущих &quot;соседок&quot;. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-05-03T17:45:18+00:00">03.05.20, 17:45</time></span></span><br>
Всем привет&#33;<br>
Я - Swetlana, я вернулась  :) <br>
Даже припомнила, почему там можно применять ДП.<br>
<br>
ДП основано на чём: на отсутствии у системы последействия.<br>
То есть, мы находимся в текущем состоянии и из него ищем оптимальное продолжение.<br>
А историю, как мы попали в это состояние - мы не помним.<br>
То есть, если кратчайший путь между s и t проходит через вершину v, то он делится на кратчайший путь от s до v и кратчайший путь от v до t.<br>
Это не всегда так.<br>
Если выполнение поворота требует времени, т.е. удлиняет путь, то на перекрёстке нужно помнить, из какой вершины мы попали в текущую, придётся выполнять поворот или нет.]]></description>
        <author>swf</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830134</guid>
        <pubDate>Sun, 03 May 2020 17:15:53 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830134</link>
        <description><![CDATA[FasterHarder: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=418496&view=findpost&p=3830125'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>amk &#064; <time class="tag-quote__quoted-time" datetime="2020-05-03T16:12:12+00:00">03.05.20, 16:12</time></span><div class='quote '>сли вершины перенумерованы послойно, как в этой задаче, можно их обрабатывать последовательно</div></div><br>
да, такое описание алгоритма я читал в инете, правда называют их зонами или группами, но это не суть важно, разумеется<br>
<br>
но вернемся к структурам данных.<br>
на 1-ом этапе нужно получить эти зоны/группы/слои. В этом поможет обход графа В ШИРИНУ (+очередь). &quot;Выпишем&quot; все вершины в графа в одномерный массив по возрастанию/убыванию номеров групп.<br>
затем обрабатываем вершины из каждой группы последовательно + параллельно отслеживаем связи этих вершин из предыдущей группы.<br>
<br>
это, если коротко и самую суть. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-05-03T17:21:06+00:00">03.05.20, 17:21</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=418496&view=findpost&p=3830133'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AVA12 &#064; <time class="tag-quote__quoted-time" datetime="2020-05-03T17:11:10+00:00">03.05.20, 17:11</time></span><div class='quote '>а что вообще такое - &quot;динамическое программирование&quot;?</div></div><br>
 :) , ну, я думаю, что ты много раз и сам видел всякие определения и рассуждения на эту тему + понимаешь это гораздо лучше меня. В вики целая статья посвящена ДП)<br>
Кто-то говорит, что ДП - один из методов оптимизации.<br>
Мне вот эта <a class='tag-url' href='https://tproger.ru/articles/dynprog-starters/' target='_blank'>статейка</a> понравилась <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-05-03T17:33:42+00:00">03.05.20, 17:33</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=418496&view=findpost&p=3830125'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>amk &#064; <time class="tag-quote__quoted-time" datetime="2020-05-03T16:12:12+00:00">03.05.20, 16:12</time></span><div class='quote '>Не должно быть рёбер внутри слоя или прыгающих через слой.</div></div><br>
я понял о чем ты говоришь.<br>
кстати, далеко не факт, что такой ситуации не может возникнуть...]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830133</guid>
        <pubDate>Sun, 03 May 2020 17:11:10 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830133</link>
        <description><![CDATA[AVA12: <strong class='tag-b'>FasterHarder</strong>, а что вообще такое - &quot;динамическое программирование&quot;? Как именно формулирует этот термин тот, кто задает задачи? Каковы четкие критерии определения &quot;вот тут динамическое программирование, а вот тут - не динамическое (или не программирование)&quot;? Если четких критериев нет, то смело используй Дейкстру с дополнениями, а все возражения посылай в /dev/null.]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830132</guid>
        <pubDate>Sun, 03 May 2020 17:10:18 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830132</link>
        <description><![CDATA[FasterHarder: <strong class='tag-b'>amk</strong>, т е алго Дейкстры использовать нельзя (из-за требований в условии про ДП), так??]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830125</guid>
        <pubDate>Sun, 03 May 2020 16:12:12 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830125</link>
        <description><![CDATA[amk: Странные какие-то задачи. Во всех вместо эффективного метода решения предлагается использовать что-то не совсем подходящее.<br>
<br>
А каковы принципы динамического программирования?<br>
<br>
Ну и алгоритм, отвечающий названным принципам<br>
Конкретно этот граф можно разбить на слои (точнее он уже разбит).<br>
В первом слое три города (2, 3, 4).<br>
Считаем минимальные стоимости доставки до узлов первого слоя из начального узла.<br>
Во втором слое города 5 и 6.<br>
Считаем минимальные стоимости доставки до них из городов первого слоя (плюс стоимости доставки до этих городов).<br>
То же делаем для третьего слоя (7, 8, 9) и для целевого города (10).<br>
<br>
Ну и требования к графу, чтобы динамическое программирование на нём работало:<br>
Граф должен разбиваться на слои так, чтобы:<br>
1. Вершины каждого слоя были связаны с вершинами предыдущего и следующего слоя. Не должно быть рёбер внутри слоя или прыгающих через слой.<br>
2. В двудольном подграфе содержащем соседние слои не должно быть цепей с суммарным весом меньше ребра, соединяющего концы цепи.<br>
Из-за этих требований обычно динамическое программирование на графах не применяется - проверка условий оказывается сложнее, чем обычные алгоритмы. Однако бывают задачи в которых можно сразу сгенерировать граф, удовлетворяющий этим условиям.<br>
Первое условие можно немного ослабить в плане перескакивающих рёбер, вставив дополнительную вершину. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-05-03T16:57:20+00:00">03.05.20, 16:57</time></span></span><br>
Если вершины перенумерованы послойно, как в этой задаче, можно их обрабатывать последовательно<br>
<br>
Cost[1] = 0<br>
<br>
Cost[2] = Cost[1] + 7 = 7 # Путь 1-2<br>
Cost[3] = Cost[1] + 5 = 5 # 1-3<br>
Cost[4] = Cost[1] + 6 = 6 # 1-4<br>
<br>
Cost[5] = min(Cost[2] + 4, Cost[3] + 6, Cost[4] + 10) = min(11, 11, 16) = 11 # 1-2-5 или 1-3-5<br>
Cost[6] = min(Cost[2] + 8, Cost[3] + 3, Cost[4] + 9) = min(15, 8, 15) = 8 # 1-3-6<br>
<br>
Cost[7] = Cost[5] + 6 = 17 # 1-2-5-7 или 1-3-5-7<br>
Cost[8] = min(Cost[5] + 8, Cost[6] + 5) = min(19, 13) = 13 # 1-3-6-8<br>
Cost[9] = Cost[6] + 4 = 12 # 1-3-6-9<br>
<br>
Cost[10] = min(Cost[7] + 9, Cost[8] + 7, Cost[9] + 11) = min(26, 20, 23) = 20 # путь 1-3-6-8-10]]></description>
        <author>amk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830117</guid>
        <pubDate>Sun, 03 May 2020 15:47:05 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830117</link>
        <description><![CDATA[FasterHarder: <strong class='tag-b'>AVA12</strong>, эх, я в первом посте хотел написать, что можно заюзать алгортим Дейкстры, т к он позволяет найти кратчайший путь в графе от заданной вершины до всех остальных, но мне казалось, что здесь его применять нельзя, т к он не использует принципы дин.прог.<br>
<br>
если можно заюзать Дейкстру, тогда мне все сразу понятно и все смогу найти, т к уже не один раз его УСПЕШНО кодировал на практике)<br>
<br>
ТО ЕСТЬ ИСПОЛЬЗОВАТЬ ДЕЙКСТРУ МОЖНО, ДА??)<br>
<br>
P.S. на самом деле я не оч.глубоко понимацию концепт дин.прог., т к там стараются делать упор на рекурсию, мемоизацию, а в дейкстре сплошные циклы и одномерные массивы....]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830114</guid>
        <pubDate>Sun, 03 May 2020 15:34:31 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830114</link>
        <description><![CDATA[AVA12: Итак, у нас есть множество вершин Vi, множество ребер Eij, для каждого ребра, соединяющего Vi и Vj, задан неотрицательный вес w(i, j), необходимо найти и вывести кратчайший путь из V1 в указанную вершину.<br>
<br>
Поскольку веса ребер неотрицательные, можно использовать <a class='tag-url' href='https://ru.wikipedia.org/wiki/Алгоритм_Дейкстры' target='_blank'>алгоритм Дейкстры</a>. Тогда для каждого Vi получим d(i) - стоимость минимального пути V1 -&gt; Vi. Затем нужно построить список узлов, входящих в этот путь.<br>
<br>
Строим путь от конца к началу. Заведем список, состоящий из одной вершины (конечной). Затем в цикле:<br>
 - смотрим на первую вершину в списке (Vk), ищем все вершины Vi, для которых есть ребро Eik;<br>
 - для каждой Vi вычисляем стоимость d(i) + w(i, k), если эта сумма равна d(k), значит мы пришли в Vk именно из этой вершины Vi, заносим ее в начало списка (может получиться, что это условие выполняется для нескольких вершин Vi, тогда неважно, какую из них включать в путь - стоимость результата будет одна и та же);<br>
 - продолжаем, пока в списке не окажется V1 - тогда список и будет искомым путем.]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830109</guid>
        <pubDate>Sun, 03 May 2020 14:37:51 +0000</pubDate>
        <title>выбор оптимального маршрута перевозки грузов</title>
        <link>https://forum.sources.ru/index.php?showtopic=418496&amp;view=findpost&amp;p=3830109</link>
        <description><![CDATA[FasterHarder: Всем хай&#33; Сходу к делу&#33;<br>
<span class="tag-color tag-color-named" data-value="blue" style="color: blue"><strong class='tag-b'>Есть сеть дорог, соединяющих города. Известны стоимости перевозки груза между городами. Используя метод динамического программирования, найти самый экономный маршрут доставки груза из города №1 в город №10: вывести все города, входящие в маршрут + общую стоимость перевозки. На рис.показана сеть городов и стоимость перевозки грузов.</strong><br>
</span><br>
<span class="b-attach" data-size="21406" data-hits="2468" data-attach-id="61996" data-attach-post-id="3830109">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3830109&amp;attach_id=61996' title='Скачать файл' target='_blank'>_________________________________________.png</a> (, : 2468)
		</span><br>
Поштудировал описание задачи в инете.<br>
Вот чисто математически + графически я понимаю, как это решается. Т е на бумаге все легко посчитаю, нарисую стрелочки оптимального маршрута и пр. С этим проблем нет. Проблема в том, как это ПРАВИЛЬНО закодировать, а если быть более точным, нужен норм.алгоритм + правильные структуры данных для всего этого.<br>
<br>
Пусть входные данные задаются в виде весовой матрицы, т е матрицы размером N * N (N = 10). На пересечении строки и колонки стоит стоимость перевозки, если между этими городами есть связь.<br>
1. Ищем решение от конца в начало, т е анализ начинается от города №10 и продвигаемся к №1.<br>
2. Мне казалось, что здесь пригодится структура данных ОЧЕРЕДЬ. <br>
<br>
Помещаем в очередь вершину №10. <br>
На следующем этапе помещаем в очередь все вершины, смежные с №10. Это вершины №7, №8 и №9. Одновременно с этим считаем расстояние до каждой из этих вершин из №10. После этого вершину №10 удаляем из очереди и помечаем ее как обработанную.<br>
На следующем этапе нужно рассмотреть ВСЕ СМЕЖНЫЕ вершины с любой из вершин №7, №8 и №9.<br>
Тут есть проблемка, т к, например, вершина №5 является одновременно смежной и для №7 и для №8, т е если вершины {7, 8, 9} обрабатываются последовательно, то вершина №5 будет учитываться ДВАЖДЫ, что приведет к чему-то нехорошему). Я прекрасно понимаю, что для вершины №5 рассматривается МИН(5-7, 5-8). Для вершины №6 = МИН(6-8, 6-9).<br>
ТО ЕСТЬ ОЧЕРЕДЬ ЗДЕСЬ ДЛЯ АНАЛИЗА НЕ НУЖНА, ТАК?? или нужно заводить 2 очереди для разных &quot;групп&quot; вершин. думаю, что это бредовая затея) В принципе, на каких-то переборах очередей в циклах, это все можно реализовать, но, скорее всего, будет крайне неэффективно и неправильно с позиции структур данных.<br>
<br>
Также ведь еще нужно найти все города, входящие в маршрут, т е куда их записывать в процессе анализа.<br>
И, собственно, про динамическое программирование. Насколько понимаю, ДП требует, чтобы было использовано:<br>
1. зависимость элементов динамики друг от друга<br>
2. значение начальных состояний<br>
<br>
ну с п.2 вроде понятно. Стоим в вершине №10 и стоимость перевозки равна 0.<br>
с п.1, хм. Ну есть зависимость ведь, чтобы перейти к анализу, например №5, сначала анализируем №7 и №8. При анализе №7 анализируем №10.<br>
Также хочется понять, нужна ли в коде какая-то ядровая функция, которая, на вход принимает номер обрабатываемой вершины, а на выходе, например, выдает минимум затрат для этой вершины или вообще все делается в циклах на стартовой весовой матрице.<br>
<br>
подскажите как быть-то, буду признателен]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	