Алгоритм

**Алгоритм**, кейде **алгорифм** (Әл-Хорезмидің атынан шыққан) — математикада және ақпараттануда кездесетін негізгі ұғымдардың бірі, алдын-ала не істеу керек екені дәл көрсетілген есептеу үрдісі. Есептеу үрдісі қандай болса да алғашқы мәндерден бастап, сол арқылы толық анықталған қорытынды шыққанша жүргізіледі.

Яғни алгоритм — бастапқы берілген мәліметтермен бір мәнде анықталатын нәтиже алу үшін қай амалды (жұмысты) қандай ретпен орындау қажеттігін белгілейтін есептерді (мәселелерді) шешу (математикалық есеп-қисаптар орындау, техникалық объектілерді жобалау, ғылыми-зерттеу жұмысын жүргізу т.б.) тәсілдерінің дәл сипаттамасы. 

Алгоритм — қазіргі математикада, оның ішінде электронды есептеуіш машинада қолданылатын негізгі ұғымдардың бірі. Белгілі бір теңдеу түбірінің жуық мәнін кез келген дәлдікпен табу оған арналған Алгоритммен есептеледі. Компьютердің кең қолданылуына байланысты Алгоритм жаңа мағынаға ие болды. Берілген есепті шешу барысында орындаушыға біртіндеп қандай әрекеттер жасау керектігін түсінікті әрі дәл көрсететін нұсқау да Алгоритм деп аталады. Алгоритмді орындаушы — адам, Компьютер немесе робот. Әрбір нұсқау — бұйрық. Ал орындаушының жүзеге асыра алатын бұйрықтар жиыны бұйрықтар жүйесі деп аталады. Мысалы, у = (ax + b) (cx - d) функциясын есептеу ЭЕМ-да мынадай әрекеттерден құралады: 
# а-ны x-ке көбейту R1 деп, 
# оған b-ны қосу нәтижесі R2 деп, 
# с-ны х-ке көбейту R3 деп, 
# сх-тан d-ны алу R4 деп, 
# R2-ні R4-ке көбейту у деп белгіленеді.

Алгоритмнің бұйрықтары бірінен кейін бірі кезекпен орындалады. Бағдарлама Алгоритм тілінде жазу, бейнелеу мағынасын береді. Компьютерде Алгоритмнің сызықты, тармақты, циклді, логикалық, модельдік, параллельдік, тізбекті т.б. түрлері қолданылады.

## Алгоритм қасиеттері

Алгоритм ұғымның мәнін аша түсетін оның мынадай қасиеттері бар:
# Алгоритм дискретті информациялармен жасалатын әрекеттерді тағайындайды және өрнектейді. Алгоритмге қатысты әрекеттердің бәрі дискретті болады. Алгоритмнің жұмысына қажетті материалдар ретінде символдық мәтіндер және сандар пайдаланылады.
# Алгоритм біздің қалауымызға қарай өзгертуге болмайтын нақты нұсқау алгоритмде не істеу керектігі алдын-ала айқын береді. Мысалы, бір есепті шешудің алгоритмі берілсе онда ойланбай-ақ алгоритмде қандай нұсқаулар берілсе, сол нұсқауларды берілу ретімен орындасақ, есеп шығады. Алгоритмнің осы қасиетін оның анықталғандық қасиеті дейміз. Бұл жағдай адам сияқты емес ойлау қабілеті жоқ құрылғылардың мысалы, компьютердің көмегімен есептерді шешу мүмкіндігіне кепілдік берді. Мұндай құрылғылар алгоритмнің жарлықтарын ойланбастан формальды орындайды. Сондықтан алгоритмді есепті шығаруға қажеттінің бәрі бір мәнді анықталу және атқарушыға түсінікті әрі нақты болуы тиіс.
# Бір алгоритмнің өзін  бірнеше есептің шешімін табу үшін пайдалану мүмкіндігі, яғни бастапқы деректер мәндерінің жиынына пайдаланылу мүмкіндігі бар. Алгоритмнің  мұндай қасиетін көпшілікке бірдейлік, басқаша айтқанда, жалпылық  қасиеті деп атайды.
# Әрбір алгоритм белгілі бір бастапқы деректердің болуын талап етеді және іздеген нәтижені алуға жеткізеді. Мысалы, екі санды қосу алгоритмнде қосылғыштар бастапқы деректерге, ал қосынды нәтижеге жатады. Осылайша, алгоритмдегі әрекеттердің белгілі бір санның орындалуынан кейін қажетті нәтиже алу мүмкіндігі алгоритімнің нәтижелілігі деп аталады.
# Детерминизм (айқындық). Уақыттың әр сәтінде жұмыстың келесі қадамы жүйенің күйімен ерекше анықталады. Осылайша, алгоритм бірдей бастапқы мәліметтер үшін бірдей нәтиже (жауап) шығарады. Қазіргі интерпретацияда бір алгоритмнің әртүрлі іске асырылуында изоморфтық график болуы керек.Екінші жағынан, жұмыстың келесі қадамы жүйенің ағымдағы күйіне және құрылған кездейсоқ санға байланысты болатын ықтималдық алгоритмдері бар. Алайда, кездейсоқ сандарды генерациялау әдісі «енгізілген мәліметтер» тізіміне енгізілгенде, ықтималдық алгоритмі кәдімгінің кіші түріне айналады.
# Тиімділік – алгоритмнің белгілі нәтижелермен аяқталуы.

