Ang konsepto ng isang algorithm. Ang kasaysayan ng paglitaw ng mga algorithm. Isang modernong pananaw ng algorithmization

ANO ANG PAGKAKAIBA NG PARAAN AT ALGORITHM?

Pamamaraan ay isang hanay ng mga aksyon, at algorithm- isang tiyak na pagkakasunud-sunod ng mga aksyon.

1. Ang algorithm ay mas detalyado kaysa sa pamamaraan. Ang isang paglalarawan ng isang algorithm ay isang block diagram, at ang isang paglalarawan ng isang pamamaraan ay isang aparato na ang mga bahagi ay gumagana nang sabay-sabay.

2. Ang parehong paraan ay maaaring ipatupad ng ilang mga algorithm. At ano mas kumplikadong pamamaraan, ang mas maraming posibleng pagpapatupad sa anyo ng mga algorithm.

3. Maaari mong maunawaan ang pamamaraan mula sa paglalarawan ng algorithm, ngunit ang paglalarawan ng pamamaraan ay magbibigay ng higit pa buong view tungkol sa mga ideyang ipinatupad sa algorithm.

4. Maaaring walang mga pagkakamali sa pamamaraan. Ngunit sa kabilang banda, ang pagpili ng paraan ay maaaring mali. Sa parehong data maaari itong palaging ibigay pinakamahusay na resulta isa pang paraan, ang bentahe nito ay maaaring hindi halata sa unang tingin. Maaaring mali rin ang pagpili ng algorithm.

5. Ang iba't ibang mga algorithm na nagpapatupad ng parehong paraan ay maaaring magbigay ng ganap na magkakaibang mga resulta! Ipakita natin ito sa isang halimbawa.

ISANG HALIMBAWA NA NAGPAPAKITA NG HINDI KATUTUSAN NG MGA METHOD ALGORITHMS

Ang pamamaraan ay naglalaman ng pamamaraang Z, na nagpapaikot ng isang two-dimensional na imahe sa pamamagitan ng isang naibigay na anggulo A at nagdaragdag ng liwanag sa mga punto ng imahe sa pamamagitan ng isang halaga B, depende sa distansya sa ibinigay na punto C: B=B(x-ho, y-oo) Ang "napiling" point C ay maaaring nasa loob at labas ng mga hangganan ng imahe, hindi nito binabago ang mga bagay. Kapag lumiko, nakakatanggap ito ng mga bagong coordinate: x 0, y\.

Malinaw, dalawang algorithm ang posible: ■ iikot muna sa isang partikular na anggulo, pagkatapos ay magdagdag ng liwanag; » magdagdag muna ng liwanag, pagkatapos ay palawakin.

Ang mga resulta ng dalawang algorithm na ito ay maaaring bahagyang magkaiba dahil sa pag-ikot ng mga resulta ng pagkalkula ng distansya: D=((x-xo) 2 + (y-Uo) 2) 1/2, a D, =((x, -x > o ) 2 +(y"-y"o) 2) 1/2 > at sa pangkalahatang kaso ang mga distansyang ito bago at pagkatapos ng pag-ikot D at D" ay hindi pantay.

Kapag nag-extract parisukat na ugat Lumilitaw ang mga hindi makatwirang numero, ibig sabihin, mga walang katapusang fraction. Samakatuwid, anuman ang katumpakan ng aritmetika

mga ticks - 16 na character o 1024, pareho, ang D at D" ay kailangang bilugan pagkatapos ng ilang karakter, itapon ang natitirang mga character. Ang pagtaas ng katumpakan ay hahantong lamang sa pagbaba sa posibilidad na pagkatapos ng pag-round sa D at D" ay magiging hindi pantay.

Kung, batay sa resulta ng pamamaraan ng pag-ikot na may pagdaragdag ng liwanag, isang criterion ay kinakalkula at isa sa ilang mga pagpipilian ay pinili alinsunod sa halaga nito karagdagang mga aksyon, kung gayon ang mga resulta ng dalawang algorithm ay maaaring mag-iba hindi "konti lang", ngunit *. dinal.

Halimbawa, ang criterion ay may anyong T bago<3-T 0 i d ", где T 0 | d - суммарная яркость изображения до процедуры Z, a T new - после нее. И если в первом алгоритме Ты/Tnew = 0.3333 , а во втором 0.3334, то после проверки критерия выпол­нятся разные ветви алгоритма. Результат неэквивалентности алгоритмов будет хорошо заметен.

Kahit na walang pamantayan, ang error ay maaaring maipon nang paunti-unti, sa bawat hakbang ng isang tiyak na cycle.

Kaya, ang dalawang algorithm na nagpapatupad ng parehong pamamaraan ay maaaring magdulot ng ganap na magkakaibang mga resulta.

Pagpapatupad ng algorithm - programa

Ang isang programa ay isang pagpapatupad, isang "embodiment" ng isang algorithm sa isa sa mga programming language. Kaya, ang pangkalahatang pamamaraan para sa pagsulat ng isang compression program (codec, i.e. compressor at decompressor), pati na rin ang anumang programa sa pangkalahatan, ay ang mga sumusunod:

1) pahayag ng problema;

2) pagpili paraan;

3) paglikha algorithm;

4) pagsulat mga programa;

5) pagsubok, pag-optimize at pagsasaayos.

Eksaktong inilalarawan ng aklat na ito ang mga pamamaraan, ngunit upang mailarawan ang mga ito, ang mga partikular na algorithm para sa isang processor ay ibinigay, na inilalarawan ng mga teksto sa C programming language.

Ngayon, ang teknolohiya ng computer ay naging mahalagang bahagi ng ating buhay. Ipinakilala nila ang maraming mga termino sa bokabularyo ng karaniwang tao, ang mga kahulugan nito ay hindi palaging malinaw sa kanya. Ngunit lahat ay gumagamit ng mga ito. Halimbawa, ano ang isang algorithm? Ang isang ordinaryong gumagamit ay hindi makakapagbigay sa iyo ng isang malinaw na sagot, ngunit ito ay kinakailangan upang malaman ito, dahil nakakaharap namin ito araw-araw.

Kasaysayan ng pinagmulan ng termino

Ang konsepto ng isang algorithm ay unang binuo ng isang mathematician na nagngangalang Muhammad Al-Khwarizmi. Nanirahan siya sa Silangan noong ika-8 at ika-9 na siglo at nagsulat ng dalawang dakilang gawa. Ang una sa kanila ay nagbigay ng salitang "algebra", at ang pangalawa - sa konsepto ng "algorithm". Ito ay nakatayo para sa mga operasyong arithmetic na kilala natin bilang karagdagan, pagbabawas, pagpaparami at paghahati. Noong 1957, sa isa sa mga edisyon ng diksyunaryo ng Ingles, itinuring ng mga may-akda na ang isang algorithm ay isang hindi napapanahong konsepto. Muli itong aktibong ginamit sa pagdating ng mga kompyuter. Tinukoy nila ang mga aksyon na bahagi ng isang partikular na proseso. Ngunit hindi ito kailangang maging matematikal lamang. Ito ay nagpapahiwatig ng isang algorithm para sa mga aksyon ng anumang kalikasan, halimbawa, paghahanda ng isang ulam. Simula noon, ang konseptong ito ay nasa labi ng halos lahat ng tao.

Mga pagtatangkang tukuyin ang termino

Sa loob ng mahabang panahon, ang terminong ito ay itinuturing na eksklusibo bilang isang algorithm para sa mga numero at pagpapatakbo sa kanila. Pagkatapos ng lahat, ang matematika mismo ay para sa karamihan ng isang inilapat na agham. Ang mga formula na ginagamit para sa mga kalkulasyon ay itinuturing na mga algorithm sa oras na iyon. Ang mga hakbang na sinundan sa paglutas ay elementarya, ngunit ang mga kalkulasyon mismo ay napakahirap at nangangailangan ng maraming oras at pagsisikap. Hindi man lang naisip ng mga mathematician ang pagtukoy sa konseptong ito. Ngunit sa paglipas ng panahon, ang agham ay umunlad nang higit pa at ang mga bagay ay lumitaw na hindi pa nakatagpo noon (matrices, vectors, sets, atbp.). Lahat sila ay kailangang maoperahan. Nagbigay ito ng lakas sa pag-unawa na ang isang algorithm ay isang kumplikadong konsepto, at kailangan itong tiyak na tukuyin para sa karagdagang paggamit. Ang mga siyentipiko ay nahahati sa isyung ito. Ang ilan ay naniniwala na ang algorithm ay maaaring mailapat sa lahat, habang ang iba ay nag-alinlangan na ang bawat problema ay malulutas sa tulong nito. Ang huling punto ng view ay naging tama, ngunit ito ay mapatunayan lamang sa pamamagitan ng pagbibigay ng isang tumpak na kahulugan ng konsepto ng "algorithm".

Ano ang ibig sabihin ng salitang "algorithm"?

Araw-araw kailangang lutasin ng isang tao ang mga problema na may iba't ibang kumplikado. Sanay na kami sa mga simpleng bagay kaya nagsasagawa kami ng mga aksyon upang awtomatikong malutas ang mga ito. Ang mga kumplikado ay nangangailangan ng maraming pag-iisip. Kapag lumitaw ang isang problema, nilulutas namin ito sa mga yugto, gumagawa ng mga hakbang. Kaya sa matematika, halimbawa, upang mahanap ang hindi alam sa isang equation, kailangan mong kumilos nang hakbang-hakbang. Ang mga operasyong ito, na unti-unting humahantong sa solusyon ng problema, ay tinatawag na isang algorithm. Ang isang algorithm ay isang pagkakasunud-sunod ng mga aksyon, na isa-isa ang mga hakbang nito. Mayroon silang isang tiyak na lugar at dapat na mahigpit na sumunod sa isa't isa. Mayroong mga klase ng mga algorithm, ang mga ito ay tinatawag na kumplikadong mga klase. Ang bawat isa sa kanila ay may kasamang isang tiyak na hanay ng mga problema na may humigit-kumulang sa parehong kumplikado ng solusyon.

Mga katangian na karaniwan sa lahat ng mga algorithm

