Введення в поняття алгоритму
Введення в поняття алгоритму
У сьогоднішньому соціумі слово «алгоритм» настільки широко поширене, що більшості інтуїтивно зрозуміло. Під ним ми розуміємо будь-яку послідовність кроків для досягнення тієї чи іншої мети. Однак для теоретичної науки поняття «алгоритму» досить складне.
Вважається, що однозначного визначення алгоритму немає, хоча в основному різні джерела дають дуже близькі визначення.
Отже, в широко поширених визначеннях алгоритму (в рамках шкільного курсу інформатики) можна виділити наступні складові:
Алгоритм - це кінцева послідовність вказівок ...
... мовою зрозумілою виконавцю, ...
... задає процес вирішення завдань певного типу ...
... і веде до отримання результату, однозначно визначається допустимими вихідними даними.
В останньому пункті визначення йдеться про те, що результат виконання алгоритму безпосередньо залежить від вихідних даних. Тобто один і той же алгоритм при різних вихідних даних дасть різні результати. З іншого боку, якщо одного й того ж алгоритму передати кілька разів одні й ті ж дані, він повинен стільки ж раз видати один і той же результат.
Слово «алгоритм» походить від імені вченого IX століття Муххамеда бен Аль-Хорезмі ( «аль-Хорезмі» -> «алгоритм»), який описав правила виконання арифметичних дій в десятковій системі числення. Словом «алгоритм» потім і стали позначати ці правила обчислень. Однак з плином часу поняття алгоритму видозмінювалася і в XX столітті під ним стали розуміти будь-яку послідовність дій, що приводить до вирішення поставленого завдання.
Спочатку визначення поняття алгоритму було проблемою математики, проте з плином часу теорія алгоритмів стала розвиватися за рахунок впливу відкриттів не тільки в математиці, але і в інформатиці. В даний час алгоритм є одним з головних понять інформатики.
- Дискретність (в даному випадку, розділеність на частини) і впорядкованість. Алгоритм повинен складатися з окремих дій, які виконуються послідовно один за одним.
- Детермінованість (однозначна визначеність). Багаторазове застосування одного алгоритму до одного і того ж набору вихідних даних завжди дає один і той же результат.
- Формальність. Алгоритм не повинен допускати неоднозначності тлумачення дій для виконавця.
- Результативність і кінцівку. Робота алгоритму повинна завершуватися за кілька етапів, при цьому завдання має бути вирішене.
- Масовість. Певний алгоритм повинен бути застосований до всіх однотипним завданням.

Виконавець і розробник алгоритму
Розробляти, придумувати алгоритми можуть тільки розумні істоти (наприклад, людина). А ось формально (не думаючи і не оцінюючи) виконувати, можуть будь-які машини (наприклад, комп'ютери, побутові прилади). У чому користь такого поділу праці? Справа в тому, що людина звільняється від рутинної діяльності, яка часто може займати багато часу, і доручає її машинам.
Однак машини не люди: прилади розуміють лише обмежене число команд і можуть обробляти дані (об'єкти) далеко не всіх типів. Звідси випливає, що розробник алгоритму в кінцевому підсумку повинен описати алгоритм в допустимих командах певного виконавця (тієї машини, якій буде доручено виконання алгоритму). Сукупність команд, які даний виконавець може виконувати, називається системою команд виконавця. Об'єкти (дані), над якими виконавець може виконувати дії, формують середу виконавця.
Мова програмування - засіб запису алгоритмів для комп'ютерів
Досить універсальним виконавцем є комп'ютер. З його допомогою можна виконувати різноманітні за видами алгоритми: робити математичні обчислення, обробляти текстові дані, змінювати графіку і ін. В якомусь сенсі комп'ютер може робити багато, що і людина, а деякі речі набагато швидше. Однак людина і комп'ютер «розмовляють» на абсолютно різних мовах: один - на природному (російською, англійською та ін.), А інший - на формальному (машинному) мовою.
Розробивши алгоритм, людина повинна якось «пояснити» його комп'ютера. Для цих цілей служать мови програмування, а результатом записи алгоритму на них є програма.
В даний час мова програмування - це скоріше якийсь посередник між людиною і машиною для автоматичного оброблення. Програма, написана на мові програмування, надалі переводиться на машинну мову транслятором.
Вивчення алгоритмів має велику практичну значимість. Це пов'язано з тим, що створення алгоритму передбачає докладний опис кожного кроку розв'язання задачі, і в кінцевому підсумку крок алгоритму може бути досить простий для виконання його комп'ютером. А значить, завдання, для яких можна виробити алгоритм їх вирішення, можуть бути автоматизовані, тобто перекладені «на плечі» машин.
Однак слід завжди пам'ятати, що не всі завдання мають алгоритмічне рішення.
При цьому для тих завдань, які все-таки мають алгоритмічне рішення, можуть бути розроблені різні алгоритми. Але найбільш ефективним, швидше за все, буде лише один.