Алгоритм және оның қасиеттері
Алгоритм қасиеттері
Алгоритмнің қасиеттері
Алгоритмдер тек компьютерлерге ғана тән емес, олар біздің күнделікті өмірімізде де кездеседі. Біз таңертең тұрғаннан бастап, кешке ұйықтағанға дейін түрлі алгоритмдерді орындаймыз. Мысалы, шай қайнату, дүкеннен азық-түлік алу немесе үй тапсырмасын орындау — осының бәрі белгілі бір іс-әрекеттер тізбегі. Бірақ кез келген нұсқауды алгоритм деп атауға бола ма? Жоқ. Ол үшін нұсқау бірнеше маңызды қасиетке ие болуы керек.
Дискреттілік: қадам-қадаммен
Алгоритмнің бірінші және ең маңызды қасиеті — (үзіктілік). Бұл дегеніміз, кез келген күрделі әрекетті бірнеше қарапайым, жеке қадамдарға бөлуге болады. Әрбір қадам аяқталғаннан кейін ғана келесісі басталады. Сіз бір уақытта әрі шайнекке су құйып, әрі газды жаға алмайсыз. Әрекеттер бірінен соң бірі орындалады.
Мысалы, «көйлек кию» алгоритмі: 1. Шкафты ашу. 2. Көйлекті алу. 3. Көйлекті кию. 4. Шкафты жабу. Әр әрекет — жеке, аяқталған қадам.
Түсініктілік пен Анықтылық
Алгоритм орындаушыға түсінікті болуы керек. Яғни, оның құрамындағы барлық командалар орындаушы білетін және орындай алатын әрекеттерден тұруы тиіс. Мысалы, 5 жасар балаға «квадрат теңдеуді шеш» деген команда түсініксіз болады, өйткені ол мұндай әрекетті білмейді.
Түсінікті болумен қатар, алгоритм анық болуы керек. Анықтылық дегеніміз — әрбір команданың мағынасы бірдей, нақты болуы және екіұшты түсінілмеуі. Мысалы, рецепттегі «тұзды дәміне қарай қосыңыз» деген нұсқау анық емес, себебі әркімнің «дәміне қарай» деген түсінігі әртүрлі. Ал «бір шай қасық тұз қосыңыз» деген нұсқау — анық.
Программалауда анықтылық өте маңызды. Компьютер «шамамен» немесе «аз ғана» дегенді түсінбейді, оған барлығын нақты сандармен және командалармен көрсету керек.
Нәтижелілік пен Жалпылық
Кез келген дұрыс құрылған алгоритмнің соңы болуы керек. Бұл қасиет нәтижелілік деп аталады. Яғни, алгоритм белгілі бір қадамдар санынан кейін аяқталып, нақты бір нәтиже беруі тиіс. Егер нұсқау орындалғанда процесс ешқашан тоқтамаса, онда бұл — алгоритм емес. Мысалы, «су тасып біткенше шелекпен су таси бер» деген команда, егер шүмек ашық тұрса, ешқашан аяқталмайды.
Жалпылық қасиеті алгоритмнің бір ғана нақты есеп үшін емес, осы типтес барлық есептерді шешуге жарамды болуын білдіреді. Мысалы, екі санды қосу алгоритмі тек үшін ғана емес, кез келген сандары үшін жұмыс істеуі керек. Жақсы алгоритм — бұл бір есептің ғана шешімі емес, тұтас бір мәселелер тобының шешімі.
Қателерді талдау
Енді бірнеше нұсқауды қарастырып, олардың неге алгоритм бола алмайтынын анықтайық. Бұл алгоритм қасиеттерін жақсырақ түсінуге көмектеседі.
| Нұсқау | Бұзылған қасиет | Неліктен? |
|---|---|---|
| «Бірнеше алма ал» | Анықтылық | «Бірнеше» деген сөз нақты емес. Екі ме, әлде он ба? |
| «1-ден бастап барлық сандарды бірінен соң бірін жаз» | Нәтижелілік | Бұл процесс ешқашан аяқталмайды, өйткені сандар шексіз. |
| Роботқа: «Лимонад жасап бер» | Түсініктілік | Робот «лимонад жасау» деген күрделі команданы білмеуі мүмкін. Оған әрекеттерді ұсақтап беру керек. |
| « теңдеуін шеш» | Жалпылық / Нәтижелілік | Бұл теңдеудің шешімі жоқ, сондықтан алгоритм нәтиже бермейді. Ол тек осы теңдеуге арналған. |
Көріп отырғанымыздай, күнделікті өмірде біз жиі анық емес немесе түсініксіз нұсқаулар береміз. Адамдар мұндай жағдайда қосымша сұрақтар қойып, жағдайды түсіне алады. Ал дәл нұсқаулықты қатаң түрде орындайтындықтан, оған арналған алгоритмдер осы бес қасиеттің барлығына сай болуы керек.
Енді осы қасиеттерді қаншалықты меңгергеніңді тексеріп көрейік.
«Су тасып біткенше шелекпен су таси бер» деген нұсқау, егер шүмек ашық тұрса, алгоритм бола алмайды. Бұл алгоритмнің қай қасиетінің бұзылуына байланысты?
Алгоритмнің кез келген күрделі әрекетті бірнеше қарапайым, жеке қадамдарға бөлу мүмкіндігін сипаттайтын қасиеті ______ деп аталады.
