Кіріспе
Математика және компьютерлік ғылымда тапсырма үшін операциялардың тізбегі, алгоритм (/audio=en us алгоритм. ogg/'/æ//l//ɡ//ə//r//ɪ//ð//əm/) – математикалық тұрғыдан қатаң нұсқаулардың шекті тізбегі, әдетте нақты проблемаларды шешу немесе есептеулерді орындау үшін қолданылады. Алгоритмдер есептеулер мен деректерді өңдеу үшін техникалық талаптар ретінде қолданылады. Күрделі алгоритмдер кодтың орындалуын әртүрлі бағытта (автоматты шешім қабылдау деп аталады) өзгерту үшін шарттарды пайдалана алады және дұрыс қорытындыларға келе алады (автоматты ойлау деп аталады), соңында автоматтандыруға жетеді. Алан Тьюринг машиналарды сипаттау үшін "жад", "іздеу" және "қозғау" сияқты терминдерді қолданып, адам қасиеттерін метафоралық түрде пайдалануды бұрыннан-ақ тәжірибе еткен. Керісінше, эвристика – бұл проблеманы шешуге бағытталған тәсіл, ол толыққанды сипатталмаған немесе дұрыс немесе ең оңтайлы нәтижелерге кепілдік бермейтін тәсіл, әсіресе дұрыс немесе ең оңтайлы нәтижелер анықталмаған мәселелер саласында. Мысалы, әлеуметтік желілердегі ұсыныс жүйелері эвристикаға сүйенеді, сондықтан 21-ші ғасырдағы бұқаралық ақпарат құралдарында кеңінен "алгоритм" деп сипатталғанымен, мәселенің мәніне байланысты дұрыс нәтижелерді бере алмайды. Тиімді әдіс ретінде алгоритм шектеулі кеңістікте және уақытта, сондай-ақ функцияны есептеу үшін жақсы анықталған формальді тілде өрнектелуі мүмкін. Бастапқы күйден және бастапқы деректерден (бос болса да) бастап, нұсқаулар есептеуді сипаттайды, ол орындалғанда, белгілі бір сандардағы ретті күйлерден өтеді, соңында "шығыс" береді және соңғы күйде аяқталады. Бір күйден екінші күйге өту міндетті түрде детерминистік болуы керек емес; кейбір алгоритмдер, кездейсоқ алгоритмдер деп аталады, кездейсоқ деректерді қамтиды.
In mathematics and computer science, an algorithm (/audio=en us algorithm. ogg/'/æ//l//ɡ//ə//r//ɪ//ð//əm/) is a finite sequence of mathematically rigorous instructions, typically used to solve a class of specific problems or to perform a computation. Algorithms are used as specifications for performing calculations and data processing. More advanced algorithms can use conditionals to divert the code execution through various routes (referred to as automated decision making) and deduce valid inferences (referred to as automated reasoning), achieving automation eventually. Using human characteristics as descriptors of machines in metaphorical ways was already practiced by Alan Turing with terms such as "memory", "search" and "stimulus". In contrast, a heuristic is an approach to problem solving that may not be fully specified or may not guarantee correct or optimal results, especially in problem domains where there is no well defined correct or optimal result. For example, social media recommender systems rely on heuristics in such a way that, although widely characterized as "algorithms" in 21st century popular media, cannot deliver correct results due to the nature of the problem. As an effective method, an algorithm can be expressed within a finite amount of space and time and in a well defined formal language for calculating a function. Starting from an initial state and initial input (perhaps empty), the instructions describe a computation that, when executed, proceeds through a finite number of well defined successive states, eventually producing "output" and terminating at a final ending state. The transition from one state to the next is not necessarily deterministic; some algorithms, known as randomized algorithms, incorporate random input.
Этимология
825 жыл шамамен парсы ғалымы және полимат Мұхаммед ибн Муса әл-Хорезми kitāb al ḥisāb al hindī («Үнді есептеу кітабы») және kitab al jam' wa'l tafriq al ḥisāb al hindī («Үнді арифметикасында қосу және алу») атты еңбектерді жазды. Бұл екі мәтін араб тіліндегі түпнұсқасынан қазіргі таңдағыда жоғалып кеткен. Дегенмен, оның алгебраға арналған тағы бір кітабы сақталған. Ол барлық компьютерлік бағдарламаларды (сандық есептеулерді орындамайтын бағдарламаларды да қоса алғанда) және, мысалы, кез келген белгіленген бюрократиялық процедураны немесе аспаздық кітаптағы рецептті қамтиды. Жалпы, бағдарлама ақыр соңында тоқтаса ғана алгоритм болып саналады, тіпті кейде шексіз циклдер қажет болуы мүмкін. Алгоритм – бұл шығысты анықтауға арналған нақты берілген нұсқаулар жиынтығы, оны есептеу машинасы немесе символдармен қарапайым операцияларды ғана орындай алатын адам орындауы мүмкін. Алгоритм түсінігі шешілгіштік ұғымын анықтау үшін де қолданылады, бұл формальды жүйелердің аксиомалар мен ережелердің шағын жиынтығынан қалай пайда болатынын түсіндіру үшін маңызды ұғым. Логикада алгоритмді орындауға қажетті уақытты өлшеу мүмкін емес, себебі ол әдеттегі физикалық өлшеммен байланысты емес. Мұндай белгісіздіктер, ағымдағы жұмыстың сипаттамасы болып табылады және терминнің нақты (біраз жағдайда) және абстрактілі қолданысына сәйкес келетін алгоритмнің анықтамасының болмауына себеп болады. Көптеген алгоритмдер компьютерлік бағдарлама ретінде іске асырылуы тиіс. Алайда, алгоритмдер басқа да тәсілдермен іске асырылуы мүмкін, мысалы, биологиялық нейрондық желіде (адам миы арифметиканы іске асыруы немесе жәндік азық іздеуі сияқты), электрлік схемада немесе механикалық құрылғыда.
or cook book recipe. In general, a program is an algorithm only if it stops eventually—even though infinite loops may sometimes prove desirable. define an algorithm to be a set of instructions for determining an output, given explicitly, in a form that can be followed by either a computing machine, or a human who could only carry out specific elementary operations on symbols. The concept of algorithm is also used to define the notion of decidability—a notion that is central for explaining how formal systems come into being starting from a small set of axioms and rules. In logic, the time that an algorithm requires to complete cannot be measured, as it is not apparently related to the customary physical dimension. From such uncertainties, that characterize ongoing work, stems the unavailability of a definition of algorithm that suits both concrete (in some sense) and abstract usage of the term. Most algorithms are intended to be implemented as computer programs. However, algorithms are also implemented by other means, such as in a biological neural network (for example, the human brain implementing arithmetic or an insect looking for food), in an electrical circuit, or in a mechanical device.
Ежелгі алгоритмдер
Ежелгі дәуірден бастап математикалық мәселелерді шешудің қадамдық процедуралары куәландырылған. Бұған Вавилон математикасы (б.з.д. 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 жылдардағы Тьюринг машиналары жатты.
Өкілдіктер
Алгоритмдерді көптеген түрде бейнелеуге болады, оның ішінде табиғи тілдерде, псевдокодта, ағын диаграммаларында, дракон диаграммаларында, бағдарламалау тілдерінде немесе басқару кестелерінде (интерпретаторлармен өңделеді). Алгоритмдерді табиғи тілде жазу көбінесе ауыр болып келеді және мағынасы шашыраңқы болуы мүмкін, сондықтан күрделі немесе техникалық алгоритмдер үшін олар сирек қолданылады. Псевдокод, ағын диаграммалары, дракон диаграммалары және басқару кестелері – бұл табиғи тілдегі түсініксіздіктерден сақтауға көмектесетін алгоритмдерді құрылымды түрде бейнелеу тәсілдері. Бағдарламалау тілдері, ең алдымен, алгоритмдерді компьютер орындай алатын формада жазу үшін жасалған, бірақ олар алгоритмдерді анықтау немесе құжаттау үшін де жиі қолданылады.