Bilang karagdagan sa mga algorithm, maraming iba pang mga tagubilin sa ating mundo. Ngunit salamat sa ilang mga pag-aari na maaari nating makilala ito mula sa iba. Kabilang dito ang:

  • Discreteness - ang algorithm scheme ay nagbibigay para sa solusyon ng gawain sa pamamagitan ng mga sunud-sunod na aksyon na isinasagawa sa mahigpit na pagkakasunud-sunod.
  • Katiyakan - lahat ng mga kundisyon na itinakda ay malinaw at walang anumang kalabuan. Ang algorithm ng mga aksyon, samakatuwid, ay hindi nagbibigay ng puwang para sa anumang improvisasyon. Binibigyang-daan ka nitong gawin ang lahat nang mekanikal nang hindi nangangailangan ng karagdagang mga senyas.
  • Kahusayan - sa loob ng isang tiyak na bilang ng mga hakbang, palaging nagbibigay ang algorithm ng tamang solusyon sa problema.
  • Massiveness - isang algorithm ay isang solusyon sa isang problema na may pangkalahatang anyo. Ibig sabihin, naaangkop ito sa lahat ng problema ng isang partikular na klase, anuman ang source data. Pinipili ang mga ito mula sa isang partikular na field na tinatawag na "saklaw ng pagkakalapat ng algorithm."

Mga uri ng algorithm

Depende sa iba't ibang kundisyon, tulad ng layunin, landas ng solusyon, paunang data, nahahati ang mga algorithm sa:

  • Mechanical - isang matibay, tanging tamang pagkakasunud-sunod upang makamit ang kinakailangang resulta (pagtiyak ng operasyon ng engine, atbp.).
  • Flexible: 1) probabilistic - may ilang paraan para makamit ang tamang desisyon; 2) heuristic - isang scheme ng algorithm na walang malinaw na programa ng pagkilos (mga reseta, atbp.), Dahil ito ay batay sa mga personal na katangian at karanasan ng isang tao.
  • Pantulong - dating binuo at ganap na nilayon upang malutas ang isang tiyak na problema.

Algorithm sa computer science

Para sa computer science, ang mga algorithm ay partikular na kahalagahan. Sa agham na ito, nahahati sila sa mga sumusunod na uri:

  1. Linear - lahat ng mga aksyon ay isinasagawa nang sunud-sunod, isa-isa.
  2. Ang isang branching algorithm ay isa kung saan ang katuparan ng isang tiyak na kundisyon ay humahantong sa pagpili ng isa sa dalawang posibleng opsyon para sa karagdagang mga aksyon.
  3. Cyclic - ang parehong mga aksyon ay paulit-ulit sa iba't ibang pinagmulan ng data, kaya pinipili ang mga pinaka-angkop.

Istraktura ng algorithm

Ang mga algorithm ay may sariling istraktura, na karaniwang ipinapakita sa isang diagram. Ang isang algorithm diagram ay isang graphical na representasyon nito sa anyo ng magkakaugnay na mga bloke. Ang bawat isa sa kanila ay nagpapakita ng isa sa mga hakbang ng algorithm. Ang isang paglalarawan ng isang partikular na aksyon ay nakapaloob sa loob ng bawat bloke. Ang ganitong mga diagram ay karaniwang iginuhit upang mapadali ang pagprograma, dahil ang mga ito ay visual at ginagawang posible na biswal na makita ang dami ng trabaho na kailangang gawin. Ang isang tao ay maaaring maunawaan ang proseso at itama ito kahit na bago mangyari ang mga pagkakamali.

Mga panuntunan para sa pag-compile ng mga algorithm

  • Ang unang tuntunin ay kailangan mong tukuyin ang isang malaking bilang ng mga bagay na maaaring matanggap sa itinayong algorithm. Kino-convert sila ng programmer sa data gamit ang pag-encode. Pumapasok at lumabas sila. Ang unang paglilingkod upang simulan ang trabaho, ang pangalawa ay naging resulta nito. Ito ay tinatawag na pagbabago ng data.
  • Sinasabi ng pangalawang panuntunan na ang pagtatrabaho sa algorithm ay nangangailangan ng libreng memorya. Pagkatapos ng lahat, kung wala ito ay walang paraan upang maglagay ng data ng input, magtrabaho sa kanila at makakuha ng output. Ang memorya ay binubuo ng mga cell. Kung bibigyan mo ang isa sa kanila ng isang pangalan, ito ay nagiging isang variable.
  • Ang ikatlong panuntunan ay inilarawan na sa itaas bilang isa sa mga katangian ng algorithm, lalo na ang discreteness. Iyon ay, ang algorithm ay binubuo ng mga indibidwal na operasyon, o mga hakbang.
  • Ang ika-apat na panuntunan ay nagpapaalala sa atin ng determinismo ng algorithm. Iyon ay, pagkatapos ng bawat aksyon kailangan mong ipahiwatig kung ano ang susunod, o itigil ang proseso.
  • Ang huling panuntunan ay nagsasaad na pagkatapos ng isang tiyak na bilang ng mga hakbang ay nakumpleto ng algorithm ang gawain nito, na may isa o ibang resulta. At alin, ang programmer mismo ang nagpapahiwatig.

Kaya, ang isang algorithm ay isang kumplikadong konsepto na, bago ang pagdating ng mga computer, ay ginamit lamang sa matematika at itinuturing na hindi na ginagamit. Ngayon ito ay ginagamit sa lahat ng larangan ng buhay, isa sa pinakamahalaga ay ang computer science.

Halos lahat ng bagay sa ating mundo ay napapailalim sa ilang uri ng mga batas at tuntunin. Ang modernong agham ay hindi tumitigil, salamat sa kung saan ang sangkatauhan ay nakakaalam ng maraming mga formula at algorithm, na sumusunod kung saan posible na kalkulahin at muling likhain ang maraming mga aksyon at istruktura na nilikha ng kalikasan, at bigyang-buhay ang mga ideya na naimbento ng tao.

Sa artikulong ito titingnan natin ang mga pangunahing konsepto ng algorithm.

Kasaysayan ng paglitaw ng mga algorithm

Ang algorithm ay isang konsepto na lumitaw noong ika-12 siglo. Ang salitang "algorithm" mismo ay nagmula sa Latin na interpretasyon ng pangalan ng sikat na Middle Eastern mathematician na si Muhammad al-Khwarizmi, na sumulat ng aklat na "On Indian Calculus." Inilalarawan ng aklat na ito kung paano isulat nang tama ang mga natural na numero gamit ang mga Arabic numeral, at nagbibigay ng paglalarawan ng algorithm para sa pagtatrabaho sa isang column sa mga naturang numero.

Noong ika-12 siglo, ang aklat na "On Indian Accounting" ay isinalin sa Latin, at pagkatapos ay lumitaw ang kahulugang ito.

Pakikipag-ugnayan ng algorithm sa tao at makina

Ang paggawa ng algorithm ay nangangailangan ng pagkamalikhain, kaya isang buhay na nilalang lamang ang makakagawa ng bagong listahan ng mga sunud-sunod na pagkilos. Ngunit upang maisagawa ang mga umiiral nang tagubilin, hindi mo kailangang magkaroon ng imahinasyon;

Ang isang mahusay na halimbawa ng eksaktong pagsunod sa mga tagubilin ay isang walang laman na microwave oven na patuloy na gumagana sa kabila ng walang pagkain sa loob.

Ang isang paksa o bagay na hindi kailangang maunawaan ang kakanyahan ng algorithm ay tinatawag na isang pormal na tagapagpatupad. Ang isang tao ay maaari ding maging isang pormal na tagapagpatupad, ngunit kung ang isang partikular na aksyon ay hindi kapaki-pakinabang, ang isang nag-iisip na tagapagpatupad ay maaaring gawin ang lahat sa kanyang sariling paraan. Samakatuwid, ang mga pangunahing gumaganap ay mga computer, microwave oven, telepono at iba pang kagamitan. Ang konsepto ng algorithm sa computer science ay ang pinakamahalaga. Ang bawat algorithm ay pinagsama-sama sa isang partikular na paksa sa isip, na isinasaalang-alang ang mga katanggap-tanggap na aksyon. Ang mga bagay na iyon kung saan maaaring ilapat ng paksa ang mga tagubilin ay bumubuo sa kapaligiran ng tagapagpatupad.

Halos lahat ng bagay sa ating mundo ay napapailalim sa ilang uri ng mga batas at tuntunin. Ang modernong agham ay hindi tumitigil, salamat sa kung saan ang sangkatauhan ay nakakaalam ng maraming mga pormula at algorithm, na sumusunod kung saan posible na kalkulahin at muling likhain ang maraming mga aksyon at likha ng kalikasan at bigyang-buhay ang mga ideya na naimbento ng tao. Sa artikulong ito titingnan natin ang mga pangunahing konsepto ng algorithm.

Ano ang isang algorithm?

Karamihan sa mga aksyon na ginagawa natin sa ating buhay ay nangangailangan ng pagsunod sa ilang panuntunan. Ang kalidad at resulta ng pagkumpleto ng mga gawain na itinalaga sa kanya ay nakasalalay sa kung gaano katama ang ideya ng isang tao kung ano, paano at sa anong pagkakasunud-sunod ang dapat niyang gawin. Mula pagkabata, sinusubukan ng mga magulang na bumuo ng isang algorithm para sa mga pangunahing aksyon sa kanilang anak, halimbawa: gumising, mag-ayos ng kama, maghugas at magsipilyo ng ngipin, mag-ehersisyo, mag-almusal, atbp., isang listahan na isinasagawa ng isang tao sa lahat. ang kanyang buhay sa umaga ay maaari ding ituring na isang uri ng algorithm.

Algorithm - tumutukoy sa isang seleksyon ng mga tagubilin na dapat sundin ng isang tao upang malutas ang isang partikular na problema.

Sa pangkalahatan, ang algorithm ay may maraming mga kahulugan;

Kung ang algorithm na ginagamit ng isang tao araw-araw ay iba para sa lahat, at maaaring magbago depende sa edad at mga sitwasyon kung saan nahanap ng tagapalabas ang kanyang sarili, kung gayon ang hanay ng mga aksyon na kailangang gawin upang malutas ang isang problema sa matematika o gumamit ng isang diskarte ay pareho para sa lahat at palaging nananatiling hindi nagbabago.