## Алгоритмдерді ұсыну

*Алгоритмді жазу формалары:*

* вербальды немесе ауызша: табиғи тілде;
* алгоритмдік тілде: бағдарламалау тілі немесе псевдокод;
* машиналық кодта (электронды есептеуіш машинасының процессор коды);
* математикалық белгілерде;
* сызбалық:
* графикалық (мысалы, блок-схемалар және ДРАКОН диаграммалары);
* құрылым диаграммалары (Нусси-Шнайдерман диаграммалары).
Әдетте, бастапқыда (идея деңгейінде) алгоритм сөзбен сипатталады, бірақ іске асыруға жақындаған сайын ол орындаушыға түсінікті тілдегі формалды контурлар мен тұжырымдарды көбірек алады (мысалы, машиналық код).

## Алгоритм түрлері
нобай|250px|оңға|Алгоритм түрлері
* **Сызықтық алгоритм** — белгілі бір мақсатқа жету үшін амалдардың бірінен соң бірі тізбектеле орындалуы.
* **Тармақталған алгоритм** — алгоритм қадамдарының тізбектеле орындалуы қандай да бір шартқа тәуелді өзгеретін алгоритм.
* **Механикалық алгоритмдер** немесе басқаша детерминирленген, қатаң (мысалы, машинаның, қозғалтқыштың және т.б. жұмыс алгоритмі) — белгілі бір әрекеттерді белгілеп, оларды бір және сенімді дәйектілікпен белгілейді, осылайша процестің шарттары орындалса, бір мәнді талап етілетін немесе ізделетін нәтижені қамтамасыз етеді.
* **Циклдік алгоритм** — белгілі бір шартқа байланысты әрекеттер тізбегінің бірнеше рет қайталануы нәтижесіне тәуелді алгоритм.
* **Икемді алгоритмдер**, мысалы, стохастикалық, яғни ықтималдық және эвристикалық.
* **Ықтималдық (стохастикалық) алгоритм** нәтижеге ықтимал қол жеткізуге әкелетін бірнеше тәсілдермен немесе әдістермен мәселені шешуге арналған бағдарламаны қамтамасыз етеді.
* **Эвристикалық алгоритм** («эврика» деген грек сөзінен шыққан) — қатаң негіздеусіз әртүрлі ақылға қонымды ойларды қолданатын алгоритм.
* **Көмекші (бағыныңқы) алгоритм (процедура)** – белгілі бір тапсырманы алгоритмдеуде бұрын жасалған және толығымен қолданылатын алгоритм. Кейбір жағдайларда әртүрлі мәліметтерге арналған нұсқаулардың (командалардың) бірдей тізбегі болса, жазбаны азайту үшін көмекші алгоритм де бөлінеді. Есепті алгоритмдеуге дайындықтың барлық кезеңдерінде алгоритмнің құрылымдық көрінісі кеңінен қолданылады.

## Алгоритмді талдау
Алгоритмдерді талдаудың негізгі әдістері:
# Сөздік-формулалық (табиғи тілдерде);
# Құрылымды немесе блок-схемалар;
# Арнайы алгоритмдік тілдерде;
# Граф-схемалар көмегімен;
# Петри торының көмегімен.

