Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дроздов С. Комбинаторные задачи и элементы теории вычислительной сложности.DOC
Скачиваний:
158
Добавлен:
02.05.2014
Размер:
648.7 Кб
Скачать

1.5. Сокращение перебора

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

  • Иногда уже после выбора нескольких первых значений xiвыясняется, что на данной ветви дерева перебора не может быть допустимых планов. Например, коммивояжер раньше времени вернулся в исходный город, рюкзак переполнен первым же товаром, при раскраске графа две смежные вершины оказались одного цвета. Во всех этих случаях нет смысла достраивать план до полного, лучше уже не будет.

  • Похожая ситуация иногда возникает в задачах оптимизации. Каждый построенный план задачи должен сравниваться с текущим рекордом. Иногда удается, не дожидаясь построения полного плана, сравнить с рекордом и на основании этого сравнения отвергнуть частичный план. Например, для задачи о коммивояжере текущий рекорд составляет 500 единиц длины, а очередной строящийся план начинается с путей длиной 200 и 350 единиц. Нет смысла достраивать такой план, потому что короче он уже не станет.

  • В задаче поиска иногда возникает ситуация, когда удачный выбор нескольких первых переменных гарантирует, что план будет допустим при любых значениях оставшихся переменных. Например, в задаче о тождественной истинности ДНФ может оказаться, что первое же значение x1 = 0обращает в нуль все элементарные конъюнкции.

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

Все соображения, подобные приведенным выше, следует учитывать при разработке программы перебора планов для конкретной задачи. Если приемы сокращения перебора и не позволят справиться с проблемой комбинаторного взрыва, то во всяком случае они могут увеличить размерность решаемых задач хотя бы на 1-2 единицы, что уже неплохо.

Как изменится программа при учете возможностей сокращения перебора? Рассмотрим для примера сокращение за счет отбрасывания частичных планов, которые не могут привести к допустимым планам. Предполагается, что мы умеем проверять допустимость частичных планов. Пусть G(X,p,k) = 0, если для фиксированныхx1,x2, …,xkи любыхxk+1,xk+2, …,xnплан будет заведомо недопустим, иG(X,p,k) = 1, если при некоторых значенияхxk+1,xk+2, …,xnдопустимый план существует или, во всяком случае, может существовать. Тогда вместо ранее описанной процедурыCompleteSearchможно использовать процедуруReducedSearch, модифицированную следующим образом:

procedure ReducedSearch(k: Integer);

begin

if G(X,p,k) then begin

if(первые k переменных составляют полный план) then

begin

Обработать полученный план X в соответствии

с типом задачи A, B или C;

end

else begin

k:=k+1;

X[k]:=First(U[k]);

repeat

ReducedSearch(k);

X[k]:=Next(U[k],X[k]);

until X[k]=NoValue;

end;

end;

end;

В сущности, изменение свелось к более ранней проверке условия допустимости плана, за счет которой можно ожидать некоторого сокращения перебора.