Mayroong iba't ibang mga konsepto na naiiba din - halimbawa, para sa isang taong naghahangad ng isang layunin, at para sa teknolohiya.

Sa ating panahon ng teknolohiya ng impormasyon, araw-araw na sinusunod ng mga tao ang isang hanay ng mga tagubiling ginawa ng ibang mga tao bago sila, dahil nangangailangan ang teknolohiya ng tumpak na pagpapatupad ng ilang mga aksyon kapag ginamit. Samakatuwid, ang pangunahing gawain ng mga guro sa mga paaralan ay turuan ang mga bata na gumamit ng mga algorithm, mabilis na maunawaan at baguhin ang mga umiiral na panuntunan alinsunod sa kasalukuyang sitwasyon. Ang istraktura ng isang algorithm ay isa sa mga konsepto na pinag-aaralan sa matematika at mga klase sa computer science sa bawat paaralan.

Mga pangunahing katangian ng algorithm

1. Discreteness (pagkakasunud-sunod ng mga indibidwal na aksyon) - anumang algorithm ay dapat ipakita bilang isang serye ng mga simpleng aksyon, ang bawat isa ay dapat magsimula pagkatapos makumpleto ang nauna.

2. Katiyakan - ang bawat aksyon ng algorithm ay dapat na napakasimple at naiintindihan na ang tagapalabas ay walang anumang mga katanungan at walang kalayaan sa pagkilos.

3. Kahusayan - ang paglalarawan ng algorithm ay dapat na malinaw at kumpleto, upang matapos makumpleto ang lahat ng mga tagubilin ang gawain ay umabot sa lohikal na pagtatapos nito.

4. Mass scale - ang algorithm ay dapat na naaangkop sa isang buong klase ng mga problema na malulutas lamang sa pamamagitan ng pagpapalit ng mga numero sa algorithm. Bagaman mayroong isang opinyon na ang huling punto ay hindi nalalapat sa mga algorithm, ngunit sa lahat ng mga pamamaraan ng matematika sa pangkalahatan.

Kadalasan sa mga paaralan, upang bigyan ang mga bata ng isang mas maliwanag na paglalarawan ng mga algorithm, ang mga guro ay nagbibigay ng halimbawa ng pagluluto ayon sa isang cookbook, paggawa ng gamot ayon sa isang recipe, o ang proseso ng paggawa ng sabon batay sa isang master class. Gayunpaman, isinasaalang-alang ang pangalawang pag-aari ng algorithm, na nagsasaad na ang bawat punto ng algorithm ay dapat na maunawaan na ganap na sinumang tao at kahit na isang makina ay maaaring gumanap nito, maaari tayong makarating sa konklusyon na ang anumang proseso na nangangailangan ng pagpapakita ng hindi bababa sa ilang imahinasyon ay isang algorithm ay hindi maaaring pangalanan. Ngunit ang pagluluto at pananahi ay nangangailangan ng ilang mga kasanayan at isang mahusay na binuo imahinasyon.

Mayroong iba't ibang uri ng mga algorithm, ngunit mayroong tatlong pangunahing mga.

Round-robin algorithm

Sa ganitong uri, ang ilang mga punto ay inuulit nang maraming beses. Ang listahan ng mga aksyon na dapat ulitin upang makamit ang layunin ay tinatawag na katawan ng algorithm.

Ang pag-ulit ng loop ay ang pagpapatupad ng lahat ng mga puntos na kasama sa katawan ng loop.
Ang mga bahagi ng loop na paulit-ulit na isinasagawa sa isang tinukoy na bilang ng beses ay tinatawag na fixed-number loop.

Ang mga bahaging iyon ng cycle, na ang dalas ng pag-uulit ay depende sa ilang mga kundisyon, ay tinatawag na hindi tiyak.

Ang pinakasimpleng uri ng loop ay ang nakapirming isa.

Mayroong dalawang uri ng cyclic algorithm:

    Loop na may precondition. Sa kasong ito, sinusuri ng katawan ng loop ang kondisyon nito bago ito isagawa.

    Loop na may postcondition. Sa kondisyon check ay nangyayari pagkatapos ng dulo ng loop.

Mga linear na uri ng mga algorithm

Ang mga tagubilin ng naturang mga circuit ay isinasagawa nang isang beses sa pagkakasunud-sunod kung saan ipinakita ang mga ito. Halimbawa, ang proseso ng pag-aayos ng kama o pagsisipilyo ng iyong ngipin ay maaaring isaalang-alang. Kasama rin sa uri na ito ang mga mathematical na halimbawa kung saan ang mga operasyon ng karagdagan at pagbabawas lamang ang naroroon.

Algoritmo ng sumasanga

Sa uri ng sumasanga mayroong ilang mga pagpipilian para sa pagkilos, kung alin ang ilalapat depende sa kondisyon.

Halimbawa. Tanong: "Umuulan ba?" Mga pagpipilian sa sagot: "Oo" o "Hindi". Kung "oo," buksan ang payong kung "hindi," ilagay ang payong sa iyong bag.

Pantulong na algorithm

Ang isang auxiliary algorithm ay maaaring gamitin sa iba pang mga algorithm sa pamamagitan ng pagtukoy lamang ng pangalan nito.

Mga terminong makikita sa mga algorithm

Kundisyon ay matatagpuan sa pagitan ng mga salitang "kung" at "pagkatapos".

Halimbawa: kung alam mo ang Ingles, pagkatapos ay pindutin ang isa. Sa pangungusap na ito, ang kundisyon ay magiging bahagi ng pariralang "marunong ka sa Ingles."

Data- impormasyon na nagdadala ng isang tiyak na semantic load at ipinakita sa paraang maaari itong mailipat at magamit para sa isang ibinigay na algorithm.

Algorithmic na proseso— paglutas ng problema gamit ang isang algorithm gamit ang ilang partikular na data.

Istraktura ng algorithm

Maaaring may ibang istraktura ang algorithm. Upang ilarawan ang isang algorithm, ang konsepto kung saan ay nakasalalay din sa istraktura nito, maaari kang gumamit ng maraming iba't ibang mga pamamaraan, halimbawa: pandiwang, graphic, gamit ang isang espesyal na binuo algorithmic na wika.

Aling paraan ang gagamitin ay depende sa ilang salik: ang pagiging kumplikado ng problema, kung gaano kadetalye ang proseso ng paglutas ng problema, atbp.

Graphical na bersyon ng algorithm

Ang isang graphical algorithm ay isang konsepto na nagpapahiwatig ng agnas ng mga aksyon na kailangang isagawa upang malutas ang isang partikular na problema sa ilang mga geometric na hugis.

Hindi sila inilalarawan nang basta-basta. Upang maunawaan ng sinuman ang mga ito, madalas na ginagamit ang mga block diagram at Nussi-Schneiderman structure diagram.

Gayundin, ang mga block diagram ay inilalarawan alinsunod sa GOST-19701-90 at GOST-19.003-80.
Ang mga graphic figure na ginamit sa algorithm ay nahahati sa:

    Basic. Ang mga pangunahing larawan ay ginagamit upang ipahiwatig ang mga pagpapatakbo na kinakailangan upang iproseso ang data kapag nilulutas ang isang problema.

    Pantulong. Ang mga pantulong na larawan ay kailangan upang ipahiwatig ang indibidwal, hindi ang pinakamahalaga, mga elemento ng paglutas ng isang problema.

Sa isang graphical algorithm, ang mga bloke na ginamit upang kumatawan sa data ay tinatawag na mga bloke.

Ang lahat ng mga bloke ay pumunta sa pagkakasunud-sunod "mula sa itaas hanggang sa ibaba" at "mula sa kaliwa hanggang kanan" - ito ang tamang direksyon ng daloy. Sa tamang pagkakasunud-sunod, ang mga linya na nagkokonekta sa mga bloke ay hindi nagpapakita ng direksyon. Sa ibang mga kaso, ang direksyon ng mga linya ay ipinahiwatig gamit ang mga arrow.

Ang isang tamang algorithm scheme ay hindi dapat magkaroon ng higit sa isang output mula sa pagpoproseso ng mga bloke at mas mababa sa dalawang output mula sa mga bloke na responsable para sa pagsuri sa katuparan ng mga kundisyon.

Paano gumawa ng isang algorithm nang tama?

Ang istraktura ng algorithm, tulad ng nabanggit sa itaas, ay dapat na binuo alinsunod sa GOST, kung hindi man ay hindi ito mauunawaan at mapupuntahan ng iba.

Kasama sa pangkalahatang pamamaraan ng pag-record ang mga sumusunod na puntos:

Isang pangalan na magpapalinaw kung anong problema ang maaaring lutasin gamit ang scheme na ito.

Ang bawat algorithm ay dapat na may malinaw na tinukoy na simula at wakas.

Dapat malinaw at malinaw na inilalarawan ng mga algorithm ang lahat ng data, parehong input at output.

Kapag nag-compile ng isang algorithm, dapat mong tandaan ang mga aksyon na magbibigay-daan sa iyo upang maisagawa ang mga aksyon na kinakailangan upang malutas ang problema sa napiling data. Isang halimbawa ng algorithm:

  • Pangalan ng schema.
  • Data.
  • Magsimula.
  • Mga koponan.
  • Tapusin.

Ang tamang pagtatayo ng circuit ay lubos na mapadali ang pagkalkula ng mga algorithm.

Mga geometric na hugis na responsable para sa iba't ibang mga aksyon sa algorithm

Ang isang pahalang na hugis-itlog ay ang simula at ang wakas (isang tanda ng pagkumpleto).

Ang isang pahalang na parihaba ay isang pagkalkula o iba pang aksyon (signal ng proseso).

Pahalang na paralelogram - input o output (data sign).

Ang isang pahalang na matatagpuan na brilyante ay isang pagsusuri sa kondisyon (sign ng solusyon).

Ang isang pinahabang, pahalang na matatagpuan na heksagono ay isang pagbabago (isang tanda ng paghahanda).

Ang mga modelo ng algorithm ay ipinakita sa figure sa ibaba.

Formula-verbal na bersyon ng pagbuo ng algorithm.

Ang mga formula-verbal algorithm ay nakasulat sa libreng anyo, sa propesyonal na wika ng larangan kung saan nauugnay ang problema. Ang paglalarawan ng mga aksyon sa ganitong paraan ay isinasagawa gamit ang mga salita at mga formula.

