Задача о наибольшей общей подпоследовательности

Автор работы: Пользователь скрыл имя, 01 Декабря 2011 в 00:54, курсовая работа

Описание

Подобно методу «разделяй и властвуй», динамическое программирование решает задачу, разбивая её на подзадачи и объединяя их решения. Алгоритмы типа «разделяй и властвуй» делят задачу на независимые подзадачи, эти подзадачи—на более мелкие подзадачи и так далее, а затем собирают решение основной задачи «снизу вверх». Динамическое программирование применимо тогда, когда подзадачи не являются независимыми, иными словами, когда у подзадач есть общие «подподзадачи». В этом случае алгоритм типа «разделяй и властвуй» будет делать лишнюю работу, решая одни и те же подподзадачи по нескольку раз. Алгоритм, основанный на динамическом программировании, решает каждую из подзадач единожды и запоминает ответы в специальной таблице. Это позволяет не вычислять заново ответ к уже встречавшейся подзадаче.
В типичном случае динамическое программирование применяется к задачам оптимизации. Примерами задач динамического программирования являются задача о перемножении матриц и задача о нахождении найбольшей общей подпоследовательности. Эти задачи и методы их решения будут рассмотрены в данной работе.

Содержание

ВСТУПЛЕНИЕ 5
1 МАТЕМАТИЧНА ПОСТАНОВКА ЗАДАЧІ 6
2 ПРИКЛАДИ ЗМІСТОВИХ ПОСТАНОВОК ЗАДАЧІ 8
3 АЛГОРИТМ РЕШЕНИЯ ЗАДАЧИ О ПЕРЕМНОЖЕНИИ МАТРИЦ 10
3.1 Метод північно-західного кута 12
3.2 Метод найменшого часу 13
3.3 Оцінка складності алгоритмів 14
4 ПРИКЛАДИ РОЗВ’ЯЗАННЯ ЗАДАЧ «ВРУЧНУ» 15
5 РОЗВ’ЯЗАННЯ ЗАДАЧІ З ДОПОМОГОЮ EXCEL 26
6 ПРОГРАМНА РЕАЛІЗАЦІЯ АЛГОРИТМУ 31
ВИСНОВОК 33
ПЕРЕЛІК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ 34
Додаток А 34
Лістинг програми 34

Работа состоит из  1 файл

ПЗ.doc

— 329.00 Кб (Скачать документ)

      Рисунок 4.1 - Початкові дані до задачі і допустимий розв’язок

      Діючи за алгоритмом, обираємо найбільший час, по якому здійснюються перевезення. Проаналізувавши таблицю, видно, що це комірка, в якій час перевезення  рівний 19. Тому потрібно її «розвантажити».

      Для розвантаження комірки, згідно алгоритму, потрібно використати комірку з  часом 2. Отже, в комірку в 3 рядку  і 3 стовпці, яка має час 4 додаємо 100 одиниць, так само в комірку  в 4 рядку і 2 стовпці, з часом 9 додаємо 100 одиниць, а в комірці, що в 4 рядку і 3 стовпці віднімаємо 100 одиниць. В результаті маємо повну розгрузку комірки з максимальним часом. Варто зазначити, що, якщо не чітко слідувати алгоритму, то можна побудувати і інший «розвантажувальний» цикл. Тобто, можна використати комірку не з часом 2, а останню комірку в лівому нижньому куті. Якби не повністю була «розвантажена» комірка з максимальним часом, то потрібно було використати саме останню комірку. Результат приведених дій наведений на рисунку 4.2

          Необхідність  продукції в пункті споживання
  3

200

8

0

4

0

15

0

200
  12

200

1

50

3

0

6

0

250
  20

0

19

0

4

300

8

0

300
  11

0

9

100

2

25

3

375

