Кіріспе

Математика және компьютерлік ғылымда тапсырма үшін операциялардың тізбегі, алгоритм (/audio=en us алгоритм. ogg/'/æ//l//ɡ//ə//r//ɪ//ð//əm/) – математикалық тұрғыдан қатаң нұсқаулардың шекті тізбегі, әдетте нақты проблемаларды шешу немесе есептеулерді орындау үшін қолданылады. Алгоритмдер есептеулер мен деректерді өңдеу үшін техникалық талаптар ретінде қолданылады. Күрделі алгоритмдер кодтың орындалуын әртүрлі бағытта (автоматты шешім қабылдау деп аталады) өзгерту үшін шарттарды пайдалана алады және дұрыс қорытындыларға келе алады (автоматты ойлау деп аталады), соңында автоматтандыруға жетеді. Алан Тьюринг машиналарды сипаттау үшін "жад", "іздеу" және "қозғау" сияқты терминдерді қолданып, адам қасиеттерін метафоралық түрде пайдалануды бұрыннан-ақ тәжірибе еткен. Керісінше, эвристика – бұл проблеманы шешуге бағытталған тәсіл, ол толыққанды сипатталмаған немесе дұрыс немесе ең оңтайлы нәтижелерге кепілдік бермейтін тәсіл, әсіресе дұрыс немесе ең оңтайлы нәтижелер анықталмаған мәселелер саласында. Мысалы, әлеуметтік желілердегі ұсыныс жүйелері эвристикаға сүйенеді, сондықтан 21-ші ғасырдағы бұқаралық ақпарат құралдарында кеңінен "алгоритм" деп сипатталғанымен, мәселенің мәніне байланысты дұрыс нәтижелерді бере алмайды. Тиімді әдіс ретінде алгоритм шектеулі кеңістікте және уақытта, сондай-ақ функцияны есептеу үшін жақсы анықталған формальді тілде өрнектелуі мүмкін. Бастапқы күйден және бастапқы деректерден (бос болса да) бастап, нұсқаулар есептеуді сипаттайды, ол орындалғанда, белгілі бір сандардағы ретті күйлерден өтеді, соңында "шығыс" береді және соңғы күйде аяқталады. Бір күйден екінші күйге өту міндетті түрде детерминистік болуы керек емес; кейбір алгоритмдер, кездейсоқ алгоритмдер деп аталады, кездейсоқ деректерді қамтиды.

Этимология

825 жыл шамамен парсы ғалымы және полимат Мұхаммед ибн Муса әл-Хорезми kitāb al ḥisāb al hindī («Үнді есептеу кітабы») және kitab al jam' wa'l tafriq al ḥisāb al hindī («Үнді арифметикасында қосу және алу») атты еңбектерді жазды. Бұл екі мәтін араб тіліндегі түпнұсқасынан қазіргі таңдағыда жоғалып кеткен. Дегенмен, оның алгебраға арналған тағы бір кітабы сақталған. Ол барлық компьютерлік бағдарламаларды (сандық есептеулерді орындамайтын бағдарламаларды да қоса алғанда) және, мысалы, кез келген белгіленген бюрократиялық процедураны немесе аспаздық кітаптағы рецептті қамтиды. Жалпы, бағдарлама ақыр соңында тоқтаса ғана алгоритм болып саналады, тіпті кейде шексіз циклдер қажет болуы мүмкін. Алгоритм – бұл шығысты анықтауға арналған нақты берілген нұсқаулар жиынтығы, оны есептеу машинасы немесе символдармен қарапайым операцияларды ғана орындай алатын адам орындауы мүмкін. Алгоритм түсінігі шешілгіштік ұғымын анықтау үшін де қолданылады, бұл формальды жүйелердің аксиомалар мен ережелердің шағын жиынтығынан қалай пайда болатынын түсіндіру үшін маңызды ұғым. Логикада алгоритмді орындауға қажетті уақытты өлшеу мүмкін емес, себебі ол әдеттегі физикалық өлшеммен байланысты емес. Мұндай белгісіздіктер, ағымдағы жұмыстың сипаттамасы болып табылады және терминнің нақты (біраз жағдайда) және абстрактілі қолданысына сәйкес келетін алгоритмнің анықтамасының болмауына себеп болады. Көптеген алгоритмдер компьютерлік бағдарлама ретінде іске асырылуы тиіс. Алайда, алгоритмдер басқа да тәсілдермен іске асырылуы мүмкін, мысалы, биологиялық нейрондық желіде (адам миы арифметиканы іске асыруы немесе жәндік азық іздеуі сияқты), электрлік схемада немесе механикалық құрылғыда.

Ежелгі алгоритмдер

Ежелгі дәуірден бастап математикалық мәселелерді шешудің қадамдық процедуралары куәландырылған. Бұған Вавилон математикасы (б.з.д. 2500 жыл шамасында), Ифа оракулы (б.з.д. 500 жыл шамасында), грек математикасы (б.з.д. 240 жыл шамасында, мысалы, Эратостеннің үрмесі және Евклид алгоритмі) және араб математикасы (9 ғасыр, мысалы, жиілік талдауына негіделген кодты бұзуға арналған криптографиялық алгоритмдер) кіреді. Шифрланған кодты түсіндіруге арналған алғашқы криптографиялық алгоритмді 9 ғасырдың араб математигі Әл Кинди «Криптографиялық хабарламаларды түсіндіру туралы қолжазба» еңбегінде жасаған. Ол жиілік талдауы арқылы криптоанализдің алғашқы сипаттамасын берді, алғашқы кодты бұзу алгоритмін ұсынды. Хаммурапи әулетінің кезінде б.з.д. 1800 – 1600 жылдар аралығында вавилондық саз тақташаларында формулаларды есептеу алгоритмдері сипатталған. Алгоритмдер Вавилон астрономиясында да қолданылған. Вавилондық саз тақташалары маңызды астрономиялық оқиғалардың уақыты мен орнын есептеу үшін алгоритмдік процедураларды сипаттайды және қолданады. Арифметика алгоритмдері ежелгі Мысыр математикасында да кездеседі, олар Ринд математикалық папирусына дейін б.з.д. 1550 жылға дейін жетеді, ол механикалық сағаттың «тік-так» дыбысын бізге жеткізеді. «Дәл автоматты машина» 13 ғасырдан бастап «механикалық автоматтарға» және соңында 19 ғасырдың ортасында Чарльз Бэббидж мен Ада Лавлейс графнясының «есептеу машиналарын» – айырмашылық машинасы мен аналитикалық машиналарын тудырды. Лавлейс компьютерде өңдеуге арналған алгоритмді алғаш рет жасаған деп есептеледі – Бэббидждің аналитикалық машинасы, ең алғашқы құрылғы, ол жай ғана калькулятор емес, толыққанды Тьюринг машинасы деп саналады, сондықтан оны кейде «тарихтағы алғашқы бағдарламашы» деп атайды, бірақ Бэббиджтің екінші құрылғысының толыққанды іске асырылуы оның өмірінен ондаған жылдар кейін ғана мүмкін болды.

Электромеханикалық реле

Белл мен Ньюэлл (1971) Жакард тоқыма станогының (1801), Холлериф карталарының (перфокарталардың, 1887) және «телефондық коммутация технологияларының» алғашқы компьютерлерді жасауға әкелген ағаштың тамыры екенін көрсетеді. 19 ғасырдың ортасында телеграф, телефонның алдағысы, бүкіл әлемде қолданысқа енді, оның әріптерді «нүктелер мен сызықтар» түрінде дискретті және ажыратуға болатын кодтауы кең таралған дыбыс болды. 19 ғасырдың соңында тикер таспасы (1870 жылдар шамасында) қолданылды, сондай-ақ 1890 жылғы АҚШ халық санағында Холлерит карталары пайдаланылды. Содан кейін телепринтер (1910 жыл шамасында) пайда болды, ол перфорацияланған қағазды және Бодо кодын таспада қолданды. Электромеханикалық релелердің телефондық коммутациялық желілері (1835 жылы ойлап табылған) Джордж Стибицтің (1937), цифрлық қосу құрылғысының изобреторының жұмысына негіз болды. Белл зертханасында жұмыс істеген кезде ол дөңгелектері бар механикалық калькуляторларды «қиындықпен» пайдалануды байқады. «Ол 1937 жылы бір кешке үйіне барып, өз идеясын сынап көруді жоспарлады. Жұмысы аяқталған соң Стибиц екілік қосу құрылғысын құрастырды». Математик Мартин Дэвис электромеханикалық реленің ерекше маңыздылығын атап көрсетті.

Ресмилендіру

1928 жылы Дэвид Гилберт қойған Entscheidungsproblem (шешім проблемасы) мәселесін шешуге жасалған тыраштар қазіргі заманғы алгоритмдер туралы түсініктің ішінара ресмиленуіне бастады. Кейінгі ресмиленулер «тиімді есептеуге қабілеттілікті» немесе «тиімді әдісті» анықтауға бағытталған әрекеттер ретінде жасалды. Осы ресмиленулерге 1930, 1934 және 1935 жылдардағы Гёдель-Гербранд-Клине рекурсивті функциялары, Алонзо Черчтың 1936 жылғы лямбда-есебі, Эмиль Посттың 1936 жылғы 1-формуласы және Алан Тьюрингтің 1936-37 және 1939 жылдардағы Тьюринг машиналары жатты.

Өкілдіктер

Алгоритмдерді көптеген түрде бейнелеуге болады, оның ішінде табиғи тілдерде, псевдокодта, ағын диаграммаларында, дракон диаграммаларында, бағдарламалау тілдерінде немесе басқару кестелерінде (интерпретаторлармен өңделеді). Алгоритмдерді табиғи тілде жазу көбінесе ауыр болып келеді және мағынасы шашыраңқы болуы мүмкін, сондықтан күрделі немесе техникалық алгоритмдер үшін олар сирек қолданылады. Псевдокод, ағын диаграммалары, дракон диаграммалары және басқару кестелері – бұл табиғи тілдегі түсініксіздіктерден сақтауға көмектесетін алгоритмдерді құрылымды түрде бейнелеу тәсілдері. Бағдарламалау тілдері, ең алдымен, алгоритмдерді компьютер орындай алатын формада жазу үшін жасалған, бірақ олар алгоритмдерді анықтау немесе құжаттау үшін де жиі қолданылады.