мини|250п|Дијаграми тока се често користе за представљање алгоритма Алгоритам је опис за решавање неког проблема. Реч долази из презимена персијског математичара Ал Хорезмија. Алгоритам је био израз који описује начин рачунања децималним бројевима уведеним око 1600. године у Европи. Алгоритмичарима су се раније звали они математичари који не оперишу симболима множина представљеним на абакусу, него једним (индијским или арапским) системом знакова за бројеве (од 16. века раширеним у Европи).
У новије време, алгоритам је појам који се готово искључиво везује за информатику и, мада не постоји јединствена општеприхваћена дефиниција, подразумева се да је у питању некако описана процедура за обављање посла. У ту сврху се дефинишу алгоритамски језици. То су формализовани језици којима се релативно лако описују поступци решавања проблема представљених алгоритмом, такви су на пример програмски језици Алгол, Фортран и Кобол.
У математичкој логици је алгоритам генерализован појам и односи се на поступак за поступно претварање низова знакова.
О настанку мини|десно|Мухамед Ал Хорезми Алгоритам је у математику увео персијски математичар Мухамед Ал Хорезми. Написао је књигу Ал Хорезми о индијској вештини рачунања где у арапску математику уводи индијске цифре и децимални бројни систем. Ова књига бива касније преведена на латински као -{Algoritmi de numero indorum}-. Од лошег латинског превода његовог презимена и потиче реч алгоритам, и дуго је означавала поступак за рачун са децималним бројним системом (и индијским односно, како се касније причало, арапским цифрама).
Алгоритам представља шематски приказано, поступно решавање неког проблема, тока неког процеса или израде неког предмета.
Дефиниција Алгоритам је коначан и прецизно дефинисан процес, низ добро дефинисаних правила, којим се улазне вредности трансформишу у излазне, или се описује извршавање неког поступка.
Данас се реч алгоритам често везује за појам рачунарства мада уопштено алгоритам можемо сматрати као упутство како решити неки задатак или проблем. Тако се и упутство за слање човека на Месец и упутство за прављење руске салате састоји од низа корака, поступака, које треба урадити и који воде испуњењу циља или решавању проблема. Упутство може садржати кораке који се понављају више пута или кораке када треба донети неку одлуку, на основу неког критеријума. Добро упутство предвиђа и поступак када нису сви услови испуњени нпр. прва посада за слање на Месец изгорела при тестирању, или нема кромпира у фрижидеру а почели смо да спремамо жуманце за мајонез. Коректно извршавање сваког корака не решава задатак ако је алгоритам био погрешан.
Различити алгоритми могу решити исти проблем различитим низом поступака уз мање или више напора, за краће или дуже време. Обзиром да је резултат исти, алгоритми се могу поредити по својој ефикасности, брзини или комплексности.
Алгоритми могу бити приказани или реализовани на више начина: природним језиком (разумљив само говорницима тог језика) Графички, дијаграмом тока (блок-дијаграмом) или структурним дијаграмима или текстуално - псеудокодом, вештачким прецизно дефинисаним језиком који личи на програмски језик одговарајућим програмским језиком.
Примери алгоритма Пример алгоритма из свакодневног живота је кување чаја. Сваки корак припремања чаја мора бити извршен правилно како би се могло прећи на следећи и у коначном времену добили скуван чај.
Алгоритам кувања чаја гласи: Узети лонче и сипати воду. Укључити ринглу. Сачекати док вода не прокључа. Кад вода прокључа, скинути лонче и искључити ринглу. Ставити кесицу чаја у лонче. По жељи, додати кашику шећера, млеко или лимун. Сипати чај у шољу.
Из овог једноставног примера може се видети поступност и коначност алгоритма. Наиме, нема превише користи од алгоритма који се никада не завршава или алгоритма чије се наредбе изводе непредвидљиво или им је резултат непредвидљив.
Пример комплекснијег алгоритма је Еуклидов алгоритам за одређивање највећег заједничког делиоца: Поделити број -{a}- бројем -{b}- при чему се добија количник -{c}- и остатак -{r}- Број -{a}- узима вредност броја -{b}- Број -{b}- узима вредност -{r}- Понављати све док остатак -{r}- не буде једнак 0. Највећи заједнички делилац је тренутна вредност броја -{a}-
Историја Први алгоритам који се може сматрати процедуром чија је намена рачун на аутоматској машини је написала Ејда Бајрон 1842. године. У питању је алгоритам за рачун Бернулијевих бројева на аналитичкој машини Чарлса Бебиџа. Та машина никад није прорадила, али је њен алгоритам оставио дубок траг. Данас се то признаје као први рачунарски алгоритам, а Ејда Бајрон, леди Лавлејс, је призната као први програмер у историји. У њену част је и један од најкомплекснијих програмских језика добио назив Ада.
Значајан напредак у формализацији увођења алгоритма у математику и логику је учинио Алан Тјуринг у својим радовима дефинисањем Тјурингове машине. То је примитиван аутомат, мисаона творевина, али поседује могућност извођења неколико операција које су довољне за извођење скоро свих алгоритама. Черч-Тјурингова теза тврди да се сваки алгоритам који је добро дефинисан може извршити на таквој машини. Тако се, и поред једноставности ове машине, зачела теорија коначних аутомата као нова област. Истраживањем се дошло и до теоријских проблема: Тјурингов проблем заустављања, НП-тежак проблем, НП-потпун проблем и тако даље.
Особине Алгоритми поседују следеће особине: дискретност — у одвојеним корацима се извршавају дискретне операције алгоритма који воде ка коначном циљу; резултативност — означава способност алгоритма да после коначног броја корака даје излазне податке; детерминисаност — за исте улазне податке алгоритам увек генерише исте вредности на излазима и масовност — алгоритам је применљив на већи број улазних вредности.
Елементи Решење било ког проблема који се може решити помоћу рачунара, се може изразити као суперпозиција следећих структура: секвенце, селекције и итерације.
Секвенца је уређен низ инструкција где се по извршењу i-те инструкције, може прећи на i+1 инструкцију, затим на i+2 инструкцију и тако даље.
Селекција омогућава избор једног тока којим ће се наставити извршавање инструкција. Избор тока врши се провером услова који је дефинисан као логички израз (предикат).
Разликује се следећи типови селекција: -{IF}- услов -{THEN}- операција (ако је услов испуњен тада изврши операцију) -{IF}- услов -{THEN}- операција1 -{ELSE}- операција2 (ако је услов испуњен, тада изврши операцију 1, у супротном изврши операцију 2) -{CASE}- услов -{OF}- вредност1: операција1 вредност2: операција2 ... -{ELSE}- операција-{n}- (ако услов има вредност1 изврши операцију1, ако услов има вредност2, изврши операцију2... у супротном изврши операцију-{n}-)
Итерација омогућава понављање операција тела операције потребан број пута. Број понављања се контролише условом у форми предиката. Разликују се следећи типови итерације: итерације са изласком на врху -{WHILE}- услов -{DO}- операција (све док је услов испуњен, ради операцију) -{FOR}- почетак -{TO}- крај -{DO}- операција (од почетне вредности до крајње вредности, ради операцију) итерације на изласку на дну -{REPEAT}- операција -{UNTIL}- услов (понављај операцију све док се не испуни услов) итерације са изласком у средини (слабо синтаксно подржане, имају углавном теоријски значај)
Формализација Алгоритам је кључни појам у рачунарској обради података јер је рачунарски програм известан алгоритам који рачунару објашњава које кораке (наредбе) и којим редоследом треба да обавља. Тако се алгоритмом може сматрати било који низ инструкција која се може урадити на Тјуринг-комплетној машини.
Типично, када се уз алгоритам везује појам обраде података, подразумева се да се податак прво учита преко улазне јединице а исписује се на излазну јединицу или чува за каснију употребу. Сачувани подаци се сматрају делом унутрашњег стања система.
За сваки рачунарски посао алгоритам мора бити јасно дефинисан; наведен на начин који подразумева све могуће ситуације које се могу појавити. Значи, сваки условни корак се мора систематично обрадити, случај по случај; услов за сваки случај мора бити јасан и израчунљив.
Пошто је алгоритам јасан низ прецизних корака, редослед израчунавања је увек критичан за функционисање алгоритма. Претпоставља се да су инструкције наведене јасно, да почињу од врха и да теку до дна. Ова идеја се формално описује контролом тока.
Код овакве формализације се унапред узимају претпоставке о императивном програмирању. Ово је најуобичајенији концепт у програмирању и описује поступке на механички начин. Јединствено за овај концепт је операција додељивања, што је давање вредности променљивој. Ово произилази из интуитивног поимања меморије као привременог складиштења односно памћења. Ниже у тексту се може наћи пример оваквог додељивања.
Постоје и другачији концепти у изградњи алгоритма, погледати функционално програмирање и логичко програмирање.
Имплементација Алгоритми се реализују у облику рачунарских програма, али могу и на други начин. Сем електричних кола и механичких справа које обављају неке радње исто тако постоје и биолошке неуралне мреже каква је, на пример, мозак човека који је научио математичке операције или инсекта који премешта храну.
Анализа и проучавање алгоритама је једна област рачунарства и често се обавља апстрактно без употребе конкретног програмског језика. Налик сличним математичким дисциплинама овде се изучавају законитости и принципи алгоритама, а не конкретне имплементације. Алгоритам се ипак запише на некакав начин али је то употребом псеудокода, општег језика за опис алгоритма.
Неки аутори ограничавају дефиницију алгоритма на процедуре које се коначно завршавају. Други укључују и процедуре које се извршавају заувек без заустављања, образлажући то потребом да се неке врсте послова обављају у континуитету. У последњем примеру се успех извршавања не може описати у смислу заустављања уз давање излазног резултата. Уместо тога, може се дефинисати успешност рада, а да је дефинисан невезан излазни низ као резултат. На пример, алгоритам који испитује да ли у бесконачном низу случајних бинарних цифара има више јединица или нула мора радити заувек да би посао обавио до краја. Ако је имплементиран исправно алгоритам ипак даје корисне резултате: док год испитује низ цифара даје позитиван одзив док је више нула него јединица, а негативан одзив у другом случају. Успех овог алгоритма би коначно био дефинисан као давање позитивног одзива ако је број нула већи у низу, а у другим ситуацијама негативног одзива.
Класификација алгоритама Постоји више начина за разврставање алгоритама, а методологија класификације је тема многих расправа.
Подела према парадигми програмирања
Један начин разврставања је по методологији пројектовања или примењеном обрасцу. Постоји известан број различитих образаца како се приступа реализацији алгоритама. Даље, свака од наведених категорија садржи више различитих типова алгоритама. Неки уобичајено коришћени обрасци су: Подели па владај алгоритми смањују степен сложености проблема поделом на два или више мањих проблема од исте врсте (обично рекурзивно), док од проблема не остане толико мали део да се може једноставно решити. Динамичко програмирање. Када проблем показује оптималну подструктуру, у смислу да се оптимално решење проблема може конструисати из оптималног решења потпроблема, и преклапањем потпроблема, што значи да се исти потпроблем користи за решавање више различитих примера проблема, можемо решити брзо користећи динамичко програмирање, приступ који избегава поновно израчунавање решења која су већ израчуната. На пример, најкраћи пут до циља из чвора тежинског графа може бити нађен користећи најкраћи пут до циља од свих оближњих чворова.