500
Кількість виготовленої продукції 400 150 325 375  

      Рисунок 4.2 - Результат першого «розвантаження»

      Далі  аналізуємо таблицю і помічаємо, що максимальний час 12 в комірці в другому рядку, першому стовпцю. Діючи за алгоритмом «розгрузки», знаходимо клітинку в останньому рядку і другому стовпцю. Мінімум рівний 100. Тому ми розвантажуємо тільки 100 одиниць. В комірках не може бути від’ємне значення. В комірку в другому рядку другого стовпця додаємо 100 одиниць і в комірку з часом 11 додаємо 100 одиниць. Оскільки комірка з поточним максимальним часом ще не повністю «розвантажена», шукаємо клітини, по яких можна побудувати цикл. Проаналізувавши таблицю це клітинка, яка іде відразу за попередньо обраною(в останньому рядку третього стовпця) і остання, оскільки клітина з часом 2 може розвантажити лише 25 одиниць продукції.

      Після виконання аналогічних до попередніх дій, отримаємо наступний результат, наведений в рисунок 4.3.

          Необхідність  продукції в пункті споживання
  3

200

8

0

4

0

15

0

200
  12

0

1

150

3

25

6

75

250
  20

0

19

0

4

300

8

0

300
  11

200

9

0

2

0

3

300

500
Кількість виготовленої продукції 400 150 325 375  

      Рисунок 4.3 - Розв’язання після другого «розвантаження»

      Для порівняння сформуємо початковий базис методом найменшого часу. Як видно з таблиці, максимальний час в початковій таблиці рівний 20. Якщо виконує людина процедуру «розвантаження»,  то вона відразу обере в останньому рядку комірку з часом 2(останній рядок, третій стовпець). Це дозволить відразу прийти до оптимального розв’язку. Комп’ютер діє за заданим алгоритмом. Тому він спочатку додасть в комірку праворуч від себе  з часом 19 150 одиниць, додасть в комірку вище себе з часом 12 також 150 одиниць і відніме в комірці з часом перевезення 1 150 одиниць. Потім решту 50 одиниць буде «розвантажувати», використовуючи комірку з часом 6. В результаті цієї операції, в базисі з’являються комірки з часом 12 і 19, які треба буде розвантажувати. Це є прикладом того, як, здавалося, кращий алгоритм отримання початкового базису дає більше ітерацій. Проілюструємо вище сказане з допомогою таблиці.

      На  рисунку 4.4 показаний початковий базис методом найменшого часу.

          Необхідність  продукції в пункті споживання
  3

200

8

0

4

0

15

0

200
  12

0

1

150

3

0

6

100

250
  20

200

19

0

4

0

8

100

300
  11

0

9

0

2

325

3

175

500
Кількість виготовленої продукції 400 150 325 375  

      Рисунок 4.4 - Початковий базис, отриманий методом найменшого часу.

      На  рисунку 4.5 показаний результат після «розгрузки».

          Необхідність продукції в пункті споживання
  3

200

8

0

4

0

15

0

200
  12

200

1

0

3

0

6

50

250
  20

0

19

150

4

0

8

150

300
  11

0

9

0

2

325

3

175

500
Кількість виготовленої продукції 400 150 325 375  

      Рисунок 4.5 - Результат після першої розгрузки.

      Розвантажуємо комірку з часом 19. Результат наведений на рисунку 4.6

          Необхідність  продукції в пункті споживання
  3

200

8

0

4

0

15

0

200
  12

200

1

50

3

0

6

0

250
  20

0

19

0

4

100

8

200

300
  11

0

9

100

2

225

3

175

500
Кількість виготовленої продукції 400 150 325 375  

      Рисунок 4.6. «Розвантаження» комірки з часом 19

      Далі  розвантажуємо комірку з часом 12 і отримуємо остаточний розв’язок, наведений на рисунку 4.7.

          Необхідність  продукції в пункті споживання
  3

200

8

0

4

0

15

0

200
  12

0

1

150

3

100

6

0

250
  20

0

19

0

4

100

8

200

300
  11

200

9

0

2

125

3

175

500
Кількість виготовленої продукції 400 150 325 375  

      Рисунок 4.7 - Остаточний розв’язок

      Приклад 2. Чотири постачальники з вантажем відповідно з 550, 250, 300, 100 одиниць можуть забезпечити споживачів, які потребують відповідно 400, 200, 150, 450 одиниць цих вантажів. Знайти мінімальний час для здійснення цих перевезень, якщо матриця часу має вигляд,  показаний на рисунку 4.8.

1 7 3 2
6 9 8 1
2 3 2 7
1 2 4 1

Информация о работе Задача о наибольшей общей подпоследовательности