Ang konsepto ng isang algorithm sa computer science

Sa larangan ng computer, ang lahat ay batay sa mga algorithm. Kung walang malinaw na mga tagubilin na ipinasok sa anyo ng isang espesyal na code, hindi isang solong pamamaraan o programa ang gagana. Sa mga aralin sa computer science, tinuturuan ang mga mag-aaral ng mga pangunahing konsepto ng mga algorithm, tinuturuan kung paano gamitin ang mga ito at kung paano likhain ang mga ito sa kanilang sarili.

Ang paglikha at paggamit ng mga algorithm sa computer science ay isang mas malikhaing proseso kaysa, halimbawa, pagsunod sa mga tagubilin para sa paglutas ng problema sa matematika.

Mayroon ding isang espesyal na programa na tinatawag na "Algorithm", na tumutulong sa mga taong hindi pamilyar sa programming upang lumikha ng kanilang sariling mga programa. Ang nasabing mapagkukunan ay maaaring maging isang kailangang-kailangan na katulong para sa mga nagsasagawa ng kanilang mga unang hakbang sa computer science at gustong lumikha ng kanilang sariling mga laro o anumang iba pang mga programa.

Sa kabilang banda, ang anumang programa ay isang algorithm. Ngunit kung ang algorithm ay naglalaman lamang ng mga aksyon na kailangang isagawa sa pamamagitan ng pagpasok ng iyong data, kung gayon ang programa ay naglalaman na ng handa na data. Ang isa pang pagkakaiba ay ang isang programa ay maaaring patentado at pagmamay-ari, ngunit ang isang algorithm ay hindi. Ang isang algorithm ay isang mas malawak na konsepto kaysa sa isang programa.

Konklusyon

Sa artikulong ito, sinuri namin ang konsepto ng isang algorithm at ang mga uri nito, at natutunan namin kung paano isulat nang tama ang mga graphic diagram.

Ayon sa may-akda, ang natukoy na pagkakatulad sa pagitan ng mga konsepto ng "algorithm" at "teknikal na proseso" ay isang pangunahing kalikasan at may malalayong kahihinatnan. Sa kasamaang palad, ang pagkakatulad na ito ay hindi pa nakakaakit ng sapat na atensyon mula sa mga siyentipiko, na humantong sa mga negatibong resulta at higit na nag-ambag sa paghahati ng agham sa "mga nakahiwalay na mga cell," na lumilikha ng hindi makatarungang mga hadlang sa interdisciplinary at interdisciplinary na mga contact. Ngayon, ang mga programmer at technologist (sa malawak na kahulugan ng salita, kabilang ang mga agronomist, doktor, guro, tagapamahala, atbp.) ay iba't ibang "kasta" na tumatanggap ng iba't ibang edukasyon at nagsasalita ng iba't ibang mga propesyonal na wika. Ang ganitong mga hadlang ay lubos na nagpapahirap sa pag-unawa sa isa't isa sa pagitan ng mga espesyalista kapag nilulutas ang mga problema sa automation at nagtatrabaho sa mga interdisciplinary na proyekto.

kaya, technolanguage ay isang bagong uri ng wika na pinagsasama ang mathematical rigor ng isang algorithmic na wika sa kaginhawahan ng isang wika ng cross-industry at interdisciplinary na komunikasyon, na angkop para sa isang visual na paglalarawan ng mga teknolohiya at mutual na pag-unawa sa pagitan ng mga espesyalista.

Para sa aming mga layunin ay magiging maginhawa upang tukuyin teknolohiya bilang isang aktibidad (sequence of actions) na humahantong sa isang itinakdang layunin. Sumasang-ayon sa diskarteng ito, nakakakuha kami ng pagkakataon na isaalang-alang ang algorithm at teknikal na proseso bilang mga espesyal na kaso ng teknolohiya, na nakakakuha ng katayuan ng isang generic na konsepto.

Alam na ang terminong "algorithm" ay ginagamit sa isang mas malawak na kahulugan upang kumatawan sa aktibidad ng tao sa anyo ng isang mahigpit na pagkakasunud-sunod ng mga indibidwal na elementarya na aksyon o pamamaraan, at ang isang teknolohikal na proseso ay maaaring tukuyin bilang "isang pagkakasunud-sunod ng mga aksyon (teknolohiyang operasyon) naglalayong lumikha ng isang partikular na bagay, na ang bawat isa ay batay sa anumang natural na proseso (pisikal, kemikal, biyolohikal, atbp.) at aktibidad ng tao." Ang maingat na pagsusuri sa mga ito at sa maraming iba pang mga kahulugan ay nagpapakita na ang mga konseptong pinag-aaralan ay halos nagtutugma, at ang mga umiiral na pagkakaiba ay sa isang tiyak na kahulugan ay hindi gaanong mahalaga. Sa madaling salita, ang teknolohikal na proseso at ang algorithm ay kambal na konsepto, o hindi bababa sa "malapit na kamag-anak". Upang gawing mas kapani-paniwala ang ideyang ito, susubukan naming lumayo sa tradisyonal na pananaw at magmungkahi ng mga bagong kahulugan.

