Kjo është një listë e disa prej termave me te rëndësishëm ne fushën e informatikës. Këto terma mund të jenë praktika pune, teori e koncepte, të shpjeguara për ata që kanë më pak informacion mbi këtë fushë, kryesisht përmes analogjive.
KONCEPTI NR. 1: ALGORITMET DHE STRUKTURAT E TE DHËNAVE
1.1 – Rendi i kompleksitetit (Big O notation)
E zëmë se unë kam një qen, Bubin, i cili mund të vrapoje deri tek shoku im Beni që banon 3 pallate larg. Qaforja e Bubit ka një xhep te vogël, ku unë mund te vendos një USB prej 128GB. Le të themi se Beni kërkon disa filma nga unë, qe janë rreth 50GB. Ka dy mënyra se si unë mund t'ia dërgoj filmat Benit. Mund t'i transferoj ne USB dhe t'i them Bubit të vrapojë deri tek Beni, ose mund t'ia dërgoj me anë të Internetit, me shumë mundësi duke i hedhur në një shërbim të ngjashëm me Google Drive (cloud). Në rastin e parë, koha e transferimit është konstante: ajo varet vetëm nga sa shpejt mund të vrapojë Bubi, por për lehtësi shpjegimi po themi se Bubi vrapon me shpejtësi konstante. Në rastin e dytë, koha e transferimit përcaktohet nga madhësia e të dhënave (filmave) që po transferohen: sa më shumë GB të transferohen, aq më shumë do të presë Beni. Në termat e kompleksitetit, Bubi transferon me kohë O(1), ndërsa Interneti me kohë O(n). O(1) do të thotë “kohë konstante”, ndërsa O(n) do të thotë që koha varet linearisht nga madhesia e inputit. Duhet pasur parasysh që O (ang. O – order) paraqet kompleksitetin e rastit më të keq të një veprimi, pra në rastin më të keq, Bubi transferon në kohë konstante (s'ka më mirë), ndërsa Interneti në kohë lineare (ka edhe me keq). https://en.wikipedia.org/wiki/Big_O_notation http://stackoverflow.com/questions/487258/plain-english-explanation-of-big-o https://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/1.2 – Algoritmet e renditjes
Sipas Google, algoritmi është “një bashkësi rregullash që duhen ndjekur në llogaritje ose në zgjidhjen e një problemi, veçanërisht nga një kompjuter”. Veçanërisht, një algoritëm renditjeje është një algoritëm që vendos elementet e një liste në rend rritës ose zbritës (përfshirë këtu edhe renditje në rend alfabetik). Renditjet përdoren shpesh në informatikë, prandaj këto algoritme të renditjes janë mjaft të rëndësishëm. Më shumë për renditjen mund të lexoni këtu: (https://en.wikipedia.org/wiki/Sorting_algorithm), si dhe të shihni videon e mëposhtme, si një vizualizim i disa algoritmeve të renditjes:1.3 – Rekursioni
Po mbaj një pasqyrë para pasqyrës dhe po shoh veten që mban një pasqyre para pasqyrës, ku dukem unë që mbaj një pasqyrë para pasqyrës, ku dukem unë që mbaj një pasqyrë para pasqyrës, ku dukem unë që mbaj një pasqyrë para pasqyrës... – Unë, pa punë dhe i vogël Google e përkufizon rekursionin si aplikimin e një veprimi rekursiv... Nëse nuk ju kujtohet faktoriali nga matematika, po jua shpjegoj me pak fjalë:n! = n * (n-1) * (n-2) * … * 3 * 2 *1
Pra, faktoriali i n (n!) është produkti i të gjithë numrave nga 1 deri tek n, duke përfshirë edhe 1 edhe n. Një tjetër përkufizim është: n! = n * (n-1)!
Pikërisht ky quhet përkufizim rekursiv, ku faktoriali shprehet duke përdorur vetë kuptimin e faktorialit. https://en.wikipedia.org/wiki/Recursion_%28computer_science%29
1.4 – Strukturat e të dhënave
Strukturat e të dhënave janë mënyra të ndryshme të organizimit të të dhënave gjatë shkrimit të një programi. Programuesit dhe informaticienët duhet të njohin mire:- Array – një listë elementesh
- Stack – një koleksion elementesh, i ngjashëm me karikatorin e një pistolete
- Linked lists – nje listë ku çdo element është i lidhur me tjetrin pasardhës
- Tabelat Hash – një mënyrë për të kërkuar në kohë konstante O(1)
- Pemët – një mënyrë e organizimit të të dhënave, ku çdo element (prind) lidhet me dy ose më shumë elemente (fëmije)
- Grafet – një bashkësi nyjesh që lidhen me njëra tjetrën në një mënyre logjike
KONCEPTI NR. 2: INTELIGJENCA ARTIFICIALE
2.1 – Algoritmet lakmitare (greedy)
Imagjinoni sikur jeni duke shkuar nga Tirana në Sarandë, dhe mund të zgjidhni disa rrugë:- Mund të ndiqni rrugën Fier – Levan: rrugë e mire, pa shumë kthesa
- Mund të kaloni nga Ballshi: shumë kthesa, rrugë jo shumë e mirë
- Mund të kaloni nga Vlora: rruge e mirë, me shumë kthesa dhe me pamje të bukur
2.2 – Programimi dinamik (DP – Dynamic Programming)
Programimi dinamik është një koncept që shtrihet përtej informatikës! Personalisht, e kam hasur për herë të parë në një libër ekonomie, dhe shembulli i parë i programimit dinamik që kam parë ka qenë një optimizim i dietës së lopëve... Në shumë raste, shihet që programimi dinamik të vendoset ballë për ballë me zgjidhjet greedy. Për shembull, vërtetë alternativa 1 (greedy) më sipër është më e zgjuara, por ju nuk jeni të vetmit qe e keni menduar! Pra, në fjalë të tjera, kjo do të jetë rruga më me shumë trafik, dhe mund të hajë më shumë kohë. Nga ana tjetër, alternativa 3 (DP) mund të ketë më pak trafik, dhe do të kushtojë me pak kohë.2.3 – P vs. NP
Ky është një nga problemet më të vështira që ende nuk kanë zgjidhje. Është një nga 7 Problemet e Mijëvjeçarit dhe $1 000 000 i takojnë atij që e zgjidh. Po ju jap një problem të thjeshtë. Sa është produkti i7 x 17
? Përgjigja është e thjeshtë, 119. Po nëse unë ju kërkoj të gjeni dy numra, p
dhe q
, të tillë që p x q = 119
(p
dhe q
nuk mund të jenë 1 dhe 119)? Ky është problemi i faktorizimit, dhe është i thjeshtë në rastin e sipërm sepse duhet të kontrolloni për numrat nga 2 në 118. Por nëse, në vend të 119, produkti do të ishte një numër me 500 shifra, do të ishte mjaftueshëm i vështirë! Problemi i pare quhet P (polynomial), dhe është i thjeshtë për t'u zgjidhur. Problemi i dytë quhet NP (non-deterministic polynomial) dhe është mjaft e thjeshtë të kontrollohet zgjidhja (pjesëto produktin me një nga faktorët) por shumë e vështire për t'u gjetur një zgjidhje. Pyetja e Mijëvjeçarit është nëse problemet NP në fakt janë P, por ne nuk kemi gjetur një zgjidhje eficiente, apo NP janë probleme pa një zgjidhje të përcaktuar? Çështja është se, në qoftë se mund të vërtetojmë që P = NP, mund të zgjidhim shumë probleme që shkojnë përtej informatikës në kohë të shkurtër.