Алгоритми

1. Понятие за алгоритъм

Понятието “алгоритъм” е основно понятие в науката информатика. То е въведено от Евклид, наречено е така в чест на арабския математик Ал Хорезми (живял през 9 век).
Ал Хорезми е допринесъл много за разпространение на записването на числата с помощта на арабски цифри и е създал начините за смятане с арабски цифри.

Алгоритмите дават възможност на изпълнителя (човек или компютър) да решава сложни задачи, без дори да ги познава в детайли, следвайки система от точни и еднозначни указания за действие.

Определение: Алгоритъмът е процес, състоящ се от краен брой, последователни стъпки, наречени елементарни действия (операции), над определен набор от данни, наречени входни данни, с цел получаване на търсено решение.

2. Свойства на алгоритмите

2.1. Определеност (детерминираност) – свойството определеност на алгоритъма се отнася до съдържанието на отделните действия в него. Тези действия трябва да бъдат ясно, точно и недвусмислено определени. Това свойство на алгоритмите създава гаранция, че при многократното им прилагане над едни и същи входни данни винаги ще се получават, едни и същи резултати, независимо от изпълнителя.

2.2. Масовост – свойството масовост на алгоритъма изисква той да се създава, не за да реши само една конкретна задача, а за да намира решение на цял един клас от еднотипни задачи. Свойството масовост е свързано с дефиниционната област на входните данни, за които алгоритъма е в сила. Колкото тази област е по-голяма, толкова алгоритъмът е по – мощен, по – силен.

2.3. Крайност и резултатност – тези две свойства изискват действията по алгоритъма да приключват след краен брой стъпки (операции) и да дават поне един резултат.

2.4. Дискретност – свойството дискретност на алгоритъма означава, че всяко действие, като част от описанието на алгоритъма, трябва да се изпълнява в определен интервал от време, да има своя предшественик и наследник. Казано по друг начин – действията в алгоритъма се изпълняват на стъпки и едва след приключване на дадена стъпка се преминава към точно определена следваща стъпка.

2.5. Яснота – яснотата (разбираемостта) на алгоритъма означава, че изпълнителят може да извърши всяка текуща стъпка от алгоритъма и да определи еднозначно коя е следващата стъпка, която трябва да изпълни.

2.6. Формалност – от изпълнителя не се изисква да знае каква цел се преследва с изпълнение на алгоритъма – той трябва да работи формално, да изпълнява указанията, докато достигне  до указание за край. Свойството формалност позволява изпълнителят на един алгоритъм да бъде и автомат (лишен от разум и от възможността да осъзнава извършваната от него работа).

2.7. Ефективност – от алгоритмите често се изисква нещо в повече – да са ефективни, т.е. да се изпълняват за приемлив брой стъпки и да не се налага да ползват при работата си прекалено много място (памет) за съхраняване на данните. Важна задача на компютърната информатика е да създава и предлага ефективни алгоритми.
Не може да се посочи границата между ефективни и неефективни алгоритми и в какво се измерва (секунди, минути, часове или дни) – всичко зависи от конкретната задача и условия.

3. Видове алгоритми

В зависимост от типа на съставящите ги команди, алгоритмите се делят на три основни вида – последователни (линейни), разклонени и циклични.

3.1. Последователни (линейни) алгоритми
Линейните алгоритми са съставени от команди, които се изпълняват една след друга, последователно по реда на записването им.

3.2. Разклонени алгоритми
Разклонените алгоритми съдържат команди, които (в зависимост от изпълнението или не на дадено условие) определят кои са следващите за изпълнение команди. Разклонените алгоритми позволяват изпълнението на алгоритъма да се управлява в зависимост от получените до момента резултати.

3.3. Циклични алгоритми
Цикличните алгоритми съдържат групи от команди, които се изпълняват многократно . Алгоритмите съдържащи цикли, дават възможност с малък брой команди да се представя голяма по обем еднотипна обработка на данни.

Обикновено алгоритмите имат смесен характер, като включват както редици от последователно изпълнявани команди, така също и разклонения и цикли (алгоритъм на Евклид за НОД – най-стария алгоритъм).

Копирането е забранено без изричното съгласие на vGuides.net