
Lect 6_Algorithms_fin.ppt
- Количество слайдов: 72
1 Вступ в комп’ютерні науки Лекція 6: Алгоритми Лектор: проф. Анатолій Саченко
1. Концепція алгоритму Як було сказано раніше, перш ніж комп'ютер може виконувати завдання, повинен існувати алгоритм, який вказує що за чим виконувати; отже, вивчення алгоритмів є наріжним каменем інформатики Багато дослідників вважають, що кожен вид діяльності людського розуму, у тому числі уява, творчість і прийняття рішень, насправді є результатом виконання алгоритму - штучним інтелектом, який буде розглядатись в лекції 11 Машинний цикл, за яким працює процесор є не більше ніж простим алгоритмом: 3
Рисунок 6. 1 Визначення алгоритму 4 Алгоритмом є упорядкований набір безлічі однозначних кроків, які виконуються, та визначають завершення процесу. Зауважимо, що дане визначення вимагає, щоб кроки в алгоритмі були упорядкованими; це означає, що з кроків алгоритму повинна бути добре складена структура з точки зору порядку їх виконання. Це не означає, що кроки повинні бути виконані в послідовності, яка починається з першого кроку, за яким слідує другий, і так далі. Деякі алгоритми, відомі як паралельні алгоритми, що містять більше однієї послідовності кроків, кожен з яких призначений для виконання на різних процесорах
1. Концепція алгоритму (прод. ) Іншою вимогою, яка пред'являється до визначення на рис. 6. 1 є те, що кроки в алгоритмі мають бути однозначними. Це означає, що під час виконання алгоритму, інформація про стан процесу має бути достатньою, щоб визначити однозначно і повністю дії, необхідні для кожного кроку. Іншими словами, виконання кожного кроку алгоритму не вимагає наявності творчих навичок. Навпаки, єдиною вимогою є здатність слідувати за вказівками. 5
1. Концепція алгоритму (прод. ) 6 Визначення на рис. 6. 1 також вимагає, вказання в алгоритмі процесу завершення, тобто виконання алгоритму має дійти до кінця. Походження цієї вимоги знаходиться в теоретичній інформатиці, де основною метою є відповідь на такі питання як «Що таке кінцеве обмеження алгоритмів і машин? » Тут інформатика прагне розрізняти проблеми, відповіді на які можна знайти алгоритмічно, і проблеми, відповіді на які лежать за межами можливостей алгоритмічних систем.
1. Концепція алгоритму (прод. ) 7 Однак існують важливі програми для нескінченних процесів, напр. моніторинг життєво-важливих функцій пацієнта в лікарні чи підтримки висоти літака в польоті. Багато хто стверджує, що ці заяви пов'язані лише з повторенням алгоритмів, кожен з яких досягає кінця, а потім автоматично повторюється. У будь-якому разі, результатом є те, що термін алгоритм часто використовується в прикладах або неформальній обстановці з посиланням на набір кроків, які не обов'язково визначають завершення процесів. Таким прикладом є „алгоритм“ безконечного ділення одиниці на трійку, який не визначає кінця даного процесу. Технічно, такі випадки є зловживанням терміном.
1. Концепція алгоритму (прод. ) 8 Важливо також наголосити на відмінностях між алгоритмом та його представленням це відмінність, аналогічна до відмінності між історією та книжкою. Історія є абстрактним вимислом, або концепцією за своєю природою; книжка є фізичним представленням історії. Якщо книжка перекладається на іншу мову або публікується у іншому форматі, вона навряд чи змінює саму історію — яка залишається незмінною. Аналогічно і алгоритм є узагальненням яке
1. Концепція алгоритму (прод. ) 9 Один і той самий алгоритм може бути представлений по різному. Наприклад, алгоритм перетворення показів температури за Цельсієм у градуси Фаренгейта традиційно представляється у вигляді алгебраїчної формули F = (%)C + 32 Однак його можна представити інструкцією: Помножте показники температури в градусах Цельсія на%, а потім додайте 32 Або навіть у вигляді електронної схеми. У будь-якому випадку основний алгоритм залишається без змін, відрізняються тільки його представлення
1. Концепція алгоритму (прод. ) 10 Також слід пояснити різницю між двома іншими пов'язаними поняттями — програмою та процесом. Програма є представленням алгоритму. Насправді, в комп'ютерній спільноті термін програма зазвичай відноситься до формального представлення алгоритму, розробленого для деякого комп'ютерного застосування. Ми визначили процес у 4 лекції, як діяльність, що пов'язана із виконанням програми. Проте зауважимо, що для виконання програми є виконанням алгоритму, який представлений програмою, а тому процес можна еквівалентно визначити як діяльність, пов’язану із виконанням алгоритму.
2. Представлення алгоритму вимагає деякої форми мови. Для людини це може бути традиційна природна мова (англійська, російська, японська) або, можливо, мова фотографії, як показано на рис. 6. 2, в якому описується алгоритм складання птаха з квадратного аркуша паперу. Однак, такі природні канали зв'язку можуть привести до виникнення непорозумінь, інколи через термінологію, оскільки допускається наявність більш ніж одного 11
Рисунок 6. 2 Складання птаха з квадратного аркушу паперу 12
2. Представлення алгоритму - Примітиви Мало студентів змогли б успішно зібрати птаха згідно інструкцій рис. 6. 2, однак у практиків мистецтва орігамі скоріш за все не виникло б жодних труднощів Іншими словами, проблеми зв’язку виникають, коли мова, яка використовується для представлення алгоритму не є точно визначеною або коли інформація не надається досить докладно. Інформатика підходить до цієї проблеми шляхом створення чітко визначеного набору складових блоків, з яких можна побудувати поданий алгоритм. Такий блок називається примітивом. Наявність точних визначень цих примітивів усуває багато проблем неоднозначності, і вимагає від алгоритмів, які будуть описані в термінах цих примітивів встановлювати єдиний рівень деталізації. 13
Примітиви 14 Колекція примітивів, а також набір правил щодо, об’єднання примітивів, які можуть використовуватися для представлення складних ідей являє собою мову програмування. Кожен примітив складається з двох частин: - синтаксису - семантики. Синтаксис відноситься до символьного представлення примітиву, а семантика відноситься до значення примітиву. Синтаксис „повітря“ складається з семи символів, у той час, як семантика є газоподібною речовиною, що оточує світ. Як приклад, на рис. 6. 3 представлено деякі з примітивів, що використовуються в орігамі.
Рисунок 6. 3 Примітиви орігамі 15
Примітиви у Для отримання колекції примітивів, що будуть використовуватися при представленні алгоритмів для комп'ютерного виконання, ми повинні перетворити окремі інструкції, які машина може виконувати. Якщо алгоритм, описаний на такому рівні деталізації, тоді ми безумовно, маємо програму, яка підходить для виконання на даній машині. Тим не менш, представлення алгоритму на цьому рівні є складним, а тому, використовують набір примітивів „вищого рівня“, кожен з яких є абстрактним інструментом, який базується на примітивах більш низького рівня, які представлені мовою машини. Результатом є мови формального програмування, в яких алгоритми можуть бути виражені на концептуально вищому рівні, ніж на машинній мові. 16
2. Представлення алгоритму - Псевдокод 17 Можна відмовитись від мови формального програмування на користь більш інтуїтивної системи позначень, відомої як псевдокод. Загалом, псевдокод — система запису, в якій ідеї можуть бути виражені неофіційно в ході процесу розробки алгоритму. Одним із способів отримання псевдокоду є просте послаблення правил формальної мови, на якій повинен бути вираженим остаточний варіант алгоритму. Такий підхід зазвичай застосовується коли відома кінцева мова програмування. У таких випадках псевдокод використовується під час ранніх стадій розробки програми та складається з синтаксно-семантичних структур, які є аналогічними, однак менш формальними, ніж, ті, які використовуються кінцевою мовою
задач Створення програми складається з двох різних дій-створення алгоритму її роботи і представлення цього алгоритму у виді програми Створити алгоритм-означає знайти метод рішення задачі Тобто, щоб зрозуміти, як створюються алгоритми, необхідно зрозуміти процес рішення задач Вміння рішати задачі в значній степені є професійним навичкою, яку треба розвивати, а не точною наукою, яку можна вивчити Саме рішення задач є скоріше мистецтвом, чим наукою 18
рішень задач 19 Як доказ мистецького характеру вирішення задач може бути факт, що досить нечітке визначення фаз рішення задач, запропонованих математиком Г. Поліа в 1945 році, залишається тими основними принципами, на яких і сьогодні базується навчання навичкам рішення задач: Етап 1. Зрозуміти суть задачі Етап 2. Розробити план щодо вирішення задачі. Етап 3. Виконати план. Етап 4. Оцінити точність рішення, а також його потенціал як інструмент для вирішення інших задач.
3. Створення алгоритму – Теорія рішень задач 20 У перекладі на контексті розробки програми, ці фази виглядають як: Етап 1. Зрозуміти суть задачі Етап 2. Запропонувати ідею яка алгоритмічна процедура може вирішити цю задачу Етап 3. Розробити алгоритм і представити його у вигляді програми. Етап 4. Оцінити точність програми та її потенціал як інструмент для вирішення інших задач.
списку Поліа 21 Представивши список Поліа, ми повинні підкреслити, що ці фази не кроки, яких необхідно дотримуватися при спробі вирішити проблему, а це швидше фази, які будуть завершені протягом процесу рішення. Ключове слово в список, представлений Полі проходження. Ви не вирішують проблеминаступне. Швидше за все, вирішити проблему, необхідно взяти на себе ініціативу і свинець. Якщо підійти до вирішення проблеми в настроїзображується "Тепер я закінчив етап 1, пора перейти до фази 2", ви навряд чи буде успішним. Однак, якщо ви стали пов'язані з проблемою і вкінцевому підсумку вирішити її, ви, швидше за все,
Аналіз списку Поліа 22 Ще одним важливим спостереженням є те, що фази Полі не обов'язково завершені у певній послідовності. Успішно вирішувати проблеми часто починаються розробці стратегій для вирішення проблеми (фаза 2), перш ніж сама проблема цілком зрозумілі (Фаза 1). Тоді, якщо ці стратегії не працюють (під час фази 3 або 4), потенціал вирішувати проблеми на буває більш глибоке розуміння складності проблеми, і з цим більш глибоке розуміння, може повернутися до форми, і, сподіваюся, більш успішних стратегій.
Приклад задачі 23 Як приклад, розглянемо наступну задачу: Особа звинувачується у завдання визначення у віці від трьох чоловік Б дітей. B каже, що твір віків дитячих 36. Після розгляду цього належне, відповідає, щозза іншого не потрібно, тому що B розповідає суму віку дітей. Знову ж, відповідає, що інший з-за необхідності, так що B повідомляє, що старша дитина грає на фортепіано. Почувши це пов'язано, розповідає B у віці від трьох дітей. Скільки тобі років троє дітей?
24 Перша підказка дано в тому, що продукт віці дитячий 36. Це означає, що трійка представляють три віки єодним з тих, перераховані на малюнку 5. 5 (а). Наступна підказка являє собою суму бажаного трійки. Ми не сказали, що ця сума, але ми сказали, що цієї інформації недостатньо для ізолюватиправильний по трійний; Тому бажаний потрійний повинен бути один, сума яких з'являється принаймні двічі в таблиціна малюнку 5. 5 (б). Але тільки трійки з'являються на малюнку 5. 5 (б)з однаковими сумами є (1, 6, 6) і (2, 2, 9), обидва з яких виробляють сумі 13. Це інформації, наявної на момент останньої підказки дається.
Приклад задачі Саме в цей момент, що ми, нарешті, зрозуміти значення останньої підказки. Це не має нічого спільного згрою на фортепіано; скоріше, це те, що є старша дитина. Це виключає трійка (1, 6, 6), що дозволить а нам зробити висновок, що вік дітей є 2, 2 і 9. Це виключає трійка (1, 6, 6), що дозволить а нам зробити висновок, що вік дітей є 2, 2 і 9. У цьому випадку, то, це не поки ми не спроба реалізувати наші плани щодо вирішення проблеми (фаза 3), що ми отримуємо повне розуміння проблеми (фаза 1). Якби ми наполягали на завершенні етапу 1, перш ніж продовжити, ми, ймовірно, ніколи не знайшли віку дітей. Такі порушення в процесі вирішення проблем мають основне значення для труднощами в розробці системних підходів до вирішення 25
Рисунок 6. 5 Рішення проблеми 26
Метод покрокового уточнення Ще один підхід до отримання ногу у двері, є застосування покрокового уточнення, які в основному техніку не намагається підкорити весь завдання (у всіх його деталях) одночасно. Скоріше, покрокового уточнення пропонує, щоб спочатку поглянути на проблему підрукою, з точки зору кількох підзадач. Ідея полягає в тому, розбивши вихідної завдання на підзадачі, один в стані підійти до спільним рішенням з точки зору кроків, кожен з яких вирішується легше, ніж вся вихідназадача. У свою чергу, пропонує покрокового уточнення, що ці кроки можна розкласти набільш дрібні кроки, і ці дрібні кроки розбити на ще дрібніші, поки вся задача звелася доколекції легко вирішуються підзадачі. 27
28 У світлі цього, по етапно уточнення зверху вниз методології в тому, що вона просувається від загального до приватного. З іншого боку, знизу вгору методологіїпрогресує від часткового до загального. Хоча контрастних по теорії, два підходи часто доповнюють один одного у творчому вирішенні проблеми. Розкладання задачу, запропоновану зверхувниз м етодологію покрокового уточнення частокерують ся інтуїцією вирішувати проблеми, якіможуть пра цювати в режимі знизу вгору.
29 Зверху вниз методологію покрокового уточнення суті організаційним інструментом якого рішення проблем атрибути є наслідками цієї організації. Давно важливо методології проектування вспівтоваристві обробки даних, де розвиток великих програмних систем включає в себе значні організаційні компоненти. Але, як ми дізнаємося в лекції 8, великих програмних систем все частіше будується шляхом об'єднання збірних компонентів - підхід, який за своєю суттю знизу вгору. Таким чином, і зверху вниз і знизу вгору методології залишаються важливими інструментами в області комп'ютерної науки.
Метод покрокового уточнення 30 Важливість збереження такої широкої перспективи це підтверджується тим фактом, що залучення упереджених думок і попередньо відібрані інструменти для вирішення проблем, завдання може іноді маски простоті проблеми. Вік дітей проблеми обговорювалися раніше в цій лекції є прекрасним прикладом цього явища. Студенти алгебри незмінно підійти до проблеми, як систему рівнянь, підхід, який веде в глухий кут і часто пастки буде вирішувати проблеми, вважаючи, що інформація є не достатньою для вирішення проблеми.
послідовного пошуку 31 У цьому розділі ми розглянемо ітераційні структури, в яких набір інструкцій повторюється в циклі чином. Розглянемо завдання пошуку в списку для входження певного цільового значення. Ми хочемо розробити алгоритм, який визначає, чи буде це значення у списку. Якщо значення вказано в списку, мивважаємо пошук успіх, в іншому випадку ми вважаємо, що невдачі. Ми припускаємо, що список сортується за певним правилом для замовлення її елементів. Наприклад, якщо список є списком імен, миприпускаємо, прізвища яких вказані в алфавітному порядку, або якщо списокскладається з числових значень, миприпускаємо, її елементи з'являються впорядку зростання величини.
алгоритм послідовного пошуку 32 Щоб отримувати наші ногу в двері, ми уявляємо, як ми могли б шукати гостьовий список, можливо, 20 записи для певного імені. У цих умовах ми могли б сканувати список з самого початку, порівнюючи кожен запис з ім'ям мети. Якщо ми знаходимо ім'я мети, пошук закінчується, як успіх. Однак, якщо ми не досягнемо кінця списку, не знаходячи цільового значення, наш пошук закінчується, як провал. Справді, якщо ми не досягнемо ім'я більше (за алфавітом) ім'я мети, не знайшовши мети, наш пошук закінчується, як провал.
алгоритм послідовного пошуку 33 Пам'ятайте, що список в алфавітному порядку, тому що йдуть ім'я більше, ніж ім'я мети означає, що мета не з'являється в списку. Таким чином, наше загальне уявлення є продовження пошуку за списком до тих пір, як є кілька імен, щоб бути розслідувані, а ім'я мети більше, ніж ім'я в даний часрозглядається. У нашому псевдокоді цей процес можна представити у вигляді Виберіть перший елемент у списку, як Test. Entry. while (Target. Value > Test. Entry and there remain entries to be considered) do (Select the next entry in the list as Test. Entry)
алгоритм послідовного пошуку 34 Після припинення цього в той час як структура, одного з двох умов буде істинним: або цільове значення було встановлено або цільове значення не знаходиться в списку. У будь-якому випадку ми можемо виявити успішного пошуку шляхом порівняння тест в'їзд цільовим значенням. Якщо вони рівні, пошук був успішним. Таким чином, ми додамо заяву if (Target. Value = Test. Entry) then (Declare the search a success. ) else (Declare the search a failure. ) до кінця нашого псевдокодрутини.
35 алгоритм послідовного пошуку Нарешті, зауважимо, що перша заява в нашу рутину, яка вибирає перший запис у списку в якості тест-запис, заснований на припущенні, що список у питанні міститься хоча б один запис. Ми могли б причини, що це безпечне припущення, але про всяк випадок, ми можемо позиціонувати наш звичайний, як інший варіант заяви if (List empty) then (Declare search a failure. ) else (. . . ) Це призводить до процедури показано на
36 алгоритм послідовного пошуку Зауважимо, що ця процедура може бути використана всередині інших процедур за допомогою твердження, такі як Застосувати процедуру пошукув списку пасажирів Даррел Бейкер використанням в якості цільового значення. Щоб дізнатися, Даррел Бейкер пасажирських і Застосувати процедуру пошуку в списку інгредієнтів використанням мускатний горіх в якості цільового значення. Щоб дізнатися, мускатний горіх з'явиться в списку інгредієнтів. Таким чином, алгоритм представлений на малюнку 6. 6 вважає записи в послідовному порядку, в якому вони з'являються у списку.
37 алгоритм послідовного пошуку З цієї причини алгоритм носить назву послідовного алгоритму пошуку. Через свою простоту, він часто використовується для коротких списків, або коли інші проблеми диктують її використання. Однак, у випадку довгих списків, послідовного пошуку не так ефективно, як інші методи (як ми скоро побачимо).
пошуку в псевдокоді procedure Search (List, Target. Value) if (List empty) then (Declare search a failure) else (Select the first entry in List to be Test. Entry; while (Target. Value > Test. Entry and there remain entries to be considered) do (Select the next entry in List as Test. Entry); if (Target. Value = Test. Entry) then (Declare search a success. ) else (Declare search a failure. ) ) end if 38
Управління циклами 39 Повторне використання інструкції або послідовності інструкцій є важливим алгоритмічної концепцією. Одним із способів реалізації такого повторення ітеративний структури, відомої як цикл, у якому колекція інструкцій, називаних тіло циклу, виконаний в повторюваних моди під керівництвом деякий контроль процесу. Типовий приклад можна знайти в послідовний алгоритм пошуку представлені на малюнку 6. 6. Тут ми використовуємо в той час як заяву для управління повторенням одного оператора Виберіть Наступний запис в список, як Test. Entry. Дійсно, в той час як ствердження. while (condition) do (body)
циклами 40 ілюструє концепцію циклу структури в тому, що його виконання сліди циклічність check the condition execute the body. . . check the condition. поки умова не виконується Як правило, використання структуру циклу виготовляє більш високу ступінь гнучкості, ніж були б отримані лише явним письмовій тіло кілька разів.
Управління циклами 41 Наприклад, щоб виконати посібник Add a drop of sulfuric acid. три рази, ми можемо написати: Add a drop of sulfuric acid. Але ми не можемо виробляти подібну послідовність, еквівалентну структуру циклу while (the p. H level is greater than 4) do (add a drop of sulfuric acid) бо ми не знаємо заздалегідь, скільки крапель кислоти буде необхідно.
Управління циклами 42 Сontrol з loop складається з трьох видів діяльності initialize, test, і modify (Мал. 6, 7), при наявності кожного з яких необхідні для успішного управління із зворотним зв'язком. Тest діяльність зобов'язання causing the termination з циклу процесу watching з condition що вказує закінчення повинно мати місце. Сondition відомий як termination condition. Саме для цілей даного випробування активності, які ми надаємо стані протягом кожного в той час як заяву нашого псевдокод.
діями 43
Управління циклами 44 У випадку while твердження, однак, Зазначене умова, при якому body of the loop повинна бути виконана - припинення умова заперечення стан, що входять в той час структури. Таким чином, в statementre. while (the p. H level is greater than 4) do (add a drop of sulfuric acid) termination condition є "рівень р. Н не більше 4", і в while заява на рис 6. 6, termination condition може бути сформульована (Target. Value ≤ Test. Entry) або (Є більше немає записів, що підлягають розгляду)
Управління циклами 45 Два інших заходів у контур управління забезпечення того, щоб умова завершення, в кінцевому рахунку відбудеться. Ініціалізації крок встановлює початкові умови, а також зміна кроку рухається в сторону цієї умови припинення стану. Наприклад, на малюнку 6. 6, ініціалізація відбувається в заяві попереднього в той час як заяву, де поточний запис Тест створений в якості першого елемента списку. Зміна кроком у цьому випадку насправді здійснюється в межах тіла циклу, де наші позиції інтересів (виявлених тест запис) переміщається ближче до кінця списку. Таким чином, виконавши крок ініціалізації, повторне застосування результатів модифікації кроком у припиненні стану, який досягнуто.
Управління циклами 46 Слід підкреслити, що ініціалізація і зміна запобіжного повинні привести до відповідних умовою припинення. Ця характеристика має вирішальне значення для правильного управління із зворотним зв'язком, і тому потрібно завжди перевіряти за свою присутність при проектуванні структуру циклу. Нездатність зробити такої оцінки може привести до помилок навіть у найпростіших випадках. Типовий приклад можна знайти у заявах Number ← 1; while (Number ≠ 6) do (Number ← Number + 2)
Управління циклами 47 Тут припинення умова "Number = 6". Але цінність Кількість ініціалізується на 1, а потім збільшується на 2 в модифікації крок. Таким чином, як циклів, значення, що привласнюються номер буде 1, 3, 5, 7, 9, і так далі, але не значення 6. У свою чергу, цикл ніколи не закінчиться. Порядок, в якому компоненти контуру управління виконуються може мати тонкі наслідки. Насправді, Є два спільних структур цикл, який відрізняється лише в цьому відношенні. Перший приклад нашим псевдокод заяву while (condition) do (activity) чия семантика представлена на малюнку 6. 8 у вигляді блок-схеми.
6. 8 Структура циклу while-do 48
6. 4 Ітераційні структури – Управління циклами Такі картки використовуються різні форми для подання окремих кроків і використовуйте стрілки, щоб вказати порядок дій. Різниця між формами вказує тип дії, що беруть участь у відповідний крок. Алмаз вказує рішення і прямокутник вказує довільний оператор або послідовність операторів. Зверніть увагу, що тест на припинення в той час структури відбувається, перш ніж тіло петлі виконується. На відміну від структури на малюнку 6, 9 запити, тіло циклу виконується перед тестом для припинення виконується. 49
Рис 6. 9 Структура циклу repeat-until 50
6. 4 Ітераційні структури – Управління циклами У цьому випадку тіло петлі завжди виконується хоча б один раз, тоді як в той час структури, тіло ніколи не виконуються, якщо припинення умова виконується в перший раз це перевірити. Ми собі синтаксичної форми repeat (activity) until (condition) у нашому псевдокоді представляти структуру. показаної на рис. 6. 9. Таким чином, твердження repeat (take a coin from your pocket) until (there are no coins in your pocket) передбачає, що є монети в кишені, на початку, але while (there is a coin in your pocket) do (take a coin from your pocket) цього не робить. 51
Управління циклами 52 Слідуючи термінології нашого псевдокод, ми зазвичай називаємо ці структури як структури в той час як цикл або структури повторити цикл. У більш загальному контексті ви можете почути в той час як структура циклу називається попереднє тестування петлі (так як тест для припинення виконується перед тілом виконується) і структури повторити цикл називають підсумковим циклу (з випробуванням для припинення виконується після тіла виконується).
6. 4 Ітераційні структури - сортування методом вставки В якості додаткового прикладу використання ітеративних структур, розглянемо завдання сортування списку імен в алфавітному порядку. Але перш ніж продовжити, ми повинні визначити труднощі, з якими ми будемо працювати. Простіше кажучи, наша мета, щоб відсортувати список "в собі" Іншими словами, ми хочемо, щоб відсортувати список по перетасовки його записи, на відміну від переміщення список в інше місце. Наша ситуація аналогічна проблемі сортування списку, елементи яких записані на окремих картках розкласти на переповненому столі. 53
методом вставки 54 Розглянемо список імен Fred Alex Diana Byron Carol Один з підходів до сортування цей список зазначити, що подспісок складаються тільки ім'я верхнього, Фред, сортується, але подспісок, що складається з двох верхніх імена, Фред і Алекс, це не так.
методом вставки 55 Таким чином ми могли б забрати картку з ім'ям Алексія, слайд ім'я Фреда вниз, у простір, де Алекс, а потім помістити ім'я Алекс в отвір у верхній частині списку, в особі першого ряду на малюнку 6. 10. На даний момент наш список буде. Alex Fred Diana Byron Carol
Рис 6. 10 Сортування списку імен за алфавітом 56
6. 4 Ітераційні структури - сортування методом вставки Проаналізувавши процес сортування списку Зокрема, наше завдання зараз полягає в узагальненні цей процес, щоб отримати алгоритм для сортування загального списку. З цією метою зауважимо, що кожен рядок Рисунок 6. 10 представляє той же загальний процес: Візьміть перше ім'я в несортованих частині списку, слайд імен більше, ніж витягнутий ім'я вниз, і вставляти витягнуті ім'я в список, де дірка з'являється. 57
6. 4 Ітераційні структури - сортування методом вставки 58 Якщо ототожнити витягнуті ім'ям, вступ стрижень, цей процес може бути виражений у нашому псевдокоді я Переміщення зведеної запис в тимчасову папку залишаючи отвір до переліку; в той час як (є ім'я вище отвору і це ім'я більше обертання) робити (Перемістити ім'я вище отвір вниз в отвір залишаючи діри над назвою) Переміщення зведеної вступу в отвір в список.
Рис 6. 11 Алгоритм сортування вставкою в псевдокоді 59 procedure Sort (List) N← 2; while (the value of N does not exceed the length of List) do ( Select the Nth entry in List as the pivot entry; Move the pivot entry to a temporary location leaving a hole in List; while (there is a name above the hole and that name is greater than the pivot) do (move the name above the hole down into the hole leaving a hole above the name) Move the pivot entry into the hole in List; N←N+ I )
6. 5 Рекурсивні структури 60 Рекурсивні структури представляють собою альтернативу циклу парадигмі для реалізації повторення діяльності. У той час як цикл включає повторювані набір інструкцій у порядку, в якому набір завершено, і потім повторюється, рекурсії включає повторюва ні набори інструкцій, як підзадачі самі по собі. Як аналогію, розглянути процес проведення телефонних переговорів з функцією очікування дзвінка. Там, неповна телефонна розмова відкладається в сторону, а інший вхідний виклик обробляється. В результаті, дві бесіди відбудуться.
6. 5 Рекурсивні структури 61 Об'єкт називається рекурсивним, якщо він частково складається і визначається в термінах самого себе. Рекурсія зустрічається не тільки в математиці, а й у повсякденному житті. Хто ніколи не бачив реклами к артини, яка містить себе?
6. 5 Рекурсивні структури 62 Наступні рекурсивна процедура може бути застос ована до прямокутної полотно для створення малюнків стилі голландського художника Піта Мо ндріана (1872 -1944), який продюсував картини, в яких прямокутне полотно було розділене на послідовно менші прямокутники. Процедура Мондріана (Rectangle) if (the size of Rectangle is too large for your artistic taste) then (divide Rectangle into two smaller rectangles; apply the procedure Mondrian to one of the smaller rectangles; apply the procedure Mondrian to the other smaller
6. 5 Рекурсивні структури 63 Послідовний пошук включає в себе круглу форму повт орення, бінарний пошук виконує кожен етап повторення як підзадачі попередньому етапі. Цей метод відомий як рекурсія. Загалом, рекурсивна процедура призначена для перев ірки на умову завершення (часто званий випадку підставою або дегенеративних випадку) перед запитом подальшої активації. Якщо припинення умова не виконується, підпрограма створює іншу активації процедури і привласнює його завдання вирішення переглянуті проблема, яка ближче до умова завершення, ніж, призначених поточному активації. Однак, якщо припинення умова виконується, шлях береться, який викликає поточні активації припинити без створення додаткових актива
6. 6 Ефективність і коректність 64 Хоча сучасні машини здатні виконання мільйонів інструкцій у секунду, ефективність залишається серйозною проблемою в розробці алгоритмів. Часто вибір між ефективним і неефективним алгоритми можуть зробити різницю міжпрактичне вирішення проблеми і непрактично одна. Розглянемо два алгоритми для пошуку такого списку: послідовни й пошук і бінарний пошук. Наше питання, чи буде вибір між цими двома алгоритмами робить н іякої різниці в разі реєстратор університету
6. 6 Ефективність і коректність 65 Враховуючи кількість студентів ідентифікації, послідовний алгоритм пошук починається з початку списку і порівнює записи встановлено, ідентифікаційний номер бажаної. Не знаючи нічого про джерело цільове значення, ми не можемо укласти, як далеко в спискуцей пошук повинен йти. Ми можемо сказати, однак, що після довгих пошуків ми очікуємо, що середня глибинапошуку, щоб бути в середині списку, а деякі будуть коротшими, але інші будуть більше. Таким чином, за нашими оцінками, протягом періоду часу, послідовний пошук будерозслідувати близько 15 тисяч записів у пошуку.
6. 6 Ефективність і коректність 66 Якщо отримання і перевірка кожного запису для його ідентифікаційний номер потрі бно 10 мілісекунд (10 тисячних часток секунди), такий пошук вимагатиме в середньому 150 секунд або 2, 5 хвилини нестерпно довго реєстратора чекати запис сту дента з'явитися на екранікомп'ютера. Навіть якщо час, необхідний для отримання та перевірки кожного запису були скорочені тільки на 1 мілісекунду, пошук буде як і раніше потрібно в середньому 15 секунд, що є ще довго чекати.
6. 6 Ефективність і коректність 67 На відміну від двійкового пошуку доходів шляхом порівняння цільове значення до середини записи в списку. Якщо це не потрібний запис, то хоча б залишилися пошук обмежується лише пол овина з початкового списку. Таким чином, після допиту середнього запис в список 30000 записів студ ента, бінарнийпошук, має не більше 15000 записів досі, щоб розглянути. Після другого запиту, не більше 7500 залишаються, і після третього пошуку, список яких йдемова знизилася не більше ніж 3750 записів. Продовжуючи таким чином, ми бачимо, що цільовий записи будуть знайдені після отримання не більше 15 записів зі списку 30000 записів.
6. 6 Ефективність і коректність 68 Таким чином, якщо кожен з цих витягів може бути виконана в 10 мілісекунд, процес пошуку конкретного запису потрібно всього 0, 15 другої це означає, що доступ до будь-якого конкретного запису студент виявиться миттєва, з точки зору реєстратора. Ми укладаємо, що вибір між послідовний алгоритм пошуку і алгоритм двійкового пошукуватиме значний вплив у цьому додатку. Цей приклад свідчить про важливість галузі інформатики відома як алгоритм аналізу, який включає в себе вивчення ресурсів, таких як час і місце для зберігання, що алгоритми вимагають. Основне застосування таких досліджень є оцінка відносних переваг альтернативних алгоритмів.
6. 6 Ефективність і коректність – Верифікація програмного забезпечення 69 Програмісти повинні знати різницю між програмою, яка виглядає правильною і програмою, яка дійсно є правильною. Спеціалістам з обробки даних відомі багато страшних історій за участю програмного забезпечення, що, хоча рахувалось безумовно правильним, але відказувало в критичний момент через деякі непередбачені ситуації. Верифікація(перевірка) програмного забезпечення є важливим заходом, і пошук ефективних методів перевірки являє собою область активних наукових досліджень у галузі комп'ютерної науки. Основним напрямком досліджень у цій області спроби застосувати методи формальної логіки, щоб довести правильність програми.
Верифікація програмного забезпечення Тобто, мета полягає в застосуванні формальної логіки, щоб довести, що алгори тм робить те, що він має намір робити. Основна теза, що, зменшуючи процес перевірки, щоб формальна процедура, одна захищена від неточних висновків, які можуть бути пов'язані з інтуїтивно зрозумілими аргументами. 70
Верифікація програмного забезпечення 71 • Розглянемо даний підхід до верифікації програм більш докладно • Подібно до того, як формальне математичне доказ грунтується на аксіомах, формальний доказ правильності програми грунтується на специфікаціях, відповідно до яких ця програма розроблялася. • Щоб довести, що програма правильно сортує списки імен, ми можемо почати з припущення про те, що на вхід програми подається список імен. • Коротше кажучи, доказ коректності починається з припущення про те, що на початку роботи програми задоволені деякі умови, звані
6. 6 Ефективність і коректність – Верифікація програмного забезпечення 72 • Наступний етап докази коректності полягає в розгляді того, як слідства з цих передумов поширюються по програмі. • З цією метою дослідники вивчили різні програмні структури, намагаючись встановити, як виконання даної структури впливає на твердження, – про яке до виконання цієї структури було відомо, що воно істинне.
6. 6 Ефективність і коректність – Верифікація програмного забезпечення 73 • Якщо слідувати правилам, наведеним вище, доказ коректності програми здійснюється шляхом визначення положень, званих твердженнями, які встановлюються в різних точках програми. • В результаті виходить набір тверджень, кожне з яких є наслідком передумов програми і послідовності інструкцій, що приводить до тієї точці програми, де встановлено дане твердження. • Якщо твердження, встановлене подібним чином в кінці програми, відповідає специфікаціям того, що потрібно отримати на