Ang nabanggit na disbentaha (mga kahirapan sa pag-unawa sa isa't isa) ay maaaring humina o maalis sa pamamagitan ng paglikha ng isang solong wika na pantay na maginhawa para sa mga technologist, programmer at iba pang mga espesyalista. Ang terminong iminungkahi upang tukuyin ang wikang ito ay teknolohikal na wika(technolanguage). Ang unang kandidato para sa papel ng isang teknolohikal na wika ay DRAGON.

Dapat itong bigyang-diin na ang mga layunin ng paggamit ng teknolohikal na wika kapag bumubuo ng mga programa sa computer at mga teknikal na proseso ay iba. Sa unang kaso (paglikha ng mga programa), pinapayagan ng wika ang pagsasalin sa mga code ng makina. Sa pangalawang kaso (paglalarawan ng mga teknolohiya), dalawang sitwasyon ang posible. Kung mayroong isang awtomatikong sistema ng kontrol at ang paglalarawan ng teknolohiya ay inilaan para sa isang computer na kumokontrol sa teknikal na proseso, ang paglalarawan ay awtomatikong nagiging isang computer program, at ang bagay ay bumaba sa nakaraang kaso. Kung ang isang automated control system at isang control computer ay wala o hindi kinakailangan at samakatuwid ay hindi kailangan ang pagsasalin, ang wika ay ginagamit bilang isang paraan ng hindi malabo na paglutas ng mga problema at pagtiyak ng mutual na pag-unawa sa pagitan ng mga tao, na sa kanyang sarili ay isang lubhang mahalagang pag-aari ng wika .

Pagkakaiba sa pagitan ng algorithm at programa

Programa(computer, una sa lahat) - isang talaan ng isang pagkakasunud-sunod ng mga tagubilin na isinagawa ng isang computer.

Algorithm- isang pagtuturo na kinabibilangan ng isang tiyak na malinaw na pagkakasunud-sunod ng mga aksyon na isinagawa upang makumpleto ang isang naibigay na gawain. Ang bilang ng mga aksyon ay palaging may hangganan.

Ang pangkaraniwang pang-unawa ng user sa mga programa ay napakalimitado at nakabatay sa karanasan sa paglulunsad at pagtatrabaho sa mga application. Alam namin na may mga programmer na nagsusulat ng mga programa, at ang aming trabaho ay upang samantalahin ang mga resulta ng kanilang trabaho. Ang mga taong nagtapos sa paaralan sa isang tiyak na oras ang nakalipas ay naaalala ang mga algorithm sa konteksto ng teorya ng algebra, malabo na iniisip na ang kaalamang ito ay tiyak na hindi magiging kapaki-pakinabang. At kung tayo ay nahaharap sa intersection ng mga konseptong ito, karamihan sa atin ay nawala, hindi nakakahanap ng mga koneksyon sa pagitan ng mga algorithm at mga programa, at, samakatuwid, hindi nauunawaan ang gawain sa kamay. Minsan ang mga konseptong ito ay pinagsama, isinasaalang-alang na ang "algorithm" ay isang mas propesyonal at tumpak na pagtatalaga ng "programa". Upang punan ang mga puwang sa mga ideya, tingnan natin kung ano ang nasa likod ng terminolohiya.

Ang isa pang pagkakaiba sa pagitan ng isang programa at isang algorithm ay ang paghawak ng partikular na data sa panahon ng pagpapatupad. Kung ang algorithm ay isang paglalarawan lamang ng mga aksyon na kinakailangan upang makamit ang layunin, kung gayon ang programa ay naglalaman din ng isang paglalarawan ng data. Ang algorithm ay maaaring napakalaking, iyon ay, nilayon upang malutas hindi isang problema, ngunit isang klase ng mga problema. Kasabay nito, ang mga katangian nito ay kinabibilangan din ng discreteness at katiyakan. Ang algorithm ay nagsasangkot ng pagsasagawa ng mga elementarya na aksyon sa elementarya na mga bagay, ngunit ang pagiging elementarya ay magiging iba para sa iba't ibang mga gumaganap.

Ang pagkakaiba sa pagitan ng isang algorithm at isang programa ay malinaw mula sa terminolohiya. Tila na sa parehong mga kaso ay nakikita natin ang maayos na mga aksyon na humahantong sa huling resulta. Tulad ng malinaw mula sa mga kahulugan, ang isang programa ay maaaring binubuo ng ilang mga algorithm, ngunit ang "pangkalahatan - tiyak" na hierarchy ay hindi makikita dito. Ang algorithm ay karaniwang anumang pagtuturo na malinaw na naglilista ng mga aksyon. Halimbawa, upang mag-ipon ng cabinet. Siyempre, hindi ito magiging isang programa. Ang algorithm ay maaaring umiiral sa anumang anyo: maaari itong matandaan, isinulat sa isang kuwaderno, sketch sa anyo ng isang diagram, idinidikta, dahil ito ay batay sa isang lohikal na bahagi, hindi isang pormal. Ang isang programa ay isang pormal na konsepto. Ito ay tiyak na isang talaan ng isang hanay ng mga algorithm, at isang talaan sa isa sa mga programming language na mauunawaan ng isang computer. Ito ay maaaring hindi lamang ang aming karaniwang computer, kundi pati na rin ang control unit ng anumang device. Kaya, ang isang algorithm ay maaaring tukuyin bilang isang paraan o pamamaraan para sa pagpapatupad ng isang ideya, isang programa - bilang pagpapatupad nito sa pamamagitan ng mga tiyak na paraan.

Ang konsepto ng isang algorithm ay mas malawak kaysa sa isang programa: isang pangunahing konsepto ng matematika. Ang isang computer program ay isang bagay ng mga karapatan sa intelektwal na ari-arian, ngunit ang isang algorithm ay hindi isa sa mga ito.

Ang mga pangunahing pagkakaiba sa pagitan ng proteksyon sa paggawa at kaligtasan sa trabaho

  • tasahin ang panganib ng isang mapanganib na sitwasyon na nagaganap sa proseso ng trabaho, bumuo ng mga hakbang upang maiwasan ito;
  • gumuhit ng mga tagubilin sa kaligtasan;
  • magturo ng mga paraan at pamamaraan ng ligtas na trabaho;
  • magsagawa ng pagsasanay sa empleyado.

Ang tanong kung paano naiiba ang kaligtasan ng mga tauhan sa kaligtasan sa trabaho ay interesado sa maraming tao na sumasailalim sa pagsasanay sa unang pagkakataon sa isang bagong lugar ng trabaho. Ang dalawang konseptong ito ay kadalasang ginagamit nang magkasama, ngunit mayroon silang magkaibang kahulugan. Upang maunawaan ang kanilang pagkakatulad at pagkakaiba, kailangan mong alamin ang mga gawain ng kalusugan at kaligtasan sa trabaho at tukuyin ang mga pamamaraan para sa paglutas ng mga ito.

  • mga pamantayan sa kaligtasan sa lugar ng trabaho;
  • mga code at regulasyon ng gusali;
  • sanitary norms at rules;
  • mga pamantayan sa disenyo ng teknolohiya;
  • iba pang mga tuntunin at tagubilin na binuo ng mga awtoridad sa pangangasiwa.

Ang kaligtasan at kalusugan sa trabaho ay naglalayong mapanatili ang pinakamahalagang mapagkukunan ng estado - mga mapagkukunan ng tao. Ito ay itinuturing na isa sa mga elemento ng panlipunang proteksyon, na nagpapahintulot sa mga mamamayan na mapagtanto ang kanilang mga karapatan.

Kasabay nito, ang pagsunod sa mga garantiyang itinatag ng estado ay sapilitan.

  1. Ang gawain ng kaligtasan sa trabaho ay protektahan laban sa mga nakakapinsalang pisikal na impluwensya sa lugar ng trabaho.
  2. Ang karapatang magtrabaho sa mga kondisyong nakakatugon sa mga itinatag na pamantayan. Pag-secure ng mga kinakailangang ito sa kasunduan sa trabaho.
  3. Ang pagsuspinde ng trabaho para sa panahon ng pag-aalis ng mga paglabag sa proteksyon sa paggawa na lumitaw dahil sa kasalanan ng negosyo. Sa panahong ito, ang empleyado ay dapat bayaran ng sahod at panatilihin ang kanyang trabaho.
  4. Kung may mga salik na mapanganib sa kalusugan, bigyan ang mamamayan ng ibang lugar ng trabaho o magbayad para sa downtime.
  5. Pagbabawal sa pagtatrabaho nang walang probisyon ng kagamitang pang-proteksiyon.

Kabayaran para sa pinsala sa kalusugan na dulot ng trabaho dahil sa kasalanan ng employer.

Ang futsal at mini-football ay dalawang magkatulad, ngunit sa parehong oras ay magkaibang mga laro sa palakasan. Bago maunawaan kung ano ang mga ito, napakahalaga na bigyang-pansin ang maraming mga nuances.

Ang kagamitan sa laro ay isa sa pinakamahalagang katangian sa palakasan. Para sa futsal, ang mga sumusunod na parameter ng bola na ginamit ay ipinapalagay:

Paano naiiba ang mga preposisyon sa mga prefix (pangunahing pagkakaiba)

Mga halimbawa ng mga salita na may prefix sa ilalim-: boletus, aspen boletus, cup holder, baba, undergrowth, underground, window sill, suspension, litter, stand, adjustment, support, entrance, approach, delivery, undercut, undercut, suspension, atbp.

  • Ang unlapi ay bahagi ng isang salita na nauuna sa ugat at nagsisilbing pagbuo ng bagong salita.
  • Ang pang-ukol ay isang functional na bahagi ng pananalita na nag-uugnay sa mga salita sa isa't isa.

5) Gawing mga salita na may prefix ang mga pariralang may preposisyon:

  • Kinabukasan ay dumating ang lahat sa oras(dumating sa oras kailan?) – ang kahulugan ng pang-abay.
  • Ang pagpupulong ay naka-iskedyul para bukas(appointed for what time?) – kahulugan ng pangngalan.
  • genus. n. - nakaya (nang walang ano?) nang walang mga pagkakamali;
  • alak p. – binayaran (para sa ano?) para sa kuryente;
  • petsa n. - nagpunta (para sa ano?) para sa tinapay;
  • TV n. - nakilala (kanino?) isang kaibigan;
  • atbp - naisip (tungkol saan?) tungkol sa negosyo.

Ang pagiging ganap na magkakaibang mga yunit ng wika, ang mga prefix at preposisyon ay tinukoy bilang mga sumusunod:

Ano ang pagkakaiba ng futsal at futsal?

  1. Ang haba ng field ay dapat mula dalawampu't walo hanggang apatnapung metro.
  2. Ang lapad ay maaaring mula labing-anim hanggang dalawampung metro.
  3. Ang lugar ng parusa ay isang kalahating bilog na lugar. Dapat mong tandaan na hindi ka maaaring pumasok sa teritoryong ito, dahil kung hindi, ang mga patakaran ng laro ng futsal ay malalabag.
  4. Kailangang pahabain ng anim na metro mula sa linya ng layunin.
  5. Ang lahat ng mga gilid ng lugar ng parusa ay may mga espesyal na kurba.
  6. Ang mga sukat ng gate ay maaaring ang mga sumusunod: taas - 2 metro, haba - 3 metro.

Sa bawat kaso, ang futsal ay nagsasangkot ng isang partikular na diskarte sa paglalaro. Tanging kung ang lahat ng mga patakaran ay isinasaalang-alang maaari mong asahan na makamit ang pinakamahusay na mga resulta.

Posibleng gumamit ng mas maliit na bola. Bilang karagdagan, ang mga katangian ng isang sports projectile ay maaaring maging mas maliit, bilang isang resulta kung saan ang rebound ay nagiging mas mahina.

Ang isang maliit na field ay agad na nagdidikta ng isang tiyak na ritmo ng gameplay. Walang oras para sa anumang pagmuni-muni. Ang gameplay ay dapat na mabilis at teknikal. Ang isang mababang antas ng pakikipag-ugnay ay inaasahan, bilang isang resulta kung saan ang mini-football ay maaaring maging mas malapit sa panloob na sports. Ang distansya mula sa klasikong football ay higit sa lahat dahil sa pangangailangan para sa gameplay sa isang maliit na field at ang patuloy na paggalaw ng lahat ng mga manlalaro. Ang manlalaro ay inaasahang makakaramdam ng tiwala sa pag-atake at pagtatanggol sa personal na teritoryo. Para sa kadahilanang ito, ang mga kinatawan ng klasikal na football, na palaging nagaganap sa isang malaking lugar, tandaan ang binibigkas na kakulangan sa ginhawa sa bulwagan.

  • Ang circumference ay hindi dapat lumampas sa 58 - 60 sentimetro.
  • Ang timbang ay maaaring 430 - 460 gramo. Kung ang mga babae o bata ay sumali sa futsal, ang timbang ay maaaring mabawasan sa 380 gramo.
  • Ang presyon ay dapat na 0.6 - 0.7 atmospheres, dahil sa kung saan ang unang rebound ng bola na ginamit ay makakatulong sa tamang proseso ng paglalaro.

Ang futsal ay isang laro ng koponan, na ginagawang kapana-panabik kaagad ang gameplay. Ang bilang ng mga kalahok sa bawat panig ay umabot sa 5. Ang bawat manlalaro ay dapat gampanan lamang ang kanyang mga tiyak na tungkulin.

Pamamaraan ng pangangasiwa ng insulin: algorithm at pagkalkula, setting ng dosis sa insulin therapy

Ito ay itinatag na, sa pangkalahatan, ang pang-araw-araw na pangangailangan para sa mga pasyente na may diyabetis ay hindi lalampas sa isang yunit ng hormone bawat kilo ng timbang ng katawan. Kung lumampas ang threshold na ito, tumataas ang posibilidad ng mga komplikasyon.

Ngunit dahil ang pag-andar nito ay may kapansanan, ang panloob na organo ay hindi na maaaring gumana sa parehong, ganap na mode, ang produksyon ng hormone ay mabagal, at ito ay ginawa sa maliit na dami. Lumalala ang kondisyon ng tao, at sa paglipas ng panahon ang nilalaman ng sariling insulin ay lumalapit sa zero.

Algorithm

Kadalasan, ang isang tiyak na mekanismo (computer, lathe, sewing machine) ay gumaganap bilang isang tagapalabas, ngunit ang konsepto ng isang algorithm ay hindi kinakailangang sumangguni sa mga programa sa computer, halimbawa, ang isang malinaw na inilarawan na recipe para sa paghahanda ng isang ulam ay isa ring algorithm, kung saan kaso ang performer ay tao.

Ang konsepto ng isang algorithm ay tumutukoy sa inisyal, pangunahing, pangunahing konsepto ng matematika. Ang mga prosesong computational ng isang algorithmic na kalikasan (mga pagpapatakbo ng aritmetika sa mga integer, paghahanap ng pinakamalaking karaniwang divisor ng dalawang numero, atbp.) ay kilala sa sangkatauhan mula noong sinaunang panahon. Gayunpaman, ang tahasang konsepto ng isang algorithm ay nabuo lamang sa simula ng ika-20 siglo.

