F2Cmax — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Постановка задачи)
(Описание алгоритма)
Строка 9: Строка 9:
  
 
== Описание алгоритма ==
 
== Описание алгоритма ==
 +
Пусть <tex>p_{i1}</tex> {{---}} время выполнения <tex>i</tex>-ой работы на первом станке, а <tex>p_{i2}</tex> {{---}} на втором.<br/>
 +
<ol>
 +
<li>Будем в ходе нашего алгоритма строить два списка <tex> L </tex> и <tex>  R </tex>. Изначально оба списка пусты. И будем поддерживать множество еще не распределенных по спискам <tex> L </tex> и <tex>  R </tex> работ <tex>X = \{i \mid  i = 1, \dots, n\}</tex>  </li>
 +
<li> Пока множество <tex> X </tex> непусто будем распределять работы по спискам следующим образом:
 +
<ul>
 +
<li> Находим такие индексы <tex> i </tex> и <tex> j </tex>, что  <tex>p_{ij} = \min \{ p_{ij}  \mid i \in X; j = 1, 2\}</tex> </li>
 +
<li>Если минимум достигается на первом станке (иными словами <tex> j = 1 </tex>), то допишем работу <tex> i </tex> в конец  листа <tex> L </tex>, иначе дописываем в начало листа <tex> R </tex>  </li>
 +
</ul>
 +
</li>
 +
<li> Рассмотрим лист <tex> T = L + R</tex>. Утверждается, что этот лист является оптимальной перестановкой работ как на первом, так и на втором станке. Далее расставляем подряд работы на первом станке согласно перестановке, после чего ставим в том же порядке работы на втором стане, при этом избегая одновременного выполнения одной и той же работы. </li>
 +
 +
</ol>
  
 
==Доказательство корректности алгоритма==
 
==Доказательство корректности алгоритма==

Версия 18:32, 10 июня 2013

Постановка задачи

Рассмотрим задачу:

  1. Дано [math]n[/math] работ и [math]2[/math] станка.
  2. Для каждой работы известно её время выполнения на каждом станке.
  3. Каждую работу необходимо выполнить сначала на первом станке, а потом на втором.

Требуется минимизировать время окончания всех работ.

Описание алгоритма

Пусть [math]p_{i1}[/math] — время выполнения [math]i[/math]-ой работы на первом станке, а [math]p_{i2}[/math] — на втором.

  1. Будем в ходе нашего алгоритма строить два списка [math] L [/math] и [math] R [/math]. Изначально оба списка пусты. И будем поддерживать множество еще не распределенных по спискам [math] L [/math] и [math] R [/math] работ [math]X = \{i \mid i = 1, \dots, n\}[/math]
  2. Пока множество [math] X [/math] непусто будем распределять работы по спискам следующим образом:
    • Находим такие индексы [math] i [/math] и [math] j [/math], что [math]p_{ij} = \min \{ p_{ij} \mid i \in X; j = 1, 2\}[/math]
    • Если минимум достигается на первом станке (иными словами [math] j = 1 [/math]), то допишем работу [math] i [/math] в конец листа [math] L [/math], иначе дописываем в начало листа [math] R [/math]
  3. Рассмотрим лист [math] T = L + R[/math]. Утверждается, что этот лист является оптимальной перестановкой работ как на первом, так и на втором станке. Далее расставляем подряд работы на первом станке согласно перестановке, после чего ставим в том же порядке работы на втором стане, при этом избегая одновременного выполнения одной и той же работы.

Доказательство корректности алгоритма

Псевдокод

Сложность алгоритма

Источники

  • Peter Brucker. «Scheduling Algorithms» — «Springer», 2006 г. — 175 стр. — ISBN 978-3-540-69515-8