Појам алгоритма¶
О алгоритму можемо кратко да кажемо да је то прецизно упутство за обављање задатка. Да би се неко упутство назвало алгоритмом, битно је да има ових неколико особина:
Алгоритам је низ корака, који се могу извршавати један по један (ова особина се назива дискретност или разложивост).
Поступак извршавања алгоритма, односно праћења упутства се увек завршава после коначног броја извршених корака (резултативност или делотворност, учинковитост).
Сваки корак има јасно значење и може да се разуме на само један начин. Ко год и када год извршавао алгоритам, за исте полазне податке мора добити исти резултат (детерминисаност или одређеност).
На пример, ако не знате како да стигнете до неког одредишта, систем за навигацију може да направи упутство за вас, да вам то упутство прикаже сликом или вам га изговори. Пратећи то упутство, ви извршавате алгоритам доласка до одредишта.
За алгоритам је пожељно (по некима и неопходно) да може да послужи за решавање више сличних задатака. То се постиже задавањем улазних података, од чијих вредности зависе даљи кораци у алгоритму. Особина алогитма да даје решење проблема за различите улазне податке назива се масовност.
Поред овог кратког објашњења самог појма, желимо да вам испричамо кратку причу о алгоритмима и њиховом значају за људски род.
Алгоритми некад¶
У давно време, када ни цифре које сада рутински користимо за записивање бројева нису биле уобичајене и распрострањене као данас, један учен човек је (поред осталих поступака) записао и детаљно објаснио поступак рачунања производа два велика броја. Данас нам овакав запис изгледа сасвим обично и не видимо ништа нарочито у њему
123 x 27
________
861
+ 246
________
3321
Сваки десетогодишњак данас лако препознаје о чему се ради, али помислите само како је ово изгледало људима који су користили другачије системе записивања бројева и нису познавали ову вештину. Њихови начини да помноже ове исте бројеве су морали бити знатно компликованији. Стога је за њих поменута вештина била попут магије. Савладавање ове вештине је био велики корак за учене људе тог времена. Брже и лакше рачунање је омогућило даљи развој математике, а тиме и многа знања проистекла из ње. Тиме смо добили и пораст размене добара (трговине), бољу навигацију и сигурније поморство итд.
Научник о коме је реч звао се Мухамед ал Хорезми и живео је у осмом и деветом веку у Персијском царству. Рођен је у Хорезму, на територији данашњег Узбекистана, био је члан багдадске Академије наука (данашњи Ирак) и један од најзначајнијих представника великог универзитета у Џундишапуру (данашњи Иран). Он је, између осталог, темељно проучио и савладао стару индијску вештину рачунања помоћу децималних записа бројева. Развијајући даље ту вештину створио је читаву нову грану математике коју данас зовемо алгебра, а која је омогућила настанак и развој модернијих грана математике, као што је анализа. Када је његова књига „Ал Хорезми о индијској вештини рачунања” стигла до Европе, преведена је са арапског на латински. Приликом превођења његово презиме је погрешно записано као „Алгоритми”. Тако су поступци рачунања описани у књизи постали познати као алгоритми.
Касније се реч алгоритам пренела на сваки прецизно описан поступак, којим се решава одређени тип проблема.
Постоје, наравно, и старији алгоритми од ових за рачунање са вишецифреним децималним бројевима (мада се у време настанка нису назвали алгоритмима). Познати су и неки алгоритми из древног Египта и Вавилона, који описују поступке рачунања, а стари су око 4000 година. Једним од најстаријих алгоритама који је сачуван до данас и још увек се користи, сматра се чувени Еуклидов алгоритам (око 300 година пре н. е.) за одређивање највећег заједничког делиоца два природна броја. Овај алгоритам је био врло значајан за прављење прецизних календара, који су се користили за планирање најразличитијих активности, као што се са несмањеним значајем користе и данас (значај прецизних календара је најлакше схватити ако замислимо да их нема, то јест да су постојећи календари непрецизни, а уз то компликовани и збркани).
Неки поступци су дуго чувани као тајна у оквиру одређене групе (породице, еснафа, братства, племена, царства…), јер су познаваоцима давали велику предност у односу на друге групе. Примера ћете се вероватно лако сетити и сами, било их је у сваком времену, а има их и данас. Помислимо само на разне поступке обраде камена, коже, метала који омогућавају производњу трајније и квалитетније обуће, одеће, заклона, алата, оружја… Ипак, и поред свих тешкоћа и препрека, данас је опште познат велики број врло старих поступака разноразних важних намена. Ове поступке, по данашњим формалним критеријумима, углавном не можемо назвати алгоритмима. Међутим, ти поступци су претеча онога што данас називамо алгоритмима, па их можемо сматрати алгоритмима у ширем смислу те речи.
Овде смо поменули само пар примера математичких алгоритама, али они јасно показују да алгоритми као описи поступака ради преношења знања постоје од давнина и да су увек имали велики значај за људе и њихов напредак и развој. Практично све што данас постоји се на овај или онај начин ослања на употребу оваквих старих алгоритама. Могли бисмо сликовито да кажемо: када бисмо из куле људских достигнућа извукли алгоритме попут поменутих, цела кула би се срушила.
Алгоритми данас¶
Као што смо видели, значај алгоритама је увек био веома велики, а ни данас није другачије. Упутства за гајење биљака и животиња, поступци за производњу хране, индустријски технолошки процеси, упутства за коришћење кућних апарата, све су то у једном ширем смислу алгоритми. Ипак, када се у данашње време каже алгоритам, најчешће се мисли на неки рачунски, или сличан формалан, прецизно описан поступак. Такви поступци нису ништа мање важни, напротив! Многе људске активности започињу пројектовањем, што је нека врста прављења плана. Том приликом се обављају разни прорачуни и користе се различити алгоритми (у најужем смислу). Алгоритмима започиње градња свих врста машина, било да ору, ткају или превозе. Алгоритмима започиње и изградња зграда, мостова, хидроелектрана, авиона, све до освајања свемира.
Уз сав значај који су одувек имали, алгоритми су постали посебно важни откако су људи научили да граде машине које умеју да извршавају алгоритме. Велики корак у индустрији је био појава нумерички управљаних машина (CNC machines) средином двадесетог века. Таквим машинама могу великом прецизношћу (у хиљадитим деловима милиметра) да се задају кораци у обради неког метала (стругање, глодање, бушење и слично), тако да оне након задавања упутства потпуно самостално извршавају потребне операције у задатом редоследу и са задатим параметрима.
Када машинама попут струга, глодалице и других човек управља ручно, најпре је потребна обука, а сам процес производње је спорији, мање прецизан, подложан грешкама (појава шкарта), долази до повреда и других проблема. Машине које раде аутоматски су донеле велику промену, производња је постала бржа и јефтинија, прозводи прецизнији, а тиме и поузданији и квалитетнији. Људи су ове производне машине због наведених особина назвали „паметним”, мада је сва њихова памет у способности да следе упутства која им је задао човек.
Аутоматизација производње је у међувремену отишла знатно даље, тако да су машине данас у стању да самостално обављају много разноврсније послове, а поред производње аутоматизовани су и складиштење, транспорт и други послови. Аутомобиле у фабричким халама склапају роботи, непрегледне њиве обрађују трактори без возача управљани GPS сигналима, пластенике заливају аутомати који очитавају влажност и температуру помоћу сензора, а сложене прорачуне свих врста такође обављају машине познате као рачунари. У свим овим случајевима, способност машина да аутоматизовано (без накнадне помоћи човека) извршавају алгоритме одлично се надовезала на друга достигнућа и проналаске. Сама појава индустрије је олакшала живот људи на много начина: послови су постали мање напорни, више је слободног времена, више хране и других добара, путовања су присупачнија итд. Појава машина које „саме раде” (по припремљеном упутству - алгоритму) је нови велики скок који се управо дешава.
Алгоритми и ми¶
Ми смо и у својим кућама и становима окружени машинама које самостално обављају разне послове. Као једну већ обичну ствар, поменимо машине за прање веша, које данас има скоро свако. Свака веш-машина има уређај који се зове програматор, помоћу кога може да јој се зада поступак прања (да ли је потребно намакање, претпрање, до које температуре да загреје воду итд.). Код старијих машина је овај програматор електро-механички, а код новијих је електронски. Као новији пример поменимо да сада могу да се купе кућне машине које саме месе и пеку хлеб. Оне такође извршавају неке алгоритме, то јест унапред припремљене поступке које ми само бирамо и подешавамо.
Очигледно је да су алгоритми дословно из године у годину све више присутни у нашим животима и све више мењају начин на који живимо. У времену које долази сигурно ћемо бити у прилици да користимо разне „паметне” уређаје и машине, то јест машине које извршавају алгоритме и то ће бити врло једноставно. Да бисмо учествовали у стварању тог новог света, потребно је да умемо да састављамо упутства за машине.