Ang bahagyang pormalisasyon ng konsepto ng isang algorithm ay nagsimula sa mga pagtatangka upang malutas ang problema sa paglutas (German. Entscheidungsproblema), na binuo ni David Hilbert noong 1928. Ang mga sumusunod na hakbang sa pormalisasyon ay kinakailangan upang tukuyin ang isang mahusay na pagkalkula o "mahusay na pamamaraan"; kabilang sa mga naturang pormalisasyon ang Gödel-Herbrand-Kleene recursive function, ang λ-calculus ng Alonzo Church, ang 1936 Formulation 1 ng Emil Post, at ang Turing machine. Sa pamamaraan, ang algorithm ay isang pangunahing konsepto at tumatanggap ng isang qualitatively na bagong konsepto bilang pinakamainam habang lumalapit ito sa hinulaang ganap. Sa modernong mundo, ang isang algorithm sa pormal na pagpapahayag ay bumubuo ng batayan ng edukasyon batay sa mga halimbawa, sa pamamagitan ng pagkakatulad. Batay sa pagkakapareho ng mga algorithm sa iba't ibang larangan ng aktibidad, nabuo ang konsepto (teorya) ng mga expert system.

Kasaysayan ng termino

Ang modernong pormal na kahulugan ng isang algorithm ay ibinigay noong 30-50s ng ika-20 siglo sa mga gawa ng Turing, Post, Church (Church-Turing thesis), N. Wiener, A. A. Markov.

Ang salitang "algorithm" mismo ay nagmula sa pangalan ng siyentipikong Khorezm na si Abu Abdullah Muhammad ibn Musa al-Khorezmi (algorithm - al-Khorezmi). Sa paligid ng 825, nagsulat siya ng isang sanaysay kung saan una niyang inilarawan ang positional decimal number system na naimbento sa India. Sa kasamaang palad, ang orihinal na Persian ng aklat ay hindi nakaligtas. Binuo ni Al-Khwarizmi ang mga tuntunin ng pagkalkula sa bagong sistema at marahil ang unang gumamit ng numero 0 upang ipahiwatig ang nawawalang posisyon sa notasyon ng isang numero (ang pangalan nito sa India ay isinalin ng mga Arabo bilang bilang-sifr o kaya lang sifr, kaya mga salita tulad ng "digit" at "cipher"). Sa paligid ng parehong oras, ang iba pang mga Arab iskolar ay nagsimulang gumamit ng Indian numeral. Sa unang kalahati ng ika-12 siglo, ang aklat ni al-Khwarizmi sa isang salin sa Latin ay tumagos sa Europa. Ang tagasalin, na ang pangalan ay hindi nakarating sa amin, ang nagbigay ng pangalan nito Algorithm ng numero ng Indorum(“Algorithm tungkol sa pagbibilang ng Indian”). Sa Arabic ang aklat ay tinawag Kitab al-jabr wal-muqabala(“Isang Aklat sa Pagdaragdag at Pagbabawas”). Ang salitang Algebra (algebra - al-jabr - completion) ay nagmula sa orihinal na pamagat ng libro.

Sa gayon, nakikita natin na ang Latinized na pangalan ng siyentipikong Gitnang Asya ay kasama sa pamagat ng libro, at ngayon ay pinaniniwalaan na ang salitang "algorithm" ay pumasok sa mga wikang European nang tumpak salamat sa gawaing ito. Gayunpaman, ang tanong ng kahulugan nito ay nagdulot ng matinding debate sa mahabang panahon. Sa paglipas ng maraming siglo, iba't ibang paliwanag ang ibinigay para sa pinagmulan ng salita.

May mga nagdala algorithmism mula sa Griyego algiros(may sakit) at arithmos(numero). Mula sa paliwanag na ito ay hindi masyadong malinaw kung bakit ang mga numero ay "may sakit". O itinuring ba ng mga linguist na may sakit ang mga taong nasawi sa paggawa ng mga kalkulasyon? Ang encyclopedic dictionary nina Brockhaus at Efron ay nag-alok din ng paliwanag nito. Sa loob nito algorithm(nga pala, bago ang rebolusyon ginamit ang spelling algorithm, sa pamamagitan ng fita) ay hinango "mula sa salitang Arabik na Al-Goretm, ibig sabihin, ang ugat." Siyempre, ang mga paliwanag na ito ay halos hindi maituturing na kapani-paniwala.

Ang nabanggit na salin ng akda ni al-Khwarizmi ang naging unang tanda, at sa mga sumunod na siglo marami pang ibang gawa ang lumitaw na nakatuon sa parehong isyu - nagtuturo ng sining ng pagbibilang gamit ang mga numero. At lahat sila ay may salita sa pamagat algorithm o algorithmi.

Nang maglaon, walang alam ang mga may-akda tungkol kay al-Khorezmi, ngunit dahil ang unang pagsasalin ng aklat ay nagsisimula sa mga salitang: "Dixit algorizmi: ..." ("Sinabi ni Al-Khorezmi: ..."), iniugnay pa rin nila ang salitang ito sa pangalan ng isang tiyak tao. Ang isang napaka-karaniwang bersyon ay ang Griyego na pinagmulan ng aklat. Sa isang ika-13 siglong Anglo-Norman na manuskrito, na isinulat sa taludtod, mababasa natin:

Ang algorithm ay ang sining ng pagbibilang gamit ang mga numero, ngunit sa una ang salitang "digit" ay tumutukoy lamang sa zero. Ginamit ng sikat na French trouver na si Gautier de Coincy (1177-1236) ang mga salita algorismus-cipher(na nangangahulugang bilang 0) bilang isang metapora para sa pagkilala sa isang ganap na walang halaga na tao. Malinaw, ang pag-unawa sa gayong imahe ay nangangailangan ng angkop na pagsasanay para sa mga tagapakinig, na nangangahulugan na ang bagong sistema ng numero ay kilala na sa kanila.

Sa loob ng maraming siglo, ang abacus ay halos ang tanging paraan para sa mga praktikal na kalkulasyon; Ang mga merito ng mga kalkulasyon sa isang counting board ay ipinaliwanag sa kanyang mga sulatin ng isang namumukod-tanging palaisip gaya ni Herbert ng Avrilak (938-1003), na naging Papa noong 999 sa ilalim ng pangalan ni Sylvester II. Ang bago ay nakahanap ng paraan nang may matinding kahirapan, at ang kasaysayan ng matematika ay kasama ang isang matigas na paghaharap sa pagitan ng mga kampo ng mga algorismist at abacist (minsan ay tinatawag na Herbeckists), na nagtaguyod ng paggamit ng abacus sa halip na mga Arabic numeral para sa mga kalkulasyon. Ito ay kagiliw-giliw na ang sikat na Pranses na matematiko na si Nicolas Chuquet (1445-1488) ay ipinasok sa rehistro ng mga nagbabayad ng buwis ng lungsod ng Lyon bilang isang algoriste. Ngunit higit sa isang siglo ang lumipas bago ang bagong paraan ng pagbibilang ay naitatag sa wakas ng napakaraming oras upang bumuo ng mga karaniwang tinatanggap na mga notasyon, upang mapabuti at iangkop ang mga paraan ng pagkalkula sa pagrekord sa papel. Sa Kanlurang Europa, ang mga guro ng aritmetika ay patuloy na tinawag na "mga master ng abacus" hanggang sa ika-17 siglo, tulad ng matematiko na si Niccolò Tartaglia (1500-1557).

Kaya, tinawag ang mga gawa sa sining ng pagbibilang Mga algorithm. Sa maraming daan-daan, maaaring isa-isa ng isa ang mga di-pangkaraniwang bilang isang treatise na nakasulat sa taludtod Carmen de Algorismo(Latin carmen at nangangahulugang tula) ni Alexander de Villa Dei (d. 1240) o ang aklat-aralin ng Viennese astronomer at mathematician na si Georg Peurbach (1423-1461) Opus algorismi jocundissimi(“Ang pinakanakakatawang sanaysay sa isang algorithm”).

Unti-unting lumawak ang kahulugan ng salita. Sinimulan itong ilapat ng mga siyentipiko hindi lamang sa puro computational, kundi pati na rin sa iba pang mga mathematical procedure. Halimbawa, noong mga 1360, ang pilosopong Pranses na si Nicolaus Oresme (1323/25-1382) ay nagsulat ng isang mathematical treatise Algorismus proportionum("Pagkalkula ng Mga Proporsyon"), kung saan ginamit niya ang mga kapangyarihan na may mga fractional exponents sa unang pagkakataon at talagang lumapit sa ideya ng logarithms. Nang ang abacus ay pinalitan ng tinatawag na line counting, maraming mga manwal dito ang nagsimulang tawagin Algorithmus linearis, iyon ay, ang mga patakaran para sa pagbibilang ng mga linya.

Mapapansin na ang orihinal na anyo algorithmi pagkaraan ng ilang oras, nawala ang huling titik, at ang salita ay nakakuha ng isang anyo na mas maginhawa para sa pagbigkas sa Europa algorithmism. Nang maglaon, ito, sa turn, ay napapailalim sa pagbaluktot, malamang na nauugnay sa salita aritmetika.

Turing machine

Ang pangunahing ideya sa likod ng isang Turing machine ay napaka-simple. Ang Turing machine ay isang abstract machine (automaton) na gumagana sa isang tape ng mga indibidwal na cell kung saan nakasulat ang mga simbolo. Ang makina ay mayroon ding ulo para sa pagsusulat at pagbabasa ng mga character mula sa mga cell, na maaaring gumalaw kasama ang tape. Sa bawat hakbang, binabasa ng makina ang isang karakter mula sa cell na itinuro ng ulo at, batay sa nabasang karakter at panloob na estado, gagawin ang susunod na hakbang. Kasabay nito, maaaring baguhin ng makina ang estado nito, magsulat ng isa pang character sa isang cell, o ilipat ang ulo ng isang cell sa kanan o kaliwa.

Batay sa pag-aaral ng mga makinang ito, ang tesis ni Turing (ang pangunahing hypothesis ng mga algorithm) ay iniharap:

Ang tesis na ito ay isang axiom, isang postulate, at hindi mapapatunayan ng mga pamamaraan ng matematika, dahil ang isang algorithm ay hindi isang eksaktong konsepto ng matematika.

Mga recursive function

