Слово "Алгоритм" походить від algorithmi - латинського написання імені аль-
Хорезмі, під яким у середньовічній Європі знали видатного математика з
Хорезму (місто в сучасному Узбекистані) Мухаммеда бен Мусу, що жив у 783 -
850 рр.. У своїй книзі "Про індійський рахунку" він сформулював правила записунатуральних чисел за допомогою арабських цифр і правила дій над нимистовпчиком. Надалі алгоритмом стали називати точний припис,визначає послідовність дій, що забезпечує отриманнянеобхідного результату з вихідних даних. Алгоритм може бути призначенийдля виконання його людиною або автоматичним пристроєм. Створенняалгоритму, нехай навіть самого простого, - процес творчий. Він доступнийвиключно живим істотам, а довгий час вважалося, що тількилюдині. Інша справа - реалізація вже наявного алгоритму. Її можнадоручити суб'єкту або об'єкту, який не зобов'язаний вникати в суть справи, аможливо, і не здатний її зрозуміти. Такий суб'єкт або об'єкт прийнятоназивати формальним виконавцем. Прикладом формального виконавця можеслужити пральна машина-автомат, яка неухильно виконуєпродиктовані їй дії, навіть якщо ви забули покласти в неї порошок.
Людина теж може виступати в ролі формального виконавця, але в першучергу формальними виконавцями є різні автоматичніпристрою, і комп'ютер в тому числі. Кожен алгоритм створюється з розрахунку націлком конкретного виконавця. Ті дії, які може здійснювативиконавець, називаються його його допустимими діями. Сукупністьдопустимих дій утворює систему команд виконавця. Алгоритм повиненмістити тільки ті дії, які допустимі для даного виконавця.
Об'єкти, над якими виконавець може вчиняти дії, утворюють такзвану середу виконавця. Для алгоритмів, що зустрічаються в математиці,середовищем того чи іншого виконавця можуть бути числа різної природи --натуральні, дійсні і т.п., літери, літерні вирази, рівняння,тотожності тощо
Дане вище визначення алгоритму не можна вважати суворим - не цілком ясно,що таке "точне розпорядження" або "послідовність дій,що забезпечує отримання потрібного результату ". Тому зазвичай формулюютьдекілька загальних властивостей алгоритмів, що дозволяють відрізняти алгоритми відінших інструкцій. p>
Такими властивостями є:
Дискретність (переривчастість, роздільність) - алгоритм повинен представлятипроцес вирішення задачі як послідовне виконання простих (або ранішевизначених) кроків. Кожна дія, передбачене алгоритмом,виконується тільки після того, як закінчилося виконання попереднього.
Визначеність - кожне правило алгоритму має бути чітким, однозначним іне залишати місця для сваволі. Завдяки цій властивості виконанняалгоритму носить механічний характер і не вимагає жодних додатковихвказівок або відомостей про розв'язуваної задачі.
Результативність (кінцівка) - алгоритм повинен призводити до вирішення завданняза кінцеве число кроків.
Масовість - алгоритм рішення задачі розробляється в загальному вигляді, тобто,він повинен бути застосовний для деякого класу задач, що розрізняються тількивихідних даних. При цьому вихідні дані можуть вибиратися з деякоюобласті, яка називається областю застосовності алгоритму.
На підставі цих властивостей іноді дається визначення алгоритму, наприклад:
"Алгоритм - це послідовність математичних, логічних або разомвзятих операцій, які відрізняються детерменірованностью, масовістю,спрямованістю і призводить до вирішення всіх задач даного класу закінцеве число кроків. "Таке трактування поняття" алгоритм "є неповноюі неточною. По-перше, невірно пов'язувати алгоритм з рішенням якої-небудьзавдання. Алгоритм взагалі може не вирішувати ніякої завдання. По-друге, поняття
"Масовість" відноситься не до алгоритмів як до таких, а до математичнихметодів в цілому. Рішення поставлених практикою задач математичнимиметодами засноване на абстрагування - ми виділяємо ряд істотнихознак, характерних для певного кола явищ, і будуємо на підставіцих ознак математичну модель, відкидаючи несуттєві ознакикожного конкретного явища. У цьому сенсі будь-яка математична модельмає властивість масовості. Якщо в рамках побудованої моделі ми вирішуємозавдання і рішення представляємо у вигляді алгоритму, то рішення буде "масовим"завдяки природі математичних методів, а не завдяки "масовості"алгоритму.
Роз'яснюючи поняття алгоритму, часто наводять приклади "побутових алгоритмів":закип'ятити воду, відкрити двері ключем, перейти вулицю і т. д.. : Рецептиприготування якого-небудь ліки або кулінарні рецепти єалгоритмами. Але для того, щоб приготувати ліки за рецептом,необхідно знати фармакологію, а для приготування страви з кулінарногорецептом потрібно вміти варити. Тим часом виконання алгоритму - це бездумне,автоматичне виконання приписів, яке в принципі не вимагаєніяких знань. Якби кулінарні рецепти представляли собою алгоритми, тоу нас просто не було б такої спеціальності - кухар.
Правила виконання арифметичних операцій або геометричних побудовявляють собою алгоритми. При цьому залишається без відповіді питання, чому жвідрізняється поняття алгоритму від таких понять, як "метод", "спосіб",
"Правило". Можна навіть зустріти твердження, що слова "алгоритм",
"Спосіб", "правило" виражають одне й те саме (тобто є синонімами),хоча таке твердження, очевидно, суперечить "властивостями алгоритму".
Саме слово "властивості алгоритму" некоректно. Властивостями володіютьоб'єктивно існуючі реальності. Можна говорити, наприклад, про властивостіпевної речовини. Алгоритм - штучна конструкція, яку миспоруджуємо для досягнення своїх цілей. Щоб алгоритм виконав своєпризначення, його необхідно будувати за певними правилами. Томутреба говорити не про властивості алгоритму, а про правила побудови алгоритму,або про вимоги до алгоритму.
Перше правило - при побудові алгоритму перш за все необхідно задатибезліч об'єктів, з якими буде працювати алгоритм. Формалізоване (закодований-е) представлення цих об'єктів має назву даних.
Алгоритм приступає до роботи з певним набором даних, які називаютьсявхідними, і в результаті своєї роботи-ти видає дані, які називаютьсявихідними. Таким чином, алгоритм пре-утворює вхідні дані у вихідні.
Це правило дозволяє відразу відокремити алгоритми від "методів" і "способів".
Поки ми не маємо формалізованих вхідних даних, ми не можемо побудуватиалгоритм.
Друге правило - для роботи алгоритму вимагають пам'яті. У пам'ятірозміщуються вхідні дані, з якими алгоритм починає працювати,проміжні дані і вихідні дані, які є результатом роботиалгоритму. Пам'ять є дискретної, тобто що складається з окремих осередків.
Пойменована комірка пам'яті носить на-звання змінної. У теорії алгоритміврозміри пам'яті не обмежуються, тобто вва-ється, що ми можемонадати алгоритму будь-який необхідний для роботи обсяг пам'яті.
У шкільній "теорії алгоритмів" ці два правила не розглядаються. У той жечас практична робота з алгоритмами (програмування) починаєтьсясаме з реалізації цих правил. У мовах програмування розподілпам'яті здійснюється декларативними операторами (операторами описузмінних). У мові Бейсік не всі змінні описуються, зазвичайописуються лише масиви. Але все одно при запуску програми транслятормови аналізує всі ідентифікатори в тексті програми і відводить пам'ятьпід відповідні змінні.
Третє правило - дискретність. Алгоритм будується з окремих кроків
(дій, операцій, команд). Безліч кроків, з яких складеноалгоритм, звичайно.
Четверте правило - детерменірованность. Після кожного кроку необхідновказувати, який крок виконується таким, або давати команду зупинки.
П'яте правило - збіжність (результативність). Алгоритм повинен завершуватироботу після кінцевого числа кроків. При цьому необхідно зазначити, щовважати результатом роботи алгоритму.
Отже, алгоритм - невизначені поняття теорії алгоритмів. Алгоритм кожномупевного набору вхідних даних ставить у відповідність деякий набірвихідних даних, тобто обчислює (реалізує) функцію. При розглядіконкретних питань у теорії алгоритмів завжди мається на увазі якаськонкретна модель алгоритму.
Будь-яка робота на комп'ютері - це є обробка інформації. Роботукомп'ютера можна схематично зобразити наступним чином: p>
"Інформація" зліва і "інформація" справа - це різні інформації. Комп'ютерсприймає інформацію ззовні і як результат своєї роботи видаєнову інформацію. Інформація, з якою працює комп'ютер, носить назву
"Дані".
Комп'ютер перетворює інформацію за певними правилами. Ці правила
(операції, команди) наперед занесені в пам'ять комп'ютера. У сукупностіці правила перетворення інформації називаються алгоритмом. Дані,які надходять в комп'ютер, називаються вхідними даними. Результатроботи комп'ютера - вихідні дані. Таким чином, алгоритм перетворитьвхідні дані у вихідні: p>
Тепер можна поставити запитання: а чи може людина обробляти інформацію?
Звичайно, може. Як приклад можна навести звичайний шкільний урок:вчитель задає питання (вхідні дані), учень відповідає (вихідні дані
). Найпростіший приклад: учитель дає завдання - помножити 6 на 3 і результатнаписати на дошці. Тут числа 6 і 3 - вхідні дані, операція множення --алгоритм, результат множення - вихідні дані: p>
Висновок: рішення математичних задач - окремий випадок перетворенняінформації. Комп'ютер (по-англійськи означає обчислювач, російською мовою
- ЕОМ, електронна обчислювальна машина) був створений саме длявиконання математичних розрахунків.
Розглянемо наступне завдання.
Довжина класу 7 метрів, ширина - 5 метрів, висота - 3 метри. У класі 25учнів. Скільки кв. м площі і скільки куб. м повітря припадає наодного учня? p>
Рішення завдання: p>
1. Обчислити площу класу: p>
7 х 5 = 35 p>
2. Обчислити об'єм класу: p>
35 х 3 = 105 p>
3. Обчислити, скільки квадратних метрів площі припадає на одного учня: p>
35: 25 = 1,4 p>
4. Обчислити, скільки куб. метрів повітря припадає на одного учня: p>
105: 25 = 4,2 p>
Відповідь: на одного учня припадає 1,4 кв. метрів площі і 4,2 куб. метрів повітря.
Якщо тепер прибрати обчислення і залишити тільки "дії", то отримаємоалгоритм - перелік операцій, які необхідно виконати, щоб вирішитице завдання.
Виходить, що при вирішенні будь-якої математичної задачі ми складаємоалгоритм рішення. Але спочатку ми самі і виконували цей алгоритм, то єдоводили рішення до відповіді. Тепер же ми будемо тільки писати, що потрібнозробити, але обчислення проводить не будемо. Обчислювати буде комп'ютер. Нашалгоритм буде представляти собою набір вказівок (команд) комп'ютера.
Коли ми обчислюємо будь-яку величину, ми записуємо результат на папері.
Комп'ютер записує результат своєї роботи в пам'ять у вигляді змінної.
Тому кожна команда алгоритму повинна включати вказівку, в якузмінну записується результат. Алгоритм рішення нашої задачі будевиглядати так: p>
1. Обчислити площу класу і записати в змінну S. p>
2. Обчислити об'єм класу і записати в змінну V. p>
3. Обчислити, скільки квадратних метрів площі припадає на одного учня і записати в змінну S1. P>
4. Обчислити, скільки куб. метрів повітря припадає на одного учня і записати в змінну V1. p>
5. Вивести на екран значення змінних S1 і V1.
Тепер залишається тільки перевести команди алгоритму з російської мови намова, зрозумілий комп'ютера, і вийде програма. Програмування - цеє переклад алгоритму з "людського" мови на "комп'ютерний" мову.
Трактування роботи алгоритму як перетворення вхідних даних у вихідніприродним чином підводить нас до розгляду поняття "постановказавдання ". Для того, щоб скласти алгоритм розв'язання задачі, необхідно зумови виділити ті величини, які будуть вхідними даними і чіткосформулювати, які саме величини потрібно знайти. Іншими словами,умову задачі потрібно сформулювати у вигляді "Дано ... Потрібно "- це іє постановка завдання. p>
Алгоритм стосовно до обчислювальної машини - точний припис,тобто набір операцій і правил їх чергування, за допомогою якого, починаючи здеяких вихідних даних, можна вирішити будь-яке завдання фіксованого типу.
Види алгоритмів як логіко-математичних засобів відображають зазначенікомпоненти людської діяльності і тенденції, а самі алгоритми взалежно від мети, початкових умов завдання, шляхів її вирішення,визначення дій виконавця підрозділяються в такий спосіб:
. Механічні алгоритми, чи інакше детерміновані, жорсткі (наприклад алгоритм роботи машини, двигуна і т.п.);
. Гнучкі алгоритми, наприклад стохастичні, тобто імовірнісні та евристичні.
Механічний алгоритм задає певні дії, позначаючи їх уєдиною і достовірної послідовності, забезпечуючи тим самимоднозначний потрібний чи потрібний результат, якщо виконуються ті умовипроцесу, завдання, для яких розроблено алгоритм.
Імовірнісний (стохастичний) алгоритм дає програму рішення задачідекількома шляхами або способами, що приводять до ймовірного досягненнюрезультату.
Евристичний алгоритм (від грецького слова "еврика") - це такийалгоритм, в якому досягнення кінцевого результату програми дійоднозначно не визначено, так само як не позначена всяпослідовність дій, не виявлено всі дії виконавця. Доевристичним алгоритмам відносять, наприклад, інструкції та приписи. Уцих алгоритмах використовуються універсальні логічні процедури і способиприйняття рішень, засновані на аналогії, ассоціяціях і минулому досвідівирішення схожих завдань.
Лінійний алгоритм - набір команд (вказівок), що виконуються послідовно підчасу один за одним.
Розгалужуються алгоритм - алгоритм, який містить хоча б одна умова, врезультаті перевірки якого ЕОМ забезпечує перехід на один з двохможливих кроків.
Циклічний алгоритм - алгоритм, який передбачає багаторазове повторенняодного і того ж дії (одних і тих же операцій) над новими вихіднимиданими. До циклічним алгоритмам зводиться більшість методів обчислень,перебору варіантів.
Цикл програми - послідовність команд (серія, тіло циклу), якаможе виконуватися багато разів (для нових вихідних даних) до задоволеннядеякого умови.
На малюнку продемонстровані в умовні позначення схеми основнихконструкцій алгоритмів:а). лінійного алгоритму;б, в, г). розгалужуються алгоритмів (б-відгалуження, по-роздвоєння, г -перемикання);д, е, ж). циклічних алгоритмів (д, ж-перевірка на початку циклу, е-перевірка вНаприкінці циклу).
Допоміжний (підлеглий) алгоритм (процедура) - алгоритм, ранішерозроблений і цілком використовується при алгоритмізації конкретного завдання.
У деяких випадках за наявності однакових послідовностей вказівок
(команд) для різних даних з метою скорочення запису також виділяютьдопоміжний алгоритм.
На всіх етапах підготовки до алгоритмізації завдання широко використовуєтьсяструктурний подання алгоритму.
Структурна (блок-, граф-) схема алгоритму - графічне зображенняалгоритму у вигляді схеми пов'язаних між собою за допомогою стрілок (лінійпереходу) блоків - графічних символів, кожен з яких відповідаєодному кроку алгоритму. Всередині блоку дається опис відповідногодії.
Графічне зображення алгоритму широко використовується передпрограмуванням завдання внаслідок його наочності, тому що зоровесприйняття зазвичай полегшує процес написання програми, її коригуванняпри можливі помилки, осмислення процесу обробки інформації.
Можна зустріти навіть таке твердження: "Зовні алгоритм являє собоюсхему - набір прямокутників та інших символів, усередині якихзаписується, що обчислюється, що вводиться в машину і що видається надрук і інші засоби відображення інформації ". Тут формаподання ал?? орітма змішується з самим алгоритмом.
Принцип програмування "зверху вниз" вимагає, щоб блок-схема поетапноконкретизувалася і кожен блок "розписувався" до елементарних операцій.
Але такий підхід можна здійснити при вирішенні нескладних завдань. При вирішенніскільки-небудь серйозного завдання блок-схема "розповзеться" до такого ступеня,що її неможливо буде охопити одним поглядом.
Блок-схеми алгоритмів зручно використовувати для пояснення роботи вжеготового алгоритму, при цьому як блоків беруться дійсно блокиалгоритму, робота яких не вимагає пояснень. Блок-схема алгоритму повиннаслужити для спрощення зображення алгоритму, а не для ускладнення.
При рішенні задач на комп'ютері необхідно не стільки вміння складатиалгоритми, скільки знання методів розв'язання задач (як і взагалі в математиці
). Тому вивчати потрібно не програмування як таке (і неалгоритмізацію), а методи розв'язання математичних задач на комп'ютері.
Завдання слід класифікувати не за типами даних, як це зазвичай робиться
(задачі на масиви, на символьні змінні і т. д.), а по розділу
"Потрібно".
В інформатиці процес вирішення завдання розподіляється між двома суб'єктами
: Програмістом і комп'ютером. Програміст складає алгоритм (програму
), Комп'ютер його виконує. У традиційній математики такого поділу немає
, Завдання вирішує одна людина, яка складає алгоритм рішення задачі ісам виконує його. Сутність алгоритмізації не в тому, що рішення задачіпредставляється у вигляді набору елементарних операцій, а в тому, що процесрішення завдання розбивається на два етапи: творчий (програмування) іне творчі (виконання програми). І виконують ці етапи різнісуб'єкти - програміст і виконавець
У підручниках з інформатики зазвичай пишуть, що виконавцем алгоритму можебути і людина. Насправді алгоритми для людей ніхто не складає (небудемо забувати, що не всякий набір дискретних операцій є алгоритмом
). Людина у принципі не може діяти за алгоритмом. Виконанняалгоритму - це автоматичне, бездумне виконання операцій. Людиназавжди діє осмислено. Для того, щоб людина могла виконувати якийсьнабір операцій, йому потрібно пояснити, як це робиться. Будь-яку роботу людиназможе виконувати тільки тоді, коли він розуміє, як вона виконується.
Ось у цьому - "пояснення і розуміння" - і криється відмінність між поняттями
"Алгоритм" та "спосіб", "метод", "правило". Правила виконанняарифметичних операцій - це саме правила (або способи), а неалгоритми. Звичайно, ці правила можна викласти у вигляді алгоритмів, але толкувід цього не буде. Для того, щоб людина змогла вважати за правиламиарифметики, його потрібно навчити. А якщо є процес навчання, значить, мимаємо справу не з алгоритмом, а з методом.
При складанні алгоритму програміст нікому нічого не пояснює, авиконавець не намагається нічого зрозуміти. Алгоритм розміщується в пам'ятікомп'ютера, який витягає команди з однієї і виконує їх. Людинадіє по іншому. Щоб розв'язати задачу, людині потрібно тримати впам'яті метод розв'язання задачі в цілому, а втілює цей метод кожен по -своєму.
Дуже яскраво ця особливість людської психології - неалгорітмічностьмислення - проявилася в методичних посібнику А. Г. Гейне та В. Ф. Шолоховіча.
У посібнику викладаються рішення задач з відомого підручника. Рішення завданьповинні бути представлені у вигляді алгоритмів. Проте автори посібника розуміють,що якщо просто написати алгоритм розв'язання задачі, то розібратися в самомурішення буде важко. Тому вони спочатку приводять "нечітке викладалгоритму "(тобто пояснюють рішення задачі), а потім пишуть сам алгоритм. p>
Л І Т Е Р А Т У Р А
1. Нестеренко А. В. ЕОМ і професія програміста.
М., Просвещение, 1990.
2. Брудно А. Л., Каплан Л. И. Московские олімпіади з програмування.
М., Наука, 1990.
3. Кузнецов О. П., Адельсон-Бєльський Г. М. Дискретна математика дляінженера.
М., Энергоатомиздат, 1988.
4. Гейн А.Г. та ін. Основи інформатики та обчислювальної техніки.
М., Просвещение, 1994.
5. Інформатика. Щотижневе додаток до газети "Перше вересня". 1998, №
1.
6. Радченко Н. П. Відповіді на питання випускних іспитів. - Інфоматіка іосвіта, 1997, № 4.
7. Касаткин В.Н. Інформація, алгоритми, ЕОМ. М., Просвещение, 1991.
8. Канигін Ю. М., Зотов Б. І. Що таке інформатика?
М., Дитяча література, 1989.
9. Гейн А. Г., Шолоховіч В.Ф. Викладання курсу "Основи інформатики таобчислювальної техніки "в середній школі. Керівництво для вчителя.
Єкатеринбург, 1992.
10. Візників В.А. Інформатика в поняттях і термінах.
11. Газета «Інформатика», № 35, 1997р.
12. Л.З. Шауцуков Основи інформатики у запитаннях і відповідях. P>
p>