Бағдарламаны жасау алдында көбінесе сөздік-формулалық және блок-схемалық әдістер қолданылады. Сөздік-формулалық әдісте алгоритм әрекеттер тізбегін анықтайтын, құрамында формулалары бар мәтіндік түрде жазылады. Блок-схемада бағдарламадағы барлық тармақтар, циклдар және ішкі бағдарламалар болуы қажет.

## Қосымша ұғымдар

**Алгоритмдеу** (Алгоритмизация) - 1) есеп (мәселе) шешудің бір кезеңі. Бұл кезде есептің шарты және соңғы нәтижеге қойылатын талаптар негізінде алгоритм құрылады; 2) ақпараттанудың алгоритм құру-жасау әдістері мен тәсілдерін және олардың қасиеттерін зерттейтін бөлімі.

**Алгоритмді орындау** (Реализация алгоритма; realization of algorithms) — компьютерде алгоритмдердің программаларға түрленуі. Осы түрлену процесі программалау деп аталады. Алгоритм термині адамзат қызметін жеке элементарлық әрекеттер мен процедуралардың дәйекті тізбегі түрінде ұсыну үшін пайдаланылады.

**Алгоритм икемділігі** (Гибкость алгоритма; algorithm flexibility) — алгоритмнің кірістік мәліметтер өзгергенде, есептің мазмұнын өзгертпей жұмыс істеу қасиеті.

**Алгоритмдік артықтық** (Алгоритмическая избыточность; algorithmic redundancy) — мәселені шешу алгоритміне қосылған, жойылуы нәтижеге осер етпейтін қосымша қүралдар. Ол нәтижелердің ақиқаттығын арттыруға пайдаланылады.

**Алгоритмдерді оңтайландыру** (Оптимизация алгоритмов; algorithm optimization) — алгоритмдерді эквиваленттік жолмен түрлендіру арқылы алгоритмдер мен есептеу процестерінің сипаттамаларын жетілдіру.

**Алгоритмдік (есептеу) сенімділік** (Алгоритмическая (вычислительная) надежность; algoritmic (calculation) reliability) — жұмыс істеу жағдайлары өзгерген кезде алгоритмнің (программаның) өз міндеттерін орындау қабілеті.

**Алгоритмнің блок-схемасы** (Блок-схема алгоритма) — ескертулері көрсетілген бейнесызбалық белгілер түрінде берілген компьютерге арналған программаның немесе есеп шешу алгоритмінің шартты кескіні. Ол программаның (есептің) құрылымын және ақпарат өңдеу процесінің жалпы тізбектілігін анықтауға арналған.

**Бастапқы мәліметтердің және кейбір нәтижелердің болуы**

Алгоритм – нақты анықталған нұсқау, ол бастапқы мәліметтерге ретімен қолданылып, мәселенің шешімін ала алады. Әрбір алгоритм үшін кіріс мәліметтері ретінде қабылданатын объектілердің белгілі бір жиынтығы бар. Мысалы, нақты сандарды бөлу алгоритмінде бөлінгіш кез келген нәрсе болуы мүмкін, бірақ бөлгіш нөл болуы мүмкін емес. 

Алгоритм, әдетте, белгілі бір мәселені емес, белгілі бір есептер класын шешуге қызмет етеді. Осылайша, қосу алгоритмі кез келген натурал сандар жұбына қолданылады. Бұл оның жалпылық сипатын, яғни бір кластағы кез келген есеп үшін бір алгоритмді қайталап қолдану мүмкіндігін білдіреді. 

Алгоритмдер мен бағдарламаларды жасау үшін алгоритмдеу қолданылады – берілген қолданбалы есептерді шешу үшін алгоритмдерді жүйелі түрде құрастыру процесі. Алгоритмдеу бағдарламаларды жасау және компьютерде есептерді шешу процесінің міндетті кезеңі болып саналады. Қолданбалы алгоритмдер мен бағдарламалар үшін детерминизм, тиімділік және жалпылық, сондай-ақ тағайындалған есептерді шешу нәтижелерінің дұрыстығы маңызды болып табылады.

## Дереккөздер

Санат:Алгоритмдер