Ang bawat algorithm ay maaaring iugnay sa function na kino-compute nito. Gayunpaman, ang tanong ay lumitaw: posible bang iugnay ang isang di-makatwirang pag-andar sa isang Turing machine, at kung hindi, kung gayon para sa anong mga pag-andar mayroong isang algorithm? Ang pananaliksik sa mga tanong na ito ay humantong sa paglikha ng teorya ng recursive function noong 1930s.

Ang klase ng mga computable function ay isinulat sa isang imahe na nakapagpapaalaala sa pagbuo ng ilang axiomatic theory batay sa isang sistema ng mga axiom. Una, ang pinakasimpleng mga pag-andar ay pinili, ang pagkalkula kung saan ay halata. Pagkatapos ay ang mga patakaran (mga operator) para sa pagbuo ng mga bagong function batay sa mga umiiral na ay binuo. Ang kinakailangang klase ng mga function ay binubuo ng lahat ng mga function na maaaring makuha mula sa pinakasimpleng gamit ang mga operator.

Katulad ng thesis ni Turing, isang hypothesis ang iniharap sa teorya ng computational function na tinatawag na Thesis ng simbahan:

Ang pagpapatunay na ang klase ng mga computable function ay tumutugma sa Turing computable functions ay nangyayari sa dalawang hakbang: una, pinatutunayan nila ang pagkalkula ng pinakasimpleng function sa isang Turing machine, at pagkatapos ay ang pagkalkula ng mga function na nakuha bilang resulta ng paglalapat ng mga operator.

Kaya, impormal, ang isang algorithm ay maaaring tukuyin bilang isang tiyak na sistema ng mga tagubilin na tumutukoy sa isang discrete, deterministic na proseso na humahantong mula sa isang paunang data (input) sa isang nais na resulta (output), kung ito ay umiiral, sa isang limitadong bilang ng mga hakbang; kung ang nais na resulta ay hindi umiiral, ang algorithm ay maaaring hindi nakumpleto o umabot sa isang dead end.

Normal na Markov algorithm

Ang normal na Markov algorithm ay isang sistema ng mga sunud-sunod na aplikasyon ng mga pagpapalit na nagpapatupad ng ilang mga pamamaraan para sa pagkuha ng mga bagong salita mula sa mga pangunahing salita na binuo mula sa mga character ng isang tiyak na alpabeto. Tulad ng Turing machine, normal na mga algorithm huwag gawin ang mga kalkulasyon sa kanilang sarili: nagsasagawa lamang sila ng mga pagbabago sa salita sa pamamagitan ng pagpapalit ng mga titik ayon sa ibinigay na mga panuntunan.

Karaniwang computable ay isang function na maaaring ipatupad ng isang normal na algorithm. Ibig sabihin, isang algorithm na nagpapalit ng bawat salita mula sa hanay ng wastong data ng isang function sa mga orihinal na halaga nito.

Ang lumikha ng teorya ng mga normal na algorithm, si A. A. Markov, ay naglagay ng hypothesis na tinatawag na Markov normalization principle:

Tulad ng tesis ni Turing at ng Simbahan, ang prinsipyo ng normalisasyon ni Markov ay hindi mapapatunayan sa matematika.

Stochastic algorithm

Gayunpaman, ang pormal na kahulugan sa itaas ng isang algorithm ay maaaring masyadong mahigpit sa ilang mga kaso. Minsan may pangangailangan na gumamit ng mga random na variable. Ang isang algorithm na ang operasyon ay tinutukoy hindi lamang ng paunang data, kundi pati na rin ng mga halaga na nakuha mula sa isang random na generator ng numero ay tinatawag na stochastic(o randomized, mula sa English. randomized na algorithm). Sa pormal, ang mga naturang algorithm ay hindi matatawag na mga algorithm, dahil may posibilidad (malapit sa zero) na hindi sila titigil. Gayunpaman, ang mga stochastic na algorithm ay kadalasang mas epektibo kaysa sa mga deterministiko, at sa ilang mga kaso ang mga ito ay ang tanging paraan upang malutas ang isang problema.

Sa pagsasagawa, sa halip na isang random number generator, isang pseudorandom number generator ang ginagamit.

Gayunpaman, ang isa ay dapat na makilala sa pagitan ng stochastic algorithm at mga pamamaraan na nagbibigay ng tamang resulta na may mataas na posibilidad. Hindi tulad ng pamamaraan, ang algorithm ay nagbibigay ng mga tamang resulta kahit na pagkatapos ng matagal na trabaho.

Inaamin ng ilang mananaliksik ang posibilidad na ang isang stochastic algorithm ay magbibigay ng hindi tamang resulta na may ilang kilalang probabilidad. Pagkatapos, ang mga stochastic algorithm ay maaaring nahahati sa dalawang uri:

  • mga algorithm parang Las Vegas palaging nagbibigay ng tamang resulta, ngunit ang kanilang oras ng pagpapatakbo ay hindi tinukoy.
  • mga algorithm Uri ng Monte Carlo, hindi katulad ng mga nauna, ay maaaring magbigay ng mga maling resulta na may alam na posibilidad (madalas silang tinatawag na Mga pamamaraan ng Monte Carlo).

Iba pang mga pormalisasyon

Para sa ilang mga problema, ang mga pormalisasyon sa itaas ay maaaring maging mahirap na makahanap ng mga solusyon at magsagawa ng pananaliksik. Upang malampasan ang mga hadlang, parehong mga pagbabago ng "klasikal" na mga scheme at mga bagong modelo ng algorithm ay nilikha. Sa partikular, maaari nating pangalanan ang:

  • multi-tape at non-deterministic Turing machine;
  • register at RAM machine - isang prototype ng mga modernong computer at virtual machine;

at iba pa.

Mga pormal na katangian ng mga algorithm

Ang iba't ibang kahulugan ng isang algorithm, tahasan man o hindi, ay naglalaman ng sumusunod na serye ng mga pangkalahatang kinakailangan:

Mga uri ng algorithm

Ang isang espesyal na papel ay ginagampanan ng mga inilapat na algorithm na idinisenyo upang malutas ang ilang mga inilapat na problema. Itinuturing na tama ang isang algorithm kung natutugunan nito ang mga kinakailangan ng problema (halimbawa, nagbibigay ito ng pisikal na makatotohanang resulta). Ang isang algorithm (programa) ay naglalaman ng mga error kung para sa ilang paunang data ay nagbibigay ito ng mga maling resulta, pagkabigo, pagkabigo, o hindi gumagawa ng anumang mga resulta. Ang huling thesis ay ginagamit sa algorithmic programming olympiads upang suriin ang mga programang pinagsama-sama ng mga kalahok.

Ang kaso kapag ang resulta ng pagsusuri ng isang function ay isang lohikal na expression na "true" o "false" (o ang set (0, 1)) ay tinatawag na problema, na maaaring malutas o hindi malulutas depende sa computability ng function.

Mahalagang tukuyin nang tumpak ang wastong hanay ng data ng pag-input, dahil ang isang problema ay maaaring malutas para sa isang set at hindi malulutas para sa isa pa.

Isa sa mga unang problemang napatunayang hindi malulutas ay ang paghinto ng problema. Ito ay nabuo bilang mga sumusunod:

Ang pagpapatunay sa hindi malulutas ng paghinto ng problema ay mahalaga dahil ang iba pang mga problema ay maaaring mabawasan dito. Halimbawa, ang simpleng problema sa paghinto ay maaaring bawasan sa paghinto sa problema sa walang laman na linya (kung saan kailangan mong tukuyin para sa isang partikular na Turing machine kung ito ay titigil kung tatakbo sa walang laman na linya), at sa gayon ay nagpapatunay sa kawalan ng katiyakan ng huli. .

Pagsusuri ng Algorithm

Kasabay ng pagkalat ng teknolohiya ng impormasyon, ang panganib ng mga pagkabigo ng software ay tumaas. Ang isa sa mga paraan upang maiwasan ang mga pagkakamali sa mga algorithm at ang kanilang mga pagpapatupad ay upang patunayan ang kawastuhan ng mga sistema gamit ang mga paraan ng matematika.

Ang paggamit ng mathematical apparatus para sa pagsusuri ng mga algorithm at ang kanilang mga pagpapatupad ay tinatawag na mga pormal na pamamaraan. Ang mga pormal na pamamaraan ay kinabibilangan ng paggamit ng mga pormal na detalye at, kadalasan, isang hanay ng mga tool para sa pag-parse at pagpapatunay ng mga katangian ng mga pagtutukoy. Ang pag-abstract mula sa mga detalye ng pagpapatupad ay nagbibigay-daan sa mga katangian ng isang system na maitatag nang hiwalay sa pagpapatupad nito. Bilang karagdagan, ang katumpakan at hindi malabo ng mga mathematical na pahayag ay iniiwasan ang polysemy at imprecision ng mga natural na wika.

Ayon sa hypothesis ni Richard Mace, "avoiding mistakes is better than eliminating mistakes." Ayon sa hypothesis ni Hoare, "ang patunay ng mga programa ay nalulutas ang problema ng kawastuhan, dokumentasyon, at pagiging tugma." Ang pagpapatunay sa kawastuhan ng mga programa ay nagbibigay-daan sa amin na matukoy ang kanilang mga katangian kaugnay ng buong hanay ng data ng input. Para sa layuning ito, ang konsepto ng kawastuhan ay nahahati sa dalawang uri:

  • Bahagyang kawastuhan- ang programa ay nagbibigay ng tamang resulta para sa mga kasong iyon kapag ito ay natapos.
  • Kumpletong kawastuhan- ang programa ay nagtatapos at gumagawa ng tamang resulta para sa lahat ng elemento sa saklaw ng input.

Sa panahon ng patunay ng kawastuhan, ang teksto ng programa ay inihambing sa mga detalye ng nais na relasyon sa input-output. Para sa mga patunay na uri ng Hoare, ang detalyeng ito ay nasa anyo ng mga pahayag na tinatawag na preconditions at postconditions. Kasama ng programa mismo, tinawag din silang triple ni Hoare. Ang mga pahayag na ito ay naitala

P{Q} R

saan P- ito ay isang paunang kondisyon na dapat matugunan bago magsimula ang programa Q, A R- isang postcondition na may bisa pagkatapos makumpleto ang programa.

