- •Розділ 2. Задача та її аналіз
- •2.1. Етапи розв’язання задач:
- •2.1.1. Постановка задачі
- •2.1.2. Побудова моделі
- •2.1.3. Розробка алгоритму
- •2.1.4. Перевірка правильності алгоритму
- •2.1.5. Аналіз алгоритму і його складності
- •2.1.6. Реалізація алгоритму
- •2.1.7. Перевірка програми
- •2.1.8. Документація
- •2.2. Типи задач
- •2.3. Принцип декомпозиції
- •2.4. Логічна схема розрахунку
- •2.5. Методи розробки алгоритмів
- •2.5.1. Методи приватних цілей, підйому і відпрацювання назад
- •2.5.2. Евристики
- •2.5.3. Рекурсія
- •Заключні зауваження
2.3. Принцип декомпозиції
Це один із широко застосовуваних прийомів у технології програмування. Складна задача аналізується на змістовному рівні, де виявляється можливість розчленовування її на окремі підзадачі. Іноді це вдається зробити на етапі формалізації чи навіть у рамках пошуку численних методів. Далі кожна підзадача може виявитися настільки складною, що знову потрібно буде застосувати операцію декомпозиції. Мета цього прийому - одержати прості підзадачі, до яких можна застосувати відомі методи розв'язання чи ці методи досить легко розробити. Для ілюстрації методу декомпозиції розглянемо простий приклад.
Приклад.
З деякої фабрики В необхідно доставити в продовольчі магазини М1,М2,М3 і М4 продукцію. На схемі приведена основна інформація про можливі шляхи доставки продукції. Задача полягає в тому, щоб вибрати такий шлях перевезення, при якому витрати (часу, пального) будуть мінімальними.
Насамперед звернемо увагу на те, що замість реальних шляхів, що зв'язують магазини і фабрику, конкретного показника затрачуваних ресурсів використана абстрактна схема. У математиці це граф (більш точно - зв'язний неорієнтований граф), вершини якого - пункти доставки продукції, а шляхи, що зв'язують ці пункти, - ребра. Кожному ребру приписане число, що називається його довжиною.
Р
ис.
2.1. Схема маршрутів у задачі комівояжера
Має свою назву і сама задача подібного типу. Це задача комівояжера. Суть її в тому, що необхідно вибрати деякий маршрут пересування з початкового пункту Ф через усі пункти Мі так, щоб побувати у всіх n пунктах Mi (i=1,n) рівно один раз, повернутися у вихідний пункт Ф, затративши мінімум деякого ресурсу (часу, довжини шляху, енергії, вартості проїзду і т.п.).
Таким чином, у задачі потрібно встановити такий порядок пересування від пункту до пункту, при якому мінімізуються загальні витрати ресурсу. З вихідного пункту може бути n варіантів напрямків руху, з наступного пункту - n - 1 і т.д. Загальна кількість можливих варіантів n!, якщо витрати по маршрутах у прямому і зворотному напрямках різні. Кожен такий шлях на графі називається гамільтоновим контуром.
Існують різні математичні методи розв'язання подібних задач цілочисельного програмування (не плутайте з програмуванням для ЕОМ); галузей і границь (можна використовувати і метод Монте-Карло, заснований на випадковому пошуку розв'язку). У даному випадку будемо розглядати не самі методи, а загальну ідею розвязання комбінаторної задачі. При малому n можна використовувати прийом простого перебору всіх припустимих варіантів маршрутів з оцінкою витрат ресурсу по кожному з них і вибору того, у якого ці витрати мінімальні.
У такому випадку розв'язок задачі розпадається на три послідовні самостійні підзадачі:
I) формування всіх n! гамільтонових контурів - чисто комбінаторна задача;
2) визначення значення витрат ресурсу по кожному маршруті - гамільтоновому контуру - обчислювальна задача;
З) вибір із усіх значень витрат ресурсу мінімального - задача сортування.
Для кожної підзадачі можна знайти досить ефективні методи, не погоджуючи їх один з одним. Це легше, ніж розглядати всю задачу комплексно, у єдності. Часто для кожної підзадачі чи більшості з них є готові алгоритми і навіть програма в програмному забезпеченні. Залишається використовувати принципи складального програмування, що конкретизує.
Розглянуті прийоми дозволяють усвідомити деякі загальні закономірності попередньої фази рішення задачі, її підготовки.
I. На підставі вихідного опису об'єкта, формулювання задачі і мети її рішення формуються вербальна (змістовна) модель, модельний об'єкт, більш спрощений у порівнянні з реальним. При цьому, як правило, використовуються схеми, креслення, малюнки, що дозволяють більш наочно представити об'єкт, підкреслити його істотні параметри, ознаки і характеристики, виявити особливості, позбутися другорядних моментів і факторів, що заважають.
На цій стадії починається процес абстрагування. Реальний колодязь - круглий циліндр; метри (сажні, аршини) - просто одиниця довжини; тичини - лінії на схемі; місце перехрещування - крапка перетинання; реальні дороги, що зв'язують магазина і фабрику, - прямі лінії між крапками на схемі; бензин - ресурс і т.п.
2. Подальший процес абстрагування повинний дати можливість визначити розділ математики (алгебру, геометрію, диференціальні рівняння, матриці, теорію графів, алгебру логіки, числення предикатів), у рамках якого буде формуватися математична модель. Її одержання відноситься до творчого процесу. У своїй книзі "Як розвязувати задачу" Д.Пойа помітив, що ідея розвязання задачі "може з'являтися поступово чи вона може виникнути раптом в одну мить, після, здавалося б, безуспішних спроб і тривалих сумнівів..". Важко розраховувати на вдалу ідею, маючи слабке пізнання в предметі, і неможливо знайти таку ідею, не маючи ніяких пізнань".
3.
Пошук чисельних методів вимагає
детального аналізу математичної моделі,
що у цьому випадку стає об'єктом, а сам
процес аналізу - розвязком
своєрідної задачі. І тут також необхідні
знання. Наприклад, при визначенні
чисельним методом застосовують формулу
Ньютона
4
.
На будь-якому етапі аналізу задачі, як
тільки з'являється можливість, необхідно
використовувати принцип декомпозиції.
Це дозволяє перейти до розвязку
більш простих, менш громіздких підзадач.
У багатьох випадках вдається відшукати
готові алгоритми і програми, до яких
застосовна форма складального чи
програмування, що конкретизує.
5. У результаті виконання перших трьох етапів схеми аналізу задачі формується своєрідний эадачний об'єкт у предметній області «програмування для ЕОМ». У цьому об'єкті досить повно повинні бути визначені:
мета розвязку задачі у вигляді шуканих результатів Dr,., що представляють собою кінцеву безліч елементів, абстрагованих від конкретного вихідного змісту;
вихідні дані DE значення яких відомі з умови задачі;
формальні співвідношення F, що зв'язують вихідні дані DE і шукані результати Dr у єдину сукупність, наділену структурою.
Є всі підстави називати подібний об'єкт задачним, оскільки розробка програми також є своєрідним видом розвязку задачі.
