<?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=416851&amp;view=findpost&amp;p=3831420</guid>
        <pubDate>Mon, 25 May 2020 20:25:10 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3831420</link>
        <description><![CDATA[esperanto: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821464'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>prografix &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T13:01:33+03:00">19.02.20, 10:01</time></span><div class='quote '>В задачу не вникал, но похоже, что можно применить динамическое программирование.</div></div><br>
не знаешь хороший курс с юбтуба по динамическому программированию?]]></description>
        <author>esperanto</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3831405</guid>
        <pubDate>Mon, 25 May 2020 11:56:19 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3831405</link>
        <description><![CDATA[Black_Dragon: У меня вопросы про постановку задачи. Чиста из любопытства о приземленности задачи (или для усложнения ее).<br><br>1) К станку идут несколько очередей заданий, длина очереди - единица?<br>2) Есть общая очередь (главная/центральная) со всеми заданиями? Или каждая очередь станка только со своими заданиями (тогда длина очереди может &gt;1)<br>3) Первое задание из общей очереди идет в первую очередь станка и т.д. распределяется по другим очередям станка?<br>4) Выполненное задание освобождает место и из общей очереди туда перемещается первое задание?<br>5) Станок ждет, когда поступит задание в освободившееся место или начинает обрабатывать из оставшихся? Ну т.е. станок так сделан: выполнил задание, и начинает выбирать из существующих (пока на свободное место загружается новая задача по rs-232)  :D <br>6) А в общей очереди их перераспределять можно, т.е. ее за ране подготовить?<br>7) А станок вообще знает, какие задачи в главной очереди или только те, которые ожидают исполнение?<br><br>Т.е. получается так, станок принадлежит Васи, а задачи от разных клиентов разного ранга.]]></description>
        <author>Black_Dragon</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3830156</guid>
        <pubDate>Sun, 03 May 2020 19:33:33 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3830156</link>
        <description><![CDATA[AVA12: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Поразрядная сортировка, кстати, на самом деле тоже не O(N), а O(N log M), где M - разрядность данных.</div></div><br>
Разрядность данных - это не длина строкового ключа, которая может быть любой (кстати, почему log M, а не M?). Разрядность для массива чисел - это константа, так что нет смысла ее учитывать.]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3830153</guid>
        <pubDate>Sun, 03 May 2020 19:11:58 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3830153</link>
        <description><![CDATA[swf: Спасибо, буду разбираться  :)]]></description>
        <author>swf</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3830151</guid>
        <pubDate>Sun, 03 May 2020 18:45:27 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3830151</link>
        <description><![CDATA[amk: Моё сообщение от 2 марта посвящено анализу условий, при которых план работы оптимален локально (под спойлером). А ниже спойлера пояснение, почему он оптимален и глобально.]]></description>
        <author>amk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3830142</guid>
        <pubDate>Sun, 03 May 2020 17:49:11 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3830142</link>
        <description><![CDATA[swf: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3830120'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>amk &#064; <time class="tag-quote__quoted-time" datetime="2020-05-03T15:51:18+00:00">03.05.20, 15:51</time></span><div class='quote '><strong class='tag-b'>swf</strong>, как уже выяснилось, эта задача сводится к сортировке и имеет сложность O(N log N)</div></div><br>
А я что-то не поняла. Как доказали, что сортировка даёт оптимальное решение?]]></description>
        <author>swf</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3830140</guid>
        <pubDate>Sun, 03 May 2020 17:45:47 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3830140</link>
        <description><![CDATA[amk: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3830122'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AVA12 &#064; <time class="tag-quote__quoted-time" datetime="2020-05-03T15:54:59+00:00">03.05.20, 15:54</time></span><div class='quote '>Отсортировать можно и за O(N)&#33;</div></div> Только в частных случаях, когда на исходные данные накладываются некоторые ограничения.<br>
<br>
Поразрядная сортировка, кстати, на самом деле тоже не O(N), а O(N log M), где M - разрядность данных.]]></description>
        <author>amk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3830122</guid>
        <pubDate>Sun, 03 May 2020 15:54:59 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3830122</link>
        <description><![CDATA[AVA12: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>задача сводится к сортировке и имеет сложность O(N log N)</div></div><br>
Почему именно O(N log N)? Отсортировать можно и за O(N)&#33;]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3830120</guid>
        <pubDate>Sun, 03 May 2020 15:51:18 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3830120</link>
        <description><![CDATA[amk: <strong class='tag-b'>swf</strong>, как уже выяснилось, эта задача сводится к сортировке и имеет сложность O(N log N)]]></description>
        <author>amk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3829343</guid>
        <pubDate>Sun, 26 Apr 2020 22:04:50 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3829343</link>
        <description><![CDATA[swf: В списке модельных NP-полных задач из старого Гэри, Джонсона такой нет.<br>Задача, скорее всего, полиномиально сводится к коммивояжеру. Но это, конечно, нужно доказать.]]></description>
        <author>swf</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824850</guid>
        <pubDate>Wed, 04 Mar 2020 08:04:14 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824850</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>amk</strong>, да, я проверил - у меня вариант хуже. Из 1000 рандомных наборов, у меня около 30 неоптимальные (ошибочные).]]></description>
        <author>JoeUser</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824827</guid>
        <pubDate>Tue, 03 Mar 2020 16:07:53 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824827</link>
        <description><![CDATA[amk: Держи <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821481'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AVA12 &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T11:16:31+00:00">19.02.20, 11:16</time></span><div class='quote '>Кажется, я что-то нащупал.<br>
С одной стороны, нужно выполнять задания в порядке убывания возрастания времени выполнения, чтобы простой был минимальным. С другой стороны, нужно выполнять задания в порядке убывания штрафа, чтобы меньше денег натикало. Объединяем оба требования, для каждой задачи вычисляем отношение штраф/время и сортируем их в порядке убывания этого отношения. Получается, вроде бы, неплохо.</div></div><br>
Ну и конкретно, на что обратить внимание <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821481'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AVA12 &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T11:16:31+00:00">19.02.20, 11:16</time></span><div class='quote '>вычисляем отношение штраф/время</div></div> <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821481'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AVA12 &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T11:16:31+00:00">19.02.20, 11:16</time></span><div class='quote '>сортируем их в порядке убывания этого отношения</div></div><br>
Я предложил то же самое отношение, только делил время на штраф, и соответственно, сортировал по возрастанию. У меня в спойлере это отношение даже выводится. Специально потратил десяток минут.]]></description>
        <author>amk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824794</guid>
        <pubDate>Mon, 02 Mar 2020 19:16:49 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824794</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3824791'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>amk &#064; <time class="tag-quote__quoted-time" datetime="2020-03-02T17:41:26+00:00">02.03.20, 17:41</time></span><div class='quote '>А правильный ответ почти сразу дал AVA12</div></div><br>