Matagumpay na nailapat ang mga pormal na pamamaraan sa isang malawak na hanay ng mga problema, lalo na: disenyo ng electronic circuit, artificial intelligence, mga awtomatikong sistema ng tren, pag-verify ng microprocessor, pagtutukoy ng mga pamantayan at pagtutukoy at pag-verify ng programa.

Mga oras ng pagbubukas

Ang isang karaniwang pamantayan para sa pagsusuri ng mga algorithm ay ang oras ng pagpapatakbo at ang pagkakasunud-sunod kung saan tumataas ang oras ng pagpapatakbo depende sa dami ng data ng input.

Para sa bawat tiyak na gawain, bumubuo sila ng isang tiyak na numero, na tinatawag na laki nito. Halimbawa, ang laki ng problema sa pagkalkula ng produkto ng mga matrice ay maaaring ang pinakamalaking sukat ng mga kadahilanan ng matrix para sa mga problema sa mga graph, ang laki ay maaaring ang bilang ng mga gilid ng graph;

Ang oras na ginugugol ng isang algorithm bilang isang function ng laki ng problema ay tinatawag na pagiging kumplikado ng oras ng algorithm na iyon T(n). Ang asymptotic na pag-uugali ng function na ito habang lumalaki ang laki ng problema ay tinatawag na asymptotic time complexity, at isang espesyal na notasyon ang ginagamit upang tukuyin ito.

Ito ay ang asymptotic complexity na tumutukoy sa laki ng mga problema na kayang hawakan ng algorithm. Halimbawa, kung ang isang algorithm ay nagpoproseso ng data ng input ng laki sa oras cn², saan c ay ilang pare-pareho, pagkatapos ay sinasabi nila na ang pagiging kumplikado ng oras ng naturang algorithm O(n²).

Kadalasan, sa panahon ng pagbuo ng isang algorithm, ang mga pagtatangka ay ginawa upang bawasan ang asymptotic time complexity para sa pinakamasamang kaso. Sa pagsasagawa, may mga kaso kapag ang isang algorithm na "karaniwan" ay gumagana nang mabilis ay sapat.

Sa halos pagsasalita, ang average na asymptotic time complexity analysis ay maaaring nahahati sa dalawang uri: analytical at statistical. Ang analytical na paraan ay nagbibigay ng mas tumpak na mga resulta, ngunit mahirap gamitin sa pagsasanay. Ngunit ang istatistikal na paraan ay nagbibigay-daan sa iyo upang mabilis na pag-aralan ang mga kumplikadong problema.

Ang sumusunod na talahanayan ay naglilista ng mga karaniwang asymptotic na paghihirap sa mga komento.


Pagiging kumplikado Magkomento Mga halimbawa
O(1) Pare-parehong runtime na hindi nakasalalay sa laki ng gawain Inaasahang oras ng paghahanap sa isang hash table
O(log log n) Napakabagal na oras ng paglago ay kinakailangan Inaasahang oras ng pagtakbo ng interpolating na paghahanap n elemento
O(log n) Logarithmic growth - ang pagdodoble sa laki ng isang problema ay nagpapataas ng oras ng pagtakbo sa pamamagitan ng isang pare-parehong halaga Pagkalkula x n; Binary na paghahanap sa isang hanay ng n elemento
O(n) Linear growth - ang pagdodoble sa laki ng gawain ay magdodoble sa oras na kinakailangan Pagdaragdag/pagbabawas ng mga numero mula sa n mga numero; Linear na paghahanap sa isang hanay ng n elemento
O(n log n) Linearrhythmic growth - ang pagdodoble sa laki ng problema ay bahagyang hihigit sa doble ng oras na kinakailangan Pagsamahin o pagbubukud-bukod n elemento; lower bound of matching sort n elemento
O(n²) Quadratic growth - ang pagdodoble sa laki ng problema ay nagpapalawak ng oras na kinakailangan Mga algorithm sa pag-uuri ng elementarya
O(n³) Paglaki ng kubiko - ang pagdodoble sa laki ng isang problema ay nagpapataas ng oras na kinakailangan ng walong beses Normal na pagpaparami ng matrix
O(c n) Exponential growth - ang pagtaas ng laki ng problema ng 1 ay nagreresulta sa c- isang maramihang pagtaas sa kinakailangang oras; ang pagdodoble sa laki ng problema ay nagpapalawak ng oras na kinakailangan Ilang naglalakbay na mga problema sa salesman, brute-force search algorithm

Availability ng paunang data at ilang resulta

Ang isang algorithm ay isang tiyak na tinukoy na pagtuturo, na kung saan, sunud-sunod na inilapat sa pinagmulan ng data, ay maaaring makakuha ng solusyon sa problema. Para sa bawat algorithm mayroong isang tiyak na hanay ng mga bagay na katanggap-tanggap bilang data ng pag-input. Halimbawa, sa algorithm para sa paghahati ng mga tunay na numero, ang dibidendo ay maaaring maging anuman, ngunit ang divisor ay hindi maaaring maging zero.

Ang algorithm ay nagsisilbi, bilang isang panuntunan, upang malutas ang hindi isang tiyak na problema, ngunit isang tiyak na klase ng mga problema. Kaya, ang algorithm ng pagdaragdag ay naaangkop sa anumang pares ng mga natural na numero. Ipinapahayag nito ang mass character nito, iyon ay, ang kakayahang paulit-ulit na gumamit ng parehong algorithm para sa anumang problema ng parehong klase.

Ginagamit upang bumuo ng mga algorithm at programa algorithmization- ang proseso ng sistematikong pag-compile ng mga algorithm para sa paglutas ng mga nakatalagang inilapat na problema. Ang Algorithmization ay itinuturing na isang ipinag-uutos na yugto sa proseso ng pagbuo ng mga programa at paglutas ng mga problema sa isang computer. Ito ay para sa mga inilapat na algorithm at mga programa na ang determinismo, pagiging epektibo at mass production, pati na rin ang kawastuhan ng mga resulta ng paglutas ng mga itinalagang problema, ay pangunahing mahalaga.

Ang algorithm ay isang malinaw at tumpak na pagtuturo upang maisagawa ang isang pagkakasunud-sunod ng mga aksyon na naglalayong makamit ang isang layunin.

Pagtatanghal ng Algorithm

Mga form sa pag-record ng algorithm:

  • berbal o berbal (linguistic, formulaic-verbal);
  • pseudocode (pormal na algorithmic na mga wika);
  • eskematiko:
    • structuregrams (Nussi-Schneiderman diagram);
    • graphic (mga block diagram).

Karaniwan, sa una (sa antas ng ideya), ang algorithm ay inilarawan sa mga salita, ngunit habang papalapit ito sa pagpapatupad, nakakakuha ito ng higit at higit pang mga pormal na balangkas at pagbabalangkas sa isang wika na naiintindihan ng tagapalabas (halimbawa, machine code).

Kahusayan ng mga algorithm

Bagama't ang kahulugan ng isang algorithm ay nangangailangan lamang ng isang tiyak na bilang ng mga hakbang na kinakailangan upang makamit ang isang resulta, sa pagsasagawa, ang paggawa ng kahit isang bilyong hakbang ay masyadong mabagal. Mayroon ding karaniwang iba pang mga paghihigpit (sa laki ng programa, sa mga pinahihintulutang pagkilos). Kaugnay nito, ipinakilala ang mga konsepto tulad ng pagiging kumplikado ng algorithm (oras, laki ng programa, computational, atbp.).

Para sa bawat gawain, maaaring mayroong maraming mga algorithm na humahantong sa layunin. Ang pagtaas ng kahusayan ng mga algorithm ay isa sa mga gawain ng modernong computer science. Noong 50s Noong ika-20 siglo, kahit na ang isang hiwalay na lugar nito ay lumitaw - mabilis na mga algorithm. Sa partikular, sa problema ng pagpaparami ng mga decimal na numero, na kilala ng lahat mula pagkabata, isang bilang ng mga algorithm ang natuklasan na ginagawang posible na makabuluhang (sa asymptotic na kahulugan) na mapabilis ang paghahanap ng produkto. Tingnan ang mabilis na pagpaparami

Ang Euclidean algorithm ay isang mahusay na paraan para sa pagkalkula ng pinakamalaking karaniwang divisor (GCD). Pinangalanan pagkatapos ng Greek mathematician na si Euclid; isa sa mga pinakalumang algorithm na ginagamit pa rin ngayon.

Inilarawan sa Euclid's Elements (mga 300 BC), lalo na sa mga aklat VII at X. Ang ikapitong aklat ay naglalarawan ng algorithm para sa mga integer, at ang ikasampu para sa mga haba ng mga segment.

Mayroong ilang mga variant ng algorithm sa ibaba ay isang recursive na bersyon na nakasulat sa pseudocode:

function node(a, b) Kung b = 0 bumalik a kung hindi bumalik node (b, a mod b)

GCD ng mga numero 1599 at 650:

Hakbang 1 1599 = 650*2 + 299
Hakbang 2 650 = 299*2 + 52
Hakbang 3 299 = 52*5 + 39
Hakbang 4 52 = 39*1 + 13
Hakbang 5 39 = 13*3 + 0


Tingnan din

Mga Tala

  1. Kleene 1943 sa Davis 1965:274
  2. Rosser 1939 sa Davis 1965:225
  3. (Igoshin, p. 317)
  4. Mga Pangunahing Kaalaman: Ang Turing Machine (may interpreter! . Magandang Math, Bad Math(Pebrero 9, 2007). Na-archive mula sa orihinal noong Pebrero 2, 2012.
  5. (Igoshin, seksyon 33)
  6. Encyclopedia of Cybernetics, vol. 2 , c. 90-91.
  7. (Igoshin, seksyon 34)
  8. "Ang mga probabilistikong algorithm ay hindi dapat magkamali sa mga pamamaraan (na tinatanggihan kong tawagan ang mga algorithm), na nagbubunga ng isang resulta na may mataas na posibilidad na maging tama. Mahalaga na ang isang algorithm ay makagawa ng mga tamang resulta (pagbabawas ng mga error ng tao o computer), kahit na mangyari ito pagkatapos ng napakahabang panahon." Henri Cohen Isang Kurso sa Computational Algebraic Number Theory. - Springer-Verlag, 1996. - P. 2. - ISBN 3-540-55640-0
  9. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rives"t, Clifford Stein. - ISBN 0-262-03293-7