Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теорія алгоритмів 1. Вступ до курсу.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
290.08 Кб
Скачать

Тема 2: «Прикладна теорія алгоритмів»

              1. Основні питання розробки алгоритмів.

              2. Основні інформаційні структури даних.

              3. Методи розробки алгоритмів.

У загальному вигляді можна виділити 2 стадії розробки алгоритму:

                1. Розробка наближеного алгоритму.

                2. Деталізація (розробка детального алгоритму).

На першій стадії відбувається розробка наближеного алгоритму, що орієнтований на людину, яка його створює. Визначення цілей, приблизного плану плану дій для досягнення поставлених цілей. Як правило, такий наближений алгоритм зрозумілий тільки творцю.

На другій стадії відбувається деталізація алгоритму з врахуванням специфіки середовища та об'єкта, що виконує вибір середовища та об'єктів за допомогою яких алгоритм буде створений. Тобто алгоритм буде представлений у формі, зрозумілій тому, хто виконує ці дії.

Типові етапи розробки:

                  1. Постановка задачі (опис загального задуму алгоритму).

                  2. Формалізація задачі (математичне формулювання та вибір розв'язку).

                  3. Розробка узагальненої схеми алгоритму.

                  4. Розробка блоків алгоритму.

                  5. З'єднання блоків в єдиний алгоритм.

                  6. Визначення можливості використання стандартних блоків, які сприяють зниженню

трудомісткості розв'язку задачі.

                  1. Розробка блоків логічного контролю.

                  2. Оптимізація схеми алгоритму.

                  3. Уточнення параметрів.

10. Оцінка машинного ресурсу.

На першому етапі формулюється мета постановки і детально описується її зміст. Також аналізується характер і сутність усіх величин, що використовуються для розв'язку задачі а також умови, при яких дана задача розв'язується. Коректність постановки задачі є важливою, бо від неї залежить наступний етап. Без чіткого формулювання проблеми і мети дослідження робота не має сенсу. В загальному випадку мета системи полягає у досягненні найбільш ефективним (оптимальним) способом бажаного стану з урахуванням реальних обмежень. Вважаємо, що мета розв'язку задачі відома. Потрібно врахувати:

                    1. Не всяку мету можна досягнути.

                    2. Чи можна досягнути мету в рамках поставлених обмежень?

На даному етапі достатньо уваги потрібно приділити відношенням між елементами системи, що реально існують, проблемам, а також причинам, що породжують дані проблеми.

Проблеми можуть бути:

  1. Простими (не потребують дослідження*.

  2. Складними (потребують спеціальних досліджень (пояснення їх причин)).

  3. Дуже складними (можливо потребують зміни фундаментальних концепцій системи

або розробки нового методологічного апарату засобів, для розуміння проблеми).

При аналізі проблеми можливі такі варі-анти:

    1. Проблема нова, раніше не відома.

    2. Проблема відома раніше, але рішення по ній не приймалось.

    3. Рішення по проблемі приймались, але були невірні.

    4. Рішення були вірні, але не виконані.

В залежності від варіанту розроблюються дії, спираючись на розуміння проблеми, та приймаються рішення для розв'язання проблеми. У зв'язку з необхідністю розробляти структуру алгоритму і данні, одночасно виникає поняття абстрактного типу даних.

Абстрактний тип даних, на відміну від конкретного, фіксує тільки назву типу (неформально) і опис того набору інформації, за допомогою якого дозволяється обробляти дані визначеного типу. Початкова класифікація алгоритму використовує операції деякого абстрактного типу даних.

Дані діляться на вхідні, проміжні та вихідні. Специфіка вхідних і вихідних даних полягає у тому, що з ними має справу не тільки алгоритм, а й користувач. Тому розрізняють 2 форми подачі даних: внутрішню і зовнішню. Основна вимога до зовнішньої полягає у її максимальній зручності, зрозумілості і природності для користувача, щоб він міг досить легко підготувати дані для вводу та оцінити результат роботи системи для вихідних даних.

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

Зауваження: вибір внутрішнього представлення даних визначається головним чином ефективністю алгоритму, який необхідно побудувати для розв'язку задач.

На другому етапі (математичному) опис алгоритму та вибір розв'язку задачі виконується його математичний опис, тобто встановлюються логіко-математичні залежності між вхідними і вихідними даними. Для задач, розв'язок яких необхідно подати у числовій формі, необхідно розробити метод розв'язків, а для нечислових задач - схему розв'язку у вигляді однозначно зрозумілої послідовності логічних операцій.

На третьому етапі розробляється узагальнена схема роботи алгоритму, що визначає загальний порядок дій процесу розв'язку задачі без будь-яких уточнюючих деталей. Узагальнений алгоритм наглядно демонструє принцип розв'язку задачі, приховуючи при цьому конкретні деталі конкретної реалізації взаємодії окремих блоків алгоритму. Узагальнена схема роботи алгоритму допомагає побачити загальний напрямок роботи алгоритму.

На четвертому етапі відбувається розробка окремих блоків алгоритму.

На п'ятому етапі відбувається з'єднання окремих блоків в єдиний алгоритм.

На шостому етапі відбувається визначення можливості використання стандартних блоків, які сприяють трудомісткості розв'язку задач. Стандартні модулі зазвичай працюють краще.

На сьомому етапі відбувається розробка блоків логічного контролю.

На восьмому етапі відбувається оптимізація схеми алгоритму на основі додаткових досліджень предметної області та специфіки задачі розв'язування.

Існує ряд важливих практичних причин, що спонукають займатися аналізом алгоритму. Однією з найбільш важливих є необхідність отримати отримання оцінок для обсягу пам'яті і часу роботи, що необхідні алгоритму для успішної обробки даних. Хороший аналіз дозволить визначити вузькі місця в роботі алгоритму, покращити його, а іноді розробити більш ефективний. Але, як правило, більш ефективний алгоритм приводить до програмного коду більшого розміру і потребує більше зусиль для розробки й обрахування.

Основні інформаційні структури даних

При розробці алгоритмів важливим питанням є визначення на абстрактному рівні тих структурних типів даних, які використовуються при його реалізації. Визначення деякого абстрактного структурного типу даних передбачає фіксацію всіх операцій, які можна використовувати для обробки значень даного типу і всіх типів тих компонентів структурного типу, які є аргументом або результатами зазначених операцій.

Перший тип - тип списків. Кожен тип списків визначає множину скінчених послідовностей елементів, що мають заданий базисний тип. Число елементів списку називають його довжиною. Список, що не має елементів, називають пустим. Для списку визначенні поняття початкового, кінцевого і поточною елементів, а також наступного і попереднього по відношенню до поточного. Зауваження: поточний елемент - це той єдиний елемент в списку, який на даний момент доступний для обробки. Базисними операціями над списками є:

      1. Створення пустого списку.

      2. Перевірка списку на пустоту.

      3. Перевірка існування попереднього або наступного елемента.

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

      5. Вибір значення поточного елемента.

      6. Заміна значення поточного елемента на деяке значення базисного типу.

7 Знищення поточного елемента зі списку з ізнттям в якості поточного попереднього або наступного елемента.

8. Занесення деякого значення базисного типу в список перед або після поточного елемента.

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

        1. Створення пустої черги.

        2. Перевірка на пустоту.

        3. Вибірка першого елемента черги з одночасною його заміною.

        4. Занесення деякого значення базисного типу в якості нового останнього елемента черги.

Тип стеків. Кожен тип стеків визначає скінчену послідовність елементів, що мають заданий базисний тип. Число елементів стека називають його глибиною. В різних стеках одного типу кількість елементів може бути різною. Стек, що не містить елементів, називають пустим. Для непустого стека визначено лон/гт: вор;. ;ього елемента (він міститься у стеку останнім). Набір базисних операцій над стеками:

          1. Створення пустого стека.

          2. Перевірка стека на пустоту.

          3. Вибір верхнього елемента стека без його видалення або з його видаленням.

          4. Внесення деякого значення базисного типу в якості нового елемента стеку.

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

Базові операції. Набір базисних операцій:

1. Створення тривіального дерева по елементу базисного типу та вибірка або заміна кореня дерева, або списку його піддерев, а також всіх операцій, що є базисними для списку піддерев.

Наприклад, для статичного дерева сплсок (л.л.иіих операцій може складатися з: 1)взяття в якості першого елемента списку, 2)переходу до наступного за поточним елементом в списку, 3)перевірка, чи не є поточний елемент останнім у списку, 4)доступ до поточного елементу у списку.