Прошу его еще раз процитировать/уточнить, чтобы провести замеры.]]></description>
        <author>JoeUser</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824791</guid>
        <pubDate>Mon, 02 Mar 2020 17:41:26 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824791</link>
        <description><![CDATA[amk: Легко можно показать, что решение локально оптимально, если величина Duration/Cost не убывает.<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><br>
<pre>
Рассмотрим последовательность работ и выделим в ней две соседние работы
W[1] ... W[k+1] W[k+2] .... W[N]
         D[k+1] D[k+2]
         C[k+1] C[k+2]
Как легко заметить штраф за работы выполняемые до них не меняется, если их поменять местами. Так же не меняется штраф за последующие работы.

Запишем общий штраф для рассмотренной последовательности и последовательности, в которой эти работы поменяны местами.
Ss + Ds*C[k+1] + (Ds + D[k+1])*C[k+2] + Se
Ss + Ds*C[k+2] + (Ds + D[k+2])*C[k+1] + Se

Раскроем скобки и объединим совпадающие в обоих выражениях слагаемые
Ss + Ds*(C[k+1] + C[k+2]) + Se + D[k+1]*C[k+2] = S + D[k+1]*C[k+2]
Ss + Ds*(C[k+1] + C[k+2]) + Se + D[k+2]*C[k+1] = S + D[k+2]*C[k+1]

Должно выполняться
S + D[k+1]*C[k+2] &lt;= S + D[k+2]*C[k+1]

D[k+1]*C[k+2] &lt;= D[k+2]*C[k+1]

D[k+1]/C[k+1] &lt;= D[k+2]/C[k+2]
</pre><br>
</div></div> <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-03-02T17:43:54+00:00">02.03.20, 17:43</time></span></span><br>
Вообще говоря, поскольку данное соотношение не зависит от места задачи в очереди выполнения локально оптимальное решение должно быть оптимальным и глобально. А потому непонятно, почему у <strong class='tag-b'>JoeUser</strong>&#39;а иногда получаются не самые оптимальные решения. Или он по какому-то другому критерию сортирует? <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-03-02T17:47:56+00:00">02.03.20, 17:47</time></span></span><br>
Разобрался. Он действительно в качеств отношения использует другое значение и получает неточный результат.<br>
<br>
А правильный ответ почти сразу дал <strong class='tag-b'>AVA12</strong>.]]></description>
        <author>amk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824789</guid>
        <pubDate>Mon, 02 Mar 2020 16:59:52 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824789</link>
        <description><![CDATA[JoeUser: Что-то ТС молчит как рыба об лед&#33; :lol: У меня еще появились идеи ... только мне одному они ни разу не упали.]]></description>
        <author>JoeUser</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824742</guid>
        <pubDate>Sun, 01 Mar 2020 15:05:37 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824742</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3824741'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AVA12 &#064; <time class="tag-quote__quoted-time" datetime="2020-03-01T14:49:11+00:00">01.03.20, 14:49</time></span><div class='quote '>Не совсем понятно, для чего тут нужны суммы.</div></div><br>
Я уже объяснял вой взгляд ранее - посчитал, что каждый параметр вносит свой вклад в расчеты. А как его (вклад) можно определить? Самое простое - разделить его на сумму остальных и оценить долю.  Повторюсь - такой метод расчетов просто получился путем догадок&#33; Никаких точных математических обоснований, никаких прочих формул и правил.]]></description>
        <author>JoeUser</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824741</guid>
        <pubDate>Sun, 01 Mar 2020 14:49:11 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824741</link>
        <description><![CDATA[AVA12: Короче говоря, итоговый коэффициент k[i] = (P[i] / T[i]) * (sum(T) - T[i]) / (sum(P) - P[i]), где P - это штрафы, а T - время выполнения. Не совсем понятно, для чего тут нужны суммы. Все, что они делают - это добавляют нелинейности к итоговым коэффициентам, а поскольку нас интересуют только отношения больше/меньше, эта нелинейность ничего не меняет.]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824738</guid>
        <pubDate>Sun, 01 Mar 2020 14:02:33 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824738</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3824734'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AVA12 &#064; <time class="tag-quote__quoted-time" datetime="2020-03-01T12:47:41+00:00">01.03.20, 12:47</time></span><div class='quote '>Но хотелось бы увидеть описание алгоритма (или формулы).</div></div><br>
Хорошо, попробую на пальцах ...  :-? <br>
<br>
Пусть дан список работ. Каждая работа представлена в списке тройкой [порядковый_номер_работы, продолжительность_работы, штраф_за _простой]<br>
<br>
{{0, 1, 1}, {1, 2, 3}, {2, 3, 2}};<br>
<br>
Нам нужно для каждой работы вычислить &quot;взвешенный коэффициент&quot;<br>
<br>
Работа 0<br>
<br>
sum_r = равна сумме всех штрафов, кроме работы №0 (равна 5);<br>
sum_j = равна сумме всех продолжительностей работ, кроме работы №0 (равна 5);<br>
k1 = промежуточный коэффициент, равный (штраф_работы_№0/sum_r) = 0.2<br>
k2 = промежуточный коэффициент, равный (продолжительность_работы_№0/sum_j) = 0.2<br>
взвешенный коэффициент работы №0 = k1/k2 (<strong class='tag-b'>равен 1.0</strong>)<br>
<br>
Работа 1<br>
<br>
sum_r = равна сумме всех штрафов, кроме работы №1 (равна 3);<br>
sum_j = равна сумме всех продолжительностей работ, кроме работы №1 (равна 4);<br>
k1 = промежуточный коэффициент, равный (штраф_работы_№1/sum_r) = 1<br>
k2 = промежуточный коэффициент, равный (продолжительность_работы_№1/sum_j) = 0.5<br>
взвешенный коэффициент работы №1 = k1/k2 (<strong class='tag-b'>равен 2.0</strong>)<br>
<br>
Работа 2<br>
<br>
sum_r = равна сумме всех штрафов, кроме работы №2 (равна 4);<br>
sum_j = равна сумме всех продолжительностей работ, кроме работы №2 (равна 3);<br>
k1 = промежуточный коэффициент, равный (штраф_работы_№2/sum_r) = 0.5<br>
k2 = промежуточный коэффициент, равный (продолжительность_работы_№2/sum_j) = 1<br>
взвешенный коэффициент работы №2 = k1/k2 (<strong class='tag-b'>равен 0.5</strong>)<br>
<br>
Значит, работы нужно расположить по убыванию их &quot;взвешенных коэффициентов&quot; в порядке:<br>
<br>
1-0-2, вот так: {{1, 2, 3}, {0, 1, 1}, {2, 3, 2}}<br>
<br>
<strong class='tag-b'><span class="tag-color tag-color-named" data-value="red" style="color: red">Считаем суммарный штраф: 2*(1+2) +1*(2) = 8</span></strong><br>
<br>
Проверяем перебором все перестановки:<br>
<br>
{1,2,3}, {0,1,1}, {2,3,2} = 8<br>
{0,1,1}, {1,2,3}, {2,3,2} = 9<br>
{1,2,3}, {2,3,2}, {0,1,1} = 9<br>
{0,1,1}, {2,3,2}, {1,2,3} = 14<br>
{2,3,2}, {1,2,3}, {0,1,1} = 14<br>
{2,3,2}, {0,1,1}, {1,2,3} = 15<br>
<br>
Проверка прошла удачно&#33; <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-03-01T14:07:05+00:00">01.03.20, 14:07</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3824734'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AVA12 &#064; <time class="tag-quote__quoted-time" datetime="2020-03-01T12:47:41+00:00">01.03.20, 12:47</time></span><div class='quote '>возможно даже, удастся его скомпилировать и запустить)</div></div><br>
Да, пожалуйста,  <a class='tag-url' href='https://ideone.com/y0IcNc' target='_blank'>https://ideone.com/y0IcNc</a>, только без последнего длинного теста, ибо онлан-компилятор обрубает по времени исполнения.]]></description>
        <author>JoeUser</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824734</guid>
        <pubDate>Sun, 01 Mar 2020 12:47:41 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824734</link>
        <description><![CDATA[AVA12: <strong class='tag-b'>JoeUser</strong>, это раздел &quot;Алгоритмы&quot;, а не &quot;C++&quot;. То, что есть исходник программы - это, конечно, хорошо (возможно даже, удастся его скомпилировать и запустить). Но хотелось бы увидеть описание <em class='tag-i'>алгоритма</em> (или формулы).]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824696</guid>
        <pubDate>Sat, 29 Feb 2020 23:54:00 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824696</link>
        <description><![CDATA[JoeUser: ADD&gt; В предыдущем моем посте в прикрепленном архиве - текстовые файлы. Которые получаются путем перехвата вывода из STDOUT (типа ./myprog &gt; 1). А смотреть и сравнивать нужно вот это:<br>
<br>
<img class='tag-img' src='https://i111.fastpic.ru/big/2020/0301/a0/7ad1313b9ec483dab6beff5ccbc804a0.png' alt='user posted image'>]]></description>
        <author>JoeUser</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824695</guid>
        <pubDate>Sat, 29 Feb 2020 23:46:18 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3824695</link>
        <description><![CDATA[JoeUser: Вроде бы нашел интересное решение  :) <br>
<br>
Назову его путем &quot;сортировки взвешенных коэффициентов&quot;. Предпосылка простая - каждая работа вносит определенный вклад в общий штраф, когда выполняется, и вносит вклад в общее время выполнения. Если как-то соотнести эти &quot;вклады&quot; - можно &quot;взвесить&quot; эти коэффициенты. Соответственно, работы с большими коэффициентами влияния желательно расположить раньше работ с меньшими. Такова была моя гипотеза. И я решил провести ее проверку. Для этого написал несложную программу. Суть которой - создание тестов на случайных данных и их оценка моей методикой и полным перебором. Ну и сравнение, какой суммарный штраф получается путем сортировки взвешенных коэффициентов, и что нам дает точный полный перебор.<br>
<br>
Вот программа:<br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><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">#include &#60;algorithm&#62;</div><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;iterator&#62;</div><div class="code_line">#include &#60;locale&#62;</div><div class="code_line">#include &#60;string&#62;</div><div class="code_line">#include &#60;vector&#62;</div><div class="code_line">#include &#60;ctime&#62;</div><div class="code_line">#include &#60;map&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">using namespace std;</div><div class="code_line">&nbsp;</div><div class="code_line">struct JobsElement {</div><div class="code_line">&nbsp;&nbsp;unsigned int Num;</div><div class="code_line">&nbsp;&nbsp;unsigned int Duration;</div><div class="code_line">&nbsp;&nbsp;unsigned int Penalty;</div><div class="code_line">&nbsp;&nbsp;JobsElement(unsigned int iNum, unsigned int iDuration, unsigned int iPenalty):</div><div class="code_line">&nbsp;&nbsp; &nbsp;Num(iNum), Duration(iDuration), Penalty(iPenalty) {}</div><div class="code_line">&nbsp;&nbsp;bool operator&#60;(const JobsElement&amp; rhs) const {</div><div class="code_line">&nbsp;&nbsp; &nbsp;return (Num &#60; rhs.Num);</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">typedef vector&#60;JobsElement&#62; JobsType;</div><div class="code_line">typedef map&#60;unsigned int, double&#62; RatioType;</div><div class="code_line">&nbsp;</div><div class="code_line">// Распечатка вектора</div><div class="code_line">void PrintVector(JobsType&amp; iJobs, string iStr, string iEnd) {</div><div class="code_line">&nbsp;&nbsp;if (iStr.length())</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout &#60;&#60; iStr &#60;&#60; endl;</div><div class="code_line">&nbsp;&nbsp;for (size_t i = 0; i &#60; iJobs.size(); i++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout &#60;&#60; iJobs[i].Num &#60;&#60; &quot;: {&quot; &#60;&#60; iJobs[i].Duration &#60;&#60; &quot;,&quot; &#60;&#60; iJobs[i].Penalty &#60;&#60; &quot;}&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout &#60;&#60; ((i &#60; iJobs.size() - 1) ? &quot;, &quot; : &quot;&quot;);</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;if (iEnd.length())</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout &#60;&#60; &quot; &quot; &#60;&#60; iEnd;</div><div class="code_line">&nbsp;&nbsp;cout &#60;&#60; endl;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// Вычисление суммарного штрафа для последовательности работ</div><div class="code_line">auto Penalty(JobsType&amp; iJobs) {</div><div class="code_line">&nbsp;&nbsp;int Ret = 0;</div><div class="code_line">&nbsp;&nbsp;for (size_t i = 0; i &#60; iJobs.size(); i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (size_t j = i + 1; j &#60; iJobs.size(); j++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Ret += iJobs[i].Duration * iJobs[j].Penalty;</div><div class="code_line">&nbsp;&nbsp;return Ret;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// Вычисление &quot;взвешенных&quot; штрафных коэфициентов</div><div class="code_line">auto CountingRatio(JobsType&amp; iJobs) {</div><div class="code_line">&nbsp;&nbsp;RatioType Ratio;</div><div class="code_line">&nbsp;&nbsp;for (unsigned int i = 0; i &#60; iJobs.size(); i++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;int sum_r = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int sum_j = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (unsigned int j = 0; j &#60; iJobs.size(); j++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (i != j) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sum_j += iJobs[j].Duration;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sum_r += iJobs[j].Penalty;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;double k1 = (iJobs[i].Penalty) / (double) sum_r;</div><div class="code_line">&nbsp;&nbsp; &nbsp;double k2 = (iJobs[i].Duration) / (double) sum_j;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Ratio[i] = k1 / (double)k2;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;JobsType Ret;</div><div class="code_line">&nbsp;&nbsp;std::copy(iJobs.begin(), iJobs.end(), std::back_inserter(Ret));</div><div class="code_line">&nbsp;&nbsp;std::sort(Ret.begin(), Ret.end(), [&amp;](const JobsElement &amp; iA, const JobsElement &amp; iB)-&#62;auto {</div><div class="code_line">&nbsp;&nbsp; &nbsp;return !(Ratio[iA.Num] &#60; Ratio[iB.Num]);</div><div class="code_line">&nbsp;&nbsp;});</div><div class="code_line">&nbsp;&nbsp;return Ret;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// Перебор и оценка вариантов</div><div class="code_line">auto CountingBruteforce(JobsType&amp; iJobs) {</div><div class="code_line">&nbsp;&nbsp;vector&#60;pair&#60;unsigned int, JobsType&#62;&#62; Tmp;</div><div class="code_line">&nbsp;&nbsp;do {</div><div class="code_line">&nbsp;&nbsp; &nbsp;int Pen = Penalty(iJobs);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Tmp.push_back({Pen, iJobs});</div><div class="code_line">&nbsp;&nbsp;} while (std::next_permutation(iJobs.begin(), iJobs.end()));</div><div class="code_line">&nbsp;&nbsp;sort(Tmp.begin(), Tmp.end(), [&amp;](const pair&#60;unsigned int, JobsType&#62;&amp; iA, const pair&#60;unsigned int, JobsType&#62;&amp; iB)-&#62;auto {</div><div class="code_line">&nbsp;&nbsp; &nbsp;return iA.first &#60; iB.first;</div><div class="code_line">&nbsp;&nbsp;});</div><div class="code_line">&nbsp;&nbsp;for (auto&amp;&amp; i : Tmp)</div><div class="code_line">&nbsp;&nbsp; &nbsp;PrintVector(i.second, &quot;&quot;, to_string(i.first));</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// Подготовка нового вектора</div><div class="code_line">void PrepareVector(JobsType&amp; iJobs, const size_t iLen) {</div><div class="code_line">&nbsp;&nbsp;iJobs.clear();</div><div class="code_line">&nbsp;&nbsp;for (unsigned int i = 0; i &#60; iLen; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp;iJobs.push_back(JobsElement(i, 1 + std::rand() % 9, 1 + std::rand() % 9));</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// запуск теста</div><div class="code_line">void RunTest(JobsType&amp; iJobs, const size_t iNum) {</div><div class="code_line">&nbsp;&nbsp;PrintVector(iJobs, &quot;Test #&quot; + to_string(iNum) + &quot;:\n------------------------------------------------------&quot;, &quot;&quot;);</div><div class="code_line">&nbsp;&nbsp;auto Res = CountingRatio(iJobs);</div><div class="code_line">&nbsp;&nbsp;PrintVector(Res, &quot;Result vector:&quot;, &quot;&quot;);</div><div class="code_line">&nbsp;&nbsp;cout &#60;&#60; &quot;Result penalty: &quot; &#60;&#60; Penalty(Res) &#60;&#60; endl;</div><div class="code_line">&nbsp;&nbsp;CountingBruteforce(iJobs);</div><div class="code_line">&nbsp;&nbsp;cout &#60;&#60; endl;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp;std::srand(unsigned(std::time(0)));</div><div class="code_line">&nbsp;&nbsp;// Тест 1: ручное задание параметров и числа работ</div><div class="code_line">&nbsp;&nbsp;JobsType Jobs = {{0, 1, 1}, {1, 2, 3}, {2, 3, 2}};</div><div class="code_line">&nbsp;&nbsp;RunTest(Jobs, 1);</div><div class="code_line">&nbsp;&nbsp;// Тест 2</div><div class="code_line">&nbsp;&nbsp;PrepareVector(Jobs, 4);</div><div class="code_line">&nbsp;&nbsp;RunTest(Jobs, 2);</div><div class="code_line">&nbsp;&nbsp;// Тест 3</div><div class="code_line">&nbsp;&nbsp;PrepareVector(Jobs, 5);</div><div class="code_line">&nbsp;&nbsp;RunTest(Jobs, 3);</div><div class="code_line">&nbsp;&nbsp;// Тест 4</div><div class="code_line">&nbsp;&nbsp;PrepareVector(Jobs, 6);</div><div class="code_line">&nbsp;&nbsp;RunTest(Jobs, 4);</div><div class="code_line">&nbsp;&nbsp;// Тест 5</div><div class="code_line">&nbsp;&nbsp;PrepareVector(Jobs, 7);</div><div class="code_line">&nbsp;&nbsp;RunTest(Jobs, 5);</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script></div></div><br>
К сообщению прикрепил вывод программы из трех последовательных запусков. Результаты прекрасные, ящетаю&#33;  :lol: <br>
<br>
Но есть и ложка &quot;дегтя&quot; ... сами понимаете - алгоритм получен эмпирическим путем, поэтому может быть неточен. И это тоже я проверил. В одном из тестов полный перебор дал минимальный штраф 47 единиц (при мах=540), а мой алгоритм на коэффициентах дал 48. Но это было примерно в одном 1 из 20 запусков. Запускал и проверял руками вывод. Может повезло.<br>
<br>
И тем не менее&#33; Если &quot;взвешенные коэффициенты&quot; на любых вменяемых диапазонах значений дают такой результат, то на количестве работ 1000 моей методике пока равных нет, пока не найдена лучшая. Для сравнения: полный перебор дает N&#33; вариантов расчета суммарного штрафа, а мой алгоритм N*(N-1) расчета коэффициентов + 1 расчет суммарного штрафа. Что такое 1000&#33; дело понятное.<br>
<br>
В общем, смотрите, экспериментируйте, критикуйте. Возможно где-то чё-то не так.<br>
<br>
 :thanks:  <br>
<br>
<span class="b-attach" data-size="74297" data-hits="776" data-attach-id="61437" data-attach-post-id="0">
			<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=0&amp;attach_id=61437' title='Скачать файл' target='_blank'>res.7z</a> (, : 776)
		</span>]]></description>
        <author>JoeUser</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821619</guid>
        <pubDate>Thu, 20 Feb 2020 11:15:58 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821619</link>
        <description><![CDATA[FasterHarder: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821615'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>amk &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T11:00:06+00:00">20.02.20, 11:00</time></span><div class='quote '>(а может быть, полученная последовательность и не обязательно оптимальна).</div></div><br>
а добиться оптимальности можно лишь полным перебором<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821496'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Akina &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T13:29:35+00:00">19.02.20, 13:29</time></span><div class='quote '>Однозначно она.</div></div><br>
<br>
самое страшное, что решил еще одну задачку, которая имеет ТАКУЮ ЖЕ СЛОЖНОСТЬ, как эту, примерно за 4-7 мин. (построив мат.модель) и там все прекрасно  :lol: <br>
здесь что-то непонятное происходит..ну не знаю, конечно, всякое бывает...<br>
<br>
в др.алгоритме (здесь его никто не приводил) работают ЧЕРЕЗ произведения, отбирая нужное задание из оставшихся....]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821615</guid>
        <pubDate>Thu, 20 Feb 2020 11:00:06 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821615</link>
        <description><![CDATA[amk: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821608'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2020-02-20T10:25:07+00:00">20.02.20, 10:25</time></span><div class='quote '>мне казалось, что {a, b, c} --&#62; {abc, acb, bac, aca, cab, cba}, в его алгоритме вообще переборов вроде НЕТ</div></div> Потому что он дал тебе приближённый алгоритм с эмпирическим правилом сортировки. Да, на большинстве данных он даёт оптимальный или близкий к оптимальному результат, но оптимальность его в общем случае не очевидна (а может быть, полученная последовательность и не обязательно оптимальна).<br>
<br>
Хотя, сдаётся мне, можно доказать локальную оптимальность такой сортировки относительно обменов подпоследовательностей (типа abc...de...fgh&lt;-&gt;abe...fc...dgh). А в таком случае может оказаться, что это простое правило даёт оптимальное решение.]]></description>
        <author>amk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821608</guid>
        <pubDate>Thu, 20 Feb 2020 10:25:07 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821608</link>
        <description><![CDATA[FasterHarder: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821530'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Akina &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T19:03:43+00:00">19.02.20, 19:03</time></span><div class='quote '>Да есть у него всё. </div></div><br>
ок, значит я не до конца понимаю, что такое переборы всех возможных вариантов<br>
мне казалось, что {a, b, c} --&#62; {abc, acb, bac, aca, cab, cba}, в его алгоритме вообще переборов вроде НЕТ  :D , ну не знаю...<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821530'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Akina &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T19:03:43+00:00">19.02.20, 19:03</time></span><div class='quote '>Затем, что полный перебор - штука долгая. И не исключено, что ты можешь прервать процесс в середине, если текущее решение тебя в принципе устраивает.</div></div><br>
это я тоже не понимаю<br>
если для получения ТОЧНОГО ДЕТЕРМИНИРОВАННОГО результата требуется перебрать ВСЕ ВОЗМОЖНЫЕ варианты, то как я могу что-то прервать в середине обработки..<br>
+ я вообще не выкупаю, какая связь между ПЕРЕБОРОМ ВСЕХ ВАРИАНТОВ и сортировкой...когда перебираем все, то сортировка ведь совсем не нужна, ну не знаю...не знаю...всякое, конечное, бывает...не знаю...<br>
<br>
кстати, но одном из форумов дали еще один алгоритм решения, думал там ошибка, но тот ответ заплюсовали, ведать тоже так можно, не знаю...]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821530</guid>
        <pubDate>Wed, 19 Feb 2020 19:03:43 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821530</link>
        <description><![CDATA[Akina: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821498'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T13:42:12+00:00">19.02.20, 13:42</time></span><div class='quote '> т е способ предложенный AVA12, не совсем точен? <br>
ведь в его варианте нет никакого перебора или я что-то не понимаю относительно этих переборов...</div></div><br>
Да есть у него всё. <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821498'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T13:42:12+00:00">19.02.20, 13:42</time></span><div class='quote '>а зачем что-то сортировать, если и так будут всевозможные переборы вариантов?</div></div><br>
Затем, что полный перебор - штука долгая. И не исключено, что ты можешь прервать процесс в середине, если текущее решение тебя в принципе устраивает. А при сортировке вероятность &quot;хороших решений&quot; выскочить раньше - выше.<br>
Нет, если нужен абсолютный минимум, то и вправду пофиг на сортировку.]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821498</guid>
        <pubDate>Wed, 19 Feb 2020 13:42:12 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821498</link>
        <description><![CDATA[FasterHarder: <strong class='tag-b'>Akina</strong>, т е способ предложенный <strong class='tag-b'>AVA12</strong>, не совсем точен?  :no-sad: <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-02-19T13:45:55+00:00">19.02.20, 13:45</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821496'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Akina &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T13:29:35+00:00">19.02.20, 13:29</time></span><div class='quote '>Причём перебор с удачной сортировкой на равномерных</div></div><br>
а зачем что-то сортировать, если и так будут всевозможные переборы вариантов?  :huh: <br>
<br>
совсем я запутался...]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821496</guid>
        <pubDate>Wed, 19 Feb 2020 13:29:35 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821496</link>
        <description><![CDATA[Akina: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821437'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T08:23:13+00:00">19.02.20, 08:23</time></span><div class='quote '>Или это NP-полная задача, т е нужен ПОЛНЫЙ перебор ВСЕХ возможных вариантов??</div></div><br>
Однозначно она. Причём перебор с удачной сортировкой на равномерных данных должен дать наибольшее количество отбрасываемых вариантов и. соответственно, более быструю сходимость.<br>
Что до &quot;удачной сортировки&quot;...  Задания с максимальным удельным штрафом и с минимальным временем выполнения желательно ставить в начало перебора, так что я бы ратовал за, в первом приближении, сортировку по (штраф/время) по убыванию, наверное.]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821486</guid>
        <pubDate>Wed, 19 Feb 2020 12:18:33 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821486</link>
        <description><![CDATA[AVA12: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Станку В ЛЮБОМ случае для выполнения всех заданий потребуется времени T(1) + T(2) + ... + T(N). Какая ему разницы, какое задание выполнять в данный момент времени (на штраф внимания не обращаем сейчас)</div></div><br>
Станку без разницы, а вот для задач с тикающими счетчиками разница есть. Если твой первый пример выполнять в порядке возрастания T, то общий простой задач будет 1 + (1 + 4) = 6 часов. А если в порядке убывания T, то простой будет уже 10 + (10 + 4) = 24 часа.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>допустим характеристики {T; C} заданий №7 и №28 такие соот-но {4: 8}, {6; 12}, т е у них РАВНЫЕ отношения = 2/1, то их можно выполнять В ЛЮБОМ порядке?</div></div><br>
Ну, в одном случае штраф будет 4 * 12, а в другом 6 * 8, так что смотри сам.]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821482</guid>
        <pubDate>Wed, 19 Feb 2020 11:48:41 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821482</link>
        <description><![CDATA[FasterHarder: <strong class='tag-b'>AVA12</strong>, да, круто у тебя, конечно, получилось&#33;  ;) а главное, что так просто: отношение + отсортированный массив.<br>
<br>
но вот кое-что еще.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821481'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AVA12 &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T11:16:31+00:00">19.02.20, 11:16</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=416851&view=findpost&p=3821481'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AVA12 &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T11:16:31+00:00">19.02.20, 11:16</time></span><div class='quote '>нужно выполнять задания в порядке убывания времени выполнения</div></div><br>
вот тут что-то я на 100% не ухватываю. Станку В ЛЮБОМ случае для выполнения всех заданий потребуется времени T(1) + T(2) + ... + T(N). Какая ему разницы, какое задание выполнять в данный момент времени (на штраф внимания не обращаем сейчас)<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821481'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AVA12 &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T11:16:31+00:00">19.02.20, 11:16</time></span><div class='quote '>штраф/время и сортируем их в порядке убывания этого отношения</div></div><br>
вот честно, я вообще не понимаю, почему взял отношение C/T, а не T/C (время/штраф), например.<br>
<br>
Кстати, данные читаются из файла, поэтому можно сразу, считав пару данных {T, C} вставлять их отношение в одномерный массив, сохранив упорядоченность на убывание.<br>
кстати, как я понимаю, N уже может быть хоть лям - не критично.<br>
<br>
Кстати, в задаче еще нужно найти этом мин.штраф, но я попробую сам это сделать.<br>
<br>
P.S. был уверен на 90%, что тут графы замешаны, оказалось - все проще, хотя, это все очень непросто все равно) <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-02-19T11:56:28+00:00">19.02.20, 11:56</time></span></span><br>
и еще такой момент: допустим характеристики {T; C} заданий №7 и №28 такие соот-но {4: 8}, {6; 12}, т е у них РАВНЫЕ отношения = 2/1, то их можно выполнять В ЛЮБОМ порядке?]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821481</guid>
        <pubDate>Wed, 19 Feb 2020 11:16:31 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821481</link>
        <description><![CDATA[AVA12: Кажется, я что-то нащупал.<br>
С одной стороны, нужно выполнять задания в порядке <s class='tag-s'>убывания</s> возрастания времени выполнения, чтобы простой был минимальным. С другой стороны, нужно выполнять задания в порядке убывания штрафа, чтобы меньше денег натикало. Объединяем оба требования, для каждой задачи вычисляем отношение штраф/время и сортируем их в порядке убывания этого отношения. Получается, вроде бы, неплохо.]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821476</guid>
        <pubDate>Wed, 19 Feb 2020 10:35:24 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821476</link>
        <description><![CDATA[FasterHarder: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821464'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>prografix &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T10:01:33+00:00">19.02.20, 10:01</time></span><div class='quote '>В задачу не вникал, но похоже, что можно применить динамическое программирование. </div></div><br>
думал об этом, но это не отменяет того, что нужен алгоритм)<br>
а лучше вникни, т к там все достаточно просто + великолепная поясняющая картинка есть<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821468'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AVA12 &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T10:13:39+00:00">19.02.20, 10:13</time></span><div class='quote '>Тыща заданий разом - это, конечно, мрак</div></div><br>
ну, это как бы ПРЕДЕЛЬНОЕ значение, а так подаваться будет штучек по 20 ))<br>
Если количество заданий N очень сильно влияет на АЛГОРИТМ, то давай ограничим N &lt;= 100.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416851&view=findpost&p=3821468'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AVA12 &#064; <time class="tag-quote__quoted-time" datetime="2020-02-19T10:13:39+00:00">19.02.20, 10:13</time></span><div class='quote '>А каково количество возможных значений времени выполнения и штрафа?</div></div><br>
тебя интересует, чему равняется T(max), C(max)? В условии об этом не сказано. ну, какое-то разумное значение. Ну, давай сделаем T(max) &lt;= 20, C(max) &lt;= 10. Ну, это число из логики какой-то. <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-02-19T10:36:27+00:00">19.02.20, 10:36</time></span></span><br>
<strong class='tag-b'>AVA12</strong>, т е задача НЕТРИВИАЛЬНАЯ, да?<br>
мне даже подумалось, что здесь что-то совсем простое, просто я слишком слаб в алгоритмике, что не вижу элементарное решение...]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821468</guid>
        <pubDate>Wed, 19 Feb 2020 10:13:39 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821468</link>
        <description><![CDATA[AVA12: Тыща заданий разом - это, конечно, мрак. А каково количество возможных значений времени выполнения и штрафа? Если количество возможных комбинаций невелико, то можно построить список отношений (время_выплнения, штраф, количество_заданий, задания[]) и дальше уже колдовать над этим списком.]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821464</guid>
        <pubDate>Wed, 19 Feb 2020 10:01:33 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821464</link>
        <description><![CDATA[prografix: В задачу не вникал, но похоже, что можно применить динамическое программирование.]]></description>
        <author>prografix</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821456</guid>
        <pubDate>Wed, 19 Feb 2020 09:27:46 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821456</link>
        <description><![CDATA[Pavia: Открыть книгу про теорию игр и прочитать.]]></description>
        <author>Pavia</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821437</guid>
        <pubDate>Wed, 19 Feb 2020 08:23:13 +0000</pubDate>
        <title>Станок выполняет задания со штрафом ожидания. Найти минимальный штраф</title>
        <link>https://forum.sources.ru/index.php?showtopic=416851&amp;view=findpost&amp;p=3821437</link>
        <description><![CDATA[FasterHarder: Всем хай&#33; Сходу к делу&#33;<br>
<br>
<strong class='tag-b'>Есть такая задачка.</strong><br>
<span class="tag-color tag-color-named" data-value="blue" style="color: blue">В нулевой момент времени станку <strong class='tag-b'>ОДНОВРЕМЕННО</strong> поставляют N заданий. Станок может в любой момент времени выполнять только одно задание (задание нельзя прервать, т е, если он начал им заниматься, то пока не закончит, к др.заданию переходить не может). На выполнение каждого задания станку требуется T времени (в часах). Также каждое задание имеет характеристику C (у.е.) - сумма штрафа, взимаемая за каждый час ожидания начала исполнения.<br>
Нужно найти такой порядок исполнения заданий, чтобы итоговая сумма штрафов по всем заданиям оказалась минимальной. Получить эту мин.сумму штрафа, а также порядок исполнения заданий станком.</span><br>
-------------------------------------------<br>
На рис.показал пример + результаты работы.<br>
<span class="b-attach" data-size="32617" data-hits="1750" data-attach-id="61393" data-attach-post-id="3821437">
			<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=3821437&amp;attach_id=61393' title='Скачать файл' target='_blank'>___________________________.png</a> (, : 1750)
		</span><br>
<br>
Я хотел как бы узнать про алгоритм)<br>
Мне казалось, что нужно подавать станку задания, имеющие макс.штраф - оказалось не так.<br>
Строить граф (вершины - задания), причем полный, т к станок может от любого задания перейти в любое другое. А дальше, что и непонятно.<br>
Сортировать задания по полям &quot;Время выполнения&quot; или &quot;штраф&quot;, ну, ок, а что потом.<br>
Получить какую-то целевую &quot;функцию&quot; по типу f(T, C), которая говорит, мол бери это задание следующим...<br>
<br>
Или это NP-полная задача, т е нужен ПОЛНЫЙ перебор ВСЕХ возможных вариантов??<br>
Кстати, кол-во заданий может быть велико (под 1 000).<br>
<br>
Подскажите как быть-то?]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	