7.2. Метод подъема
Метод относится к общему рецепту разработки алгоритмов. Его суть заключается в том, что процесс решения начинается с принятия начального предположения или построения начального решения задачи. Затем начинается движение вверх от начального уровня по направлению к уровням с лучшим решением. Когда достигается уровень, из которого дальнейшее продвижение вверх невозможно, процесс прекращается. Рассмотрим работу метода, на предыдущей задаче.
В задаче расстановки рабочих начальным решением будет какая-либо их расстановка по работам. Из множества вариантов начальной расстановки возьмем простейший вариант с равномерным распределением работников по работам kij = [K/N] для любых i и j, [] - целая часть числа. Далее оставшееся число работников K mod N распределяется по правилу один работник на работу с наибольшей трудоемкостью и, если их резерв не исчерпан, ищется следующая по трудоемкости работа, на которую ставится очередной работник. Процесс заканчивается, когда резерв работников исчерпан. В нашем примере после завершения процесса начальной расстановки сложится такая ситуация: k01=1, k02=2, k13=1, k24=2, k34=2, k14=1, k45=1, а длительности полных путей составят
T(I1) = t01 + t13 + t35 = 1/1 + 2/1 + 4/2 = 5,
T(I2) = t01 + t14 + t45 = 1/1 + 2/1 + 1/1 = 4,
T(I3) = t02 + t24 + t45 = 2/2 + 3/2 + 1/1 = 3,5.
Путь I1 является критическим путем. Далее организуется процесс восхождения от худшего к лучшему варианту. Для этого следует переместить одного работника с работы некритического пути на одну из работ критического пути. Если длительность критического пути уменьшилась, то процесс повторяется - работник перемещается на следующую работу этого пути, если – нет, то перемещается работник с другой работы некритического пути и т.д. Если ни одно из перемещений не приводит к улучшению результата, то алгоритм подъема завершает свою работу. Выбор работы критического пути, на которую перемещается работник с некритического пути, производится по критерию
.
Для Iкр= I1= {(0, 1), (1, 3), (3, 5)}, максимум достигается для работы (1, 3). Согласно начальному распределению, кандидатами на перемещение работника могут быть только работы (0,2) и (2,4), поскольку на других работах некритических путей имеется только по одному работнику и резерв для перемещения отсутствует. Произведя подъем, получим следующее распределение работников: k01=k02=k14=k45=1, k13=k24= k34=2, а длительности составят: T(I1)=4, T(I2)=4, T(I3)=4,5. Полученный результат является уровнем останова подъема, так как никакое другое перемещение не улучшает этот результат. Не во всех случаях метод подъема достигает оптимального результата.
- Введение в программирование и основы алгоритмизации
- 1.2. Понятие "правильной" программы
- 1.3. Надежность программного средства
- 1.4. Технология программирования как разработка надежных пс
- 1.5. Информатизация общества
- Тема 2 источники ошибок в программных средствах
- 2.1. Интеллектуальные возможности человека
- 2.2. Неправильный перевод как причина ошибок в пс
- 2.3. Модель перевода
- На каждом из этих шагов человек может совершить ошибку разной природы.
- 2.4. Основные пути борьбы с ошибками
- Тема 3 общие принципы разработки программных средств
- 3.1. Специфика разработки пс
- 3.2. Жизненный цикл пс
- 3.3. Понятие качества пс
- 3.4. Внешнего описания и его роль в обеспечении качества пс
- 3.5. Обеспечение надежности – основной мотив разработки пс
- 3.5. Борьба со сложностью систем и обеспечение точности перевода
- Тема 4 разработка структуры программы. Модульное и объектно-ориентированное программирование
- 4.1. Цель модульного программирования
- 4.2. Основные характеристики программного модуля
- 4.3. Методы разработки структуры программы
- 4.4. Объектно-ориентированное программирование
- 4.5. События и событийная модель
- Тема 5 Алгоритмизация и разработка программного модуля
- 5.1. Определение алгоритма
- Алгоритмизация - техника составления алгоритмов и программ для решения задач на эвм.
- 5.2. Изобразительные средства описания алгоритмов
- 5.3. Блок-схемы алгоритмов. Графические символы
- 5.4. Порядок разработки программного модуля
- 5.5. Структурное программирование
- 5.6. Пошаговая детализация и понятие о псевдокоде
- Тема 6 тестирование и отладка программного средства
- 6.1. Основные понятия
- 6.2. Принципы и виды отладки пс
- 6.3. Заповеди отладки пс
- 6.4. Автономная отладка пс
- Тема 7 Методы разработки алгоритмов
- 7.1. Метод частных целей
- 7.2. Метод подъема
- 7.3. Программирование с отходом назад
- Тема 8 Алгоритмы сортировки
- 8.1. Сортировка. Основные понятия
- 8.2. Пузырьковая сортировка
- 8.3. Сортировка с помощью дерева
- 8.4. Пирамидальная сортировка
- 8.5. Быстрая сортировка
- Тема 9 Алгоритмы поиска и перебора
- 9.1. Поиск. Основные понятия
- 9.2. Бинарный поиск
- 9.3. Поиск в сети
- Тема 10 Событийно-управляемое программирование на языке Visual Basic
- 10.1. Историческая справка
- 10.2. Основы Visual Basic
- Среда Windows: окна, события, сообщения
- Интерактивная разработка
- Интегрированная среда разработки
- 10.3. Формы и элементы управления
- Разработка и установка свойств формы
- События и методы формы
- Кнопки управления как основа выполнения действий
- 10.4. Элементы управления пользователя
- Флажки и переключатели
- Другие стандартные элементы управления
- 10.5. Фокус. Последовательность переходов. Меню Фокус
- Основы меню
- Контекстные меню
- Редактор меню
- Подсказки пользователю с помощью диалога
- Тема 11 Управление проектами
- 11.1. Работа с проектом и его структура
- 11.2. Работа с несколькими проектами
- 11.4. Установка параметров проекта
- 11.5. Дополнения и мастера
- Тема 12 Управляющие конструкции
- 12.1. Конструкции принятия решения (ветвление)
- 12.2. Циклы
- 12.3. Работа со структурами управления и досрочный выход из них
- Тема 13 Структура приложения. Техника написания кода
- 13.1. Структура приложения
- 13.2. Как работает событийное приложение
- 13.3. До начала кодирования
- 13.4. Техника написания кода
- 13.5. Автоматизация написания программы