Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Иллюстрация

Читайте также:
  1. ИЛЛЮСТРАЦИЯ
  2. Иллюстрация.

Наиболее понятным образом принцип работы нашей программы можно продемонстрировать на примере.

Вес        
Количество        

Пусть имеется семь предметов (n = 7) с весами 9, 5, 25, 11, 9, 5, и 11 единиц (килограмм, фунтов, бушелей...). Тогда всего есть четыре разных вида предметов (k = 4).

Общая сумма весов равна 75; следовательно, "большая половина" sum = 38. Теперь нужно найти такой набор предметов, чей суммарный вес будет наиболее близким к этой "золотой середине". Кроме того, не стоит забывать и о сделанном ранее замечании: как только найдется набор, вес которого отличается от "золотого" лишь на единицу, поиск можно закончить.

Начнем теперь заполнять массивы take и dif (массив dif хранит остатки, в пределах которых можно проводить дальнейшие вычисления).

На начальном ("нулевом") шаге мы заполним массив take так, чтобы в создаваемый набор попали по возможности самые тяжелые предметы (см. раздел реализации "Основная часть программы"). Таким образом, получим следующие состояния массивов:

ves -        
take          
dif          

После этого шага переменная razn, которая хранит отклонение текущего набора весов от оптимального, будет содержать значение 2. Попытаемся уменьшить это значение (переход к разделу реализации "Заполнение массива").

Двигаясь от конца массива take к его началу, будем уменьшать поочередно каждую его ненулевую компоненту. Разумеется, при этом будут возникать изменения в хвосте этого массива; эти изменения мы будем вносить туда в обычной последовательности "от начала к концу".

Таким образом, наши массивы последовательно примут следующие значения (некоторые непринципиальные шаги опущены):

ves -        
take          
dif          
ves -        
take          
dif          
ves -        
take          
dif          
ves -        
take          
dif          
ves -        
take          
dif          
ves -        
take          
dif          
ves -        
take          
dif          
ves -        
take          
dif          
ves -        
take          
dif          
ves -        
take          
dif          
ves -        
take          
dif          
ves -        
take          
dif          

Итак, мы убедились в том, что найденное в самом начале значение переменной razn и было минимальным (найденные группы весов соответственно 25 + 11 = 36 и 11 + 9 + 9 + 5 + 5 = 39). Необходимо отметить, что из приведенных выше таблиц видно (см. шаг 5), что существует еще один способ разделить приведенный набор весов таким же оптимальным образом: (11 + 11 + 9 + 5 = 36 и 25 + 9 + 5 = 39). Найденная разница 39 - 36 = 3 и будет окончательным результатом, который программа сообщит пользователю.


Дата добавления: 2015-07-07; просмотров: 96 | Нарушение авторских прав


Читайте в этой же книге: Реализация алгоритма УлШелл | Символы и строки | Представление множеств битовыми массивами | Описание файлов | Считывание из файла | Пробельные символы | Изменение реакции на ошибку | Вложенные операторы with | Совмещение в памяти | Процедурный тип данных |
<== предыдущая страница | следующая страница ==>
Операции| Статически выделяемая память

mybiblioteka.su - 2015-2024 год. (0.006 сек.)