2016-11-14 8 views
0

Проблема звучит так: мы получаем n-кубов. Каждый куб имеет длину (длину края) и цвет. Длины краев различны, но кулоры не являются, например: любые два куба никогда не могут иметь одинаковую длину, но можно иметь один и тот же цвет. Цвета от 1 до p (p задано).Как доказать этот жадный алгоритм как оптимальный?

Мы должны построить куб башню, которая имеет максимальную высоту, следуя этим правилам:

1) куб не может быть помещен на куб, если они имеют один и тот же цвет;

2) куб не может быть размещен на кубе, длина которого меньше.

например: cube c1 имеет длину 3, куб c2 имеет длину 5. Куб c1 может быть помещен в верхнюю часть c2, но куб c2 не может быть размещен в верхней части c1.

Хорошо, так что алгоритм я придумал для того, чтобы решить эту проблему следующим образом:

  1. мы сортируем кубики от длины кромки, в порядке убывания, и мы помещаем их в массив;
  2. мы добавляем первый куб в массив к Башне;
  3. Мы сохраняем длину последнего вставленного куба (в данном случае длину первого куба) в переменной l;
  4. Мы сохраняем цвет последнего вставленного куба (в данном случае, цвет первого куба) в переменной c;
  5. мы проходим остаток массива, вставляя первый куб, длина которого меньше l и цвет отличается от c, а затем повторяем 3-4-5;

Теперь у меня возникают трудности с тем, как я могу доказать, что этот жадный алгоритм является оптимальным? Я думаю, что доказательство должно так или иначе похожи на те здесь: http://www.cs.princeton.edu/~wayne/kleinberg-tardos/pdf/04GreedyAlgorithmsI-2x2.pdf

+0

@trincot куба не может иметь одинаковую длину, я говорил об этом, когда я объяснил проблему: «любые два куба никогда не могут иметь такую ​​же длину» –

+0

Ах, да. пропустил это. Таким образом, тест * ", длина которого меньше 1 * * на шаге 5, действительно не требуется, так как это всегда будет иметь место для всех последующих кубов. – trincot

+0

@ trincot Правда, правда, я написал, что только для того, чтобы быть более ясным, я думаю. –

ответ

2

Возникает вопрос:

  • Есть случай, когда выбирая максимум длины куба не является оптимальным?

На каждом принятии узла мы должны решить, если мы выбираем или б, учитывая а> Ь:

Предположим, выбирая Ь строго оптимальным (подразумевается Макс-высота):

  • Случай 1:col(a) == col(b)
  • b optimal => final tower: b, x0, x1, ...
  • , но и действует по построению с одинаковой высотой: a, x0, x1, ...
  • действует, потому что: col(a) == col(b), (a > b) & (b > x0) => (a > x0) (транзитивность)
  • противоречие!

  • Случай 2col(a) != col(b)

  • b optimal -> final tower: b, x0, x1, ...
  • , но и действует конструкция с большей высотой: a, b, x0, x1, ...
  • действует, потому что: (a > b) & (col(a) != col(b)) => a before b
  • противоречие!

Мы предполагали, что выбор b строго оптимален и показал противоречия. Выбор b может быть одинаково хорош или хуже, чем выбор (куб максимальной длины остальных).

+0

Не могли бы вы немного разобраться? Я считаю, что это путаница, что вы подразумеваете под «col», цветом? и кто такой или б? длины? и кто x0, x1 ...? –

+0

@VasileTurcu Да, col = цвет; a и b - следующие кубы, чтобы выбрать, где мы называем более крупный кандидат a, меньший b. x0, x1, ... являются все остальные кубики, уже сложены в какое-то решение, где x0> x1> x2, ... – sascha

+1

хорошо тогда, не должно быть вопрос «Есть ли случай, когда собирание максимальный куб не оптимальный? " –