Тип графів. Тип графів з деякими базисними типами Т і О визначає множину структур, що складається зі списку елементів типу Т, що називають вершинами, і списку елементів типу О, що називають ребрами. Для кожної вершини визначають список ребер, що входять в дану вершину, а для кожного ребра - список вершин, які це ребро з'єднує.

Тип орграфів. Тип орієнтованих графів з деякими базисними типами Т і О визначає множину структур, що складаються із списку елементів типу Т, що називають вершинами, і списку елементів типу О., що називають дугами. Для кожної вершини існує список всіх дуг, що входять в дану вершину, і тих, що виходять з даної вершини. Граф, ще складається з пустих списків вершин і дуг називають пустим, а граф, що складається з однієї вершини і без дуг - тривіальним. Набір базисних операцій дозволяє створити пустий граф і містить базисні операції для роботи з любим з його списків.

Методи розробки алгоритмів

Універсального методу розробки алгоритму не існує. Кожний із методів має свої переваги та недоліки, однак віддати перевагу одному з методів не можна. Розробка алгоритму - робота творча і в кожному окремому випадку вимагає використання конкретних підходів та методів. Немає сенсу розробляти алгоритми для розв'язку тих задач, для яких ця проблема вже вирішена. В багатьох випадках та чи інша задача може бути розв'язана декількома способами. Вибір методу розв'язку задачі відбувається за наступними критеріями:

            1. Забезпечення оптимального часу розв'язку задачі.

            2. Забезпечення оптимального використання ресурсів.

            3. Забезпечення необхідної точності обчислень.

сі) Мінімальні вартісні затрати.

е) Можливість використання стандартних підпрограм

В подальшому при розробці постановки задачі вибирається найбільш раціональний спосіб її розв'язку. Зауваження: збільшення складності предметної області приводить до збільшення складності задач, що необхідно розв'язувати в даній предметній області і як наслідок ускладнюється алгоритм розв'язку. Збільшується складність розуміння процесу роботи алгоритму, а ще складніше вносити в них зміни або виявляти помилки. Тому розроблено ряд методик, використання яких зменшує ймовірність помилок в програмі, а відповідно й в алгоритмах, спрощує розуміння та полегшує модифікацію. До таких методик відноситься в першу чергу структурне програмування. Його фундаментом є доведена теорема про структурованість. Ця теорема доводить, що наскільки складною була б задача, структурна схема відповідного алгоритму завжди може бути представлена у вигляді дуже обмеженого числа елементарних структур Для того, щоб написати будь-яку програму, необхідні:

              1. Оператор вводу.

              2. Оператор привласнення.

              3. Арифметичні оператори (додавання, віднімання).

              4. Умовні оператори.

              5. Оператор безумовного переходу (типу §о [о).

              6. Оператор виведення.

Мета структурного програмування - це вибір структури програми шляхом розбитгя базової задачі на окремі підзадачі. Програми (алгоритми) повинні мати просту структуру. Складні, заплутані алгоритми - недієздатні, їх тестування потребує великих затрат. Розробка алгоритму, що є чітким логічним процесом спрощується на кожному рівні крок за кроком. Потім в даному процесі застосовується наступний метод алгоритмізації - метод покрокового удосконалення (уточнення). Спочатку задача розглядається в цілому, виділяються тільки найбільш великі, значні її частини. Алгоритм, який регламентує порядок виконання цих частин описується в структурній формі не вдаючись до дрібних деталей. Потім від загальної структури переходять до окремих частин. Таким чином, розробка алгоритму складається з послідовності кроків у напрямку уточнення алгоритму.

Подальшим розвитком структурного програмування є модульне програмування. Головна ідея модульного програмування полягає у тому, що алгоритм може бути представлений у вигляді системи, що складається з окремих модулів. Кожен з модулів розглядається як самостійна, відносно незалежна частина програми, яка може містити набір даних і функцій, що доступні тільки для даного модуля. Модульне програмування дозволяє значно прискорити процес розробки як а/, горні му, гак і програми в цілому за рахунок залучення деяких механізмів одночасно. Крім того, модульне програмування дозволяє значно прискорити процес створення алгоритму за рахунок використання наперед розрахованих стандартних модулів.

Інший підхід - об'єктно-орієнтоване програмування.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]