Paradigmas
Pasaulē eksistē daudzi algoritmi, tehnikas, datu struktūras un citādi nosaucamas specifiskas problēmu risināšanas pieejas. Tās patiesībā ir tik daudz, ka ir pat ļoti nereāli visas tās pārzināt. Cits jautājums ir, vai pats nevar tās izdomāt vai varbūt izprast un izmantot tikai tad, kad tiešām rodas nepieciešamība. Paradigmas ir veids, kā kategorizēt algoritmus. Klasiski dažas paradigmas ir krietni populāras, piemēram:
- Dinamiskā programmēšana - iteratīvs algoritms. Parasti dinamiskajā programmēšanā ir divas svarīgas nianses:
- Algoritma sākuma stāvoklis.
- Pārejas darbības uz nākamo stāvokli, kas balstās uz iepriekšējo. Piemēram Fibonači rinda.
- Alkatīgā metode - veids, kā veikt lēmumus algoritmos. Piemēram, ja ir jāmeklē īsākais ceļš grafā, nedomājot par to, kāds ceļš ir jānoiet un kāds ir noiets, tiek izvēlēta īsākā šķautne konkrētajā mirklī.
- Skaldi un valdi - algoritmi, kuri sadala problēmu apakšproblēmās un risina katru atsevišķi kā jaunu problēmu. Atrisinot katru apakšproblēmu, rezultāti tiek apvienoti risinājumā problēmai.
- Rupjā spēka metode - parasti šie algoritmi ir darbību simulācijas vai visu iespējamo risinājumu apskatīšana un labākā izvēlēšanās. Piemēram, ja no N produktiem ar konkrētu vērtību un tilpumu ir jāizvēlas produkti, kurus ielikt somā ar konkrētu tilpumu, lai maksimizētu vērtību summu, tad var apskatīt visus iespējamos variantus, kādos var salikt produktus somā.
Bez šīm paradigmām var gribēties izdalīt vēl kādas, piemēram:
- Grafu problēmu algoritmi.
- Matemātiskas problēmas.
- Spēļu teorija.
- u.c.
Tomēr ne vien šo paradigmu problēmas var ietilpt arī kādās paradigmās no pirmā saraksta (piemēram Kruskāla algoritm ir gan alkatīgais algoritms, gan grafu algoritms), bet arī pārklāties savā starpā, piemēram, lēmumu koks var tikt izmantots spēļu teorijā un grafu teorijā. Ta paradigmu jēdziens var tikt izmantots visai brīvi. Par paradigmām var dažreiz domāt kā par veidu, kā meklēt risinājumu. Zinot katras paradigmas specifiskās īpašības, programmētājs var galvā kategorizēt algoritmus un sastopoties ar kādu problēmu izmantot kādu jau zināmu algoritmu no kādas paradigmas, izdomājot, kurai paradigmai varētu piederēt problēma. Lai gan paradigmu jēdziens var tikt izmantots brīvi, būtu vērtīgi pieturēties pie plaši izmantota paradigmu komplekta, lai arī citi programmētāji spētu saprast tavu domu gājienu.