Innhåll Dtstrukturr och lgoritmr Progrmmringsmtodik - för kognitionsvtr, 5DV059 - md inriktning mot kognition, 5DV06 2008-01-1 Dtstrukturr Träd, grfr, mängdr Algoritmr komplxittsnlys Läsnvisning: Dss bildr + DoA-kompndit (+ Jnlrt&Wibrg-bokn) Träd Ett tomt träd hr ing nodr Ett träd är tomt llr hr xkt n rot. Vrj nod (utom rotn) hr xkt n föräldr. Vrj nod hr tt ändligt ntl brn. Nodr md smm föräldr klls syskon. rot Träd Nodr utn brn klls löv. Kopplingn mlln två nodr klls knt. Djupt för n nod är smm som ntlt kntr mlln nodn och rotn. Ett dlträd bstår smtlig ättlingr till n nod. knt syskon Löv Binär träd En nod i tt binärt träd kn h högst två brn Brnn klls vänstr- och högrbrn. Dt ndr brnt kn komm för dt först. Trädn ndn är OLIKA binär träd. Trvrsring v träd Tillämpningr v träd involvrr oft tt mn Sökr ftr tt lmnt md viss gnskpr Trnsformrr strukturn till n nnn struktur Exmplvis sortring och blnsring Filtrrr ut lmnt md viss gnskpr All dss byggr på tt mn trvrsrr strukturn.
Trvrsring v träd Brddn-först Mn undrsökr n nivå i tgt. Först rotn, sdn rotns brn, dss brnbrn osv. Kö oft hjälp vid implmnttionn. Vrj nod i trädt bsöks ndst n gång. Sökr mn något som finns hittr mn dt. Trvrsring v träd Brddn-först Algoritm bfordr(tr T) input: A tr T to b trvrsd for ch lvl L of T do for ch nod of L do comput(nod) Ordningn:, b, c, d,, f, g, h, i, j Trvrsring v träd Djupt-först Mn följr vrj grn i trädt utifrån rotn till lövt Stck till hjälp för implmntringn Vrj nod bsöks ndst n gång. Tr vrintr: Prordr Postordr Inordr Trvrsring v träd Djupt-först: Prordr Algoritm prordr(tr T) input: A tr T to b trvrsd comput(root(t)) // Do somthing with nod for ch child w of root(t) do prordr(w) prordr(bintr T) comput(root(t)) prordr(lftchild(t)) prordr(rightchild(t)) Ordningn:, b, c, d, f, g,, h, i, j Prordr Läs tt dokumnt Trvrsring v träd Djupt-först: Postordr Algoritm postordr(tr T) input: A tr T to b trvrsd for ch child w of root(t) do postordr(w) comput(root(t)) // Do somthing with nod postordr(bintr T) postordr(lftchild(t)) postordr(rightchild(t)) comput(root(t)) Ordningn: b, c, f, g, d, h, i, j,,
Algoritm vlutexprssion(tr t) If islf(t) rturn gtvlu(t) ls op gtvlu(t) x vlutexprssion(lftchild(t)) y vlutexprssion(rightchild(t)) rturn x op y * + 3-2 / + Postordr Bräkn ritmtisk uttryck Trvrsring v träd Djupt-först: Inordr Algoritm inordr(tr T) input: A tr T to b trvrsd nod root(t) inordr(firstchild(t)) comput(nod) // Do somthing with nod for ch child w of nod (xcpt first) do inordr(w) inordr(bintr T) inordr(lftchild(t)) comput(root(t)) inordr(rightchild(t)) 1 3 9 5 Ordningn: b,, c, f, d, g, h,, i, j Algoritm printexprssion(tr t) print ( if hslftchild(t) thn printexprssion(lftchild(t)) print gtvlu(t) if hsrightchild(t) thn printexprssion(rightchild(t)) print ) * + 3-2 3 1 9 5 / + Inordr Skriv ritmtisk uttryck Binärt sökträd (BST) Sökträd är konstrurd spcillt för sökning. Krv Dt måst xistr n linjär ordning v nodrn. Dfinition Söknyckln för nod n är störr än ll söknycklr hos n's vänstr dlträd. Söknyckln för nod n är mindr än ll söknycklr hos n's högr dlträd. Binär sökträd Dt kn finns flr rprsnttionr v smm träd. En inordr trvrsring kommr tt bsök nodrn i n sortrd ordning. Algoritmrns hstight för insättning, borttgnd och sökning är högst brond v utsndt på trädt. Blnsr trädt. Användningsområdn Träd är n dtstruktur som nvänds flitigt inom ll möjlig områdn i dtvtnskp: rtificill intlligns, syntxträd som tstr om kod är skrivn på rätt sätt, snbb inmtning v txt vi mobiltlfonr (T9), komprimring v dt, gogrfisk informtionssystm... och mång flr.
A Grfr Bstår v n uppsättning nodr och kntr. Två nodr som är koppld md n knt klls grnnr. Grfr kn vr osmmnhängnd. Kntr kn vr riktd. 6 E R C 8 5 3 F 6 6 D G B 3 d c d b c b Bild från sidn 337 i Jnlrt L-E., Wibrg T., Dttypr och lgoritmr, Studntlittrtur, 2000 Sökning i grfr Två problm Att int miss nodr Att int bsök n nod flr gångr. Strtgi Börj md n godtycklig nod. Tst ll kntr från ll bsökt nodr. Kom ihåg vilk nodr som är bsökt. Sökning i grfr Brddn först Tst ll kntr från dn ktull nodn, innn du tstr n nnn nod. Djupt först Fortsätt så långt du kn från dn ktull nodn innn du tstr dss ndr kntr. Användningsområdn Grf är n dtstruktur som också nvänds flitigt! Grftori Kortst vägn lgoritmr Mximlt flöd Minimlt uppspännnd träd Trvling slsmn problm... Dtorkommuniktion och dtornät Som visulisring v nätvrk v olik slg Algoritmr Krv på n lgoritm (Donld Knuth): Ändlight Algoritmn måst h n ändlig bskrivning Bstämdht Vrj stg måst vr ntydigt Indt Vrj lgoritm måst h noll llr flr indt Utdt Algoritmn måst h tt llr flr utdt Effktivitt Vrj stg i lgoritmn måst vr ffktiv, kunn utförs på n ändlig tidsrymd Olik sätt tt bskriv n lgoritm Nturligt språk Förklr problmlösningn md vnlig txt, v md införd vribl- och funktionsnmn. Blockdigrm Vis n grov struktur v problmlösningn i form v ritd "boxr". Vrj box är tt dlproblm. Flödsschm/flödsdigrm, strukturdigrm Ritr lgoritmn md olik symbolr, som visr när och hur skr skll sk i progrmmt. Psudokod En blndning v progrmmringsspråk och vnlig txt, dvs mn hr vriblr, funktionr, kontrollstrukturr tc
Exmplproblm Jg sk bjud på mums mums till kfft. Hur mång förpckningr måst jg köp? Vi ntr följnd: Vrj förpckning innhållr mums mums Vrj prson ätr i snitt 3 mums mums om d är färsk nnrs ätr d br 2 mums mums i snitt. Dtt xmpl är inspirrt v korvxmplt på sidn http://www.idt.mdh.s/kursr/cd5310/vt0rjn/lcturs/f1-problmsolving.pdf Algoritm nturligt språk 1. Fråg ftr ntlt prsonr; kll tlt för Prsonr. 2. Fråg om mums mumsn är färsk; kll svrt ärfärsk. 3. Om ärfärsk är snn 1. Multiplicr Prsonr md 3 (ntlmumsmums). Annrs 1. Multiplicr Prsonr md 2 (ntlmumsmums) 5. Dl ntlmumsmums md. 6. Avrund svrt uppåt till närmst hltl; kll dtt tl för Pkt. 7. Svr md tlt Pkt. Algoritm blockdigrm Progrm Antl mums mums-pkt Algoritm flödsdigrm Strt Läs in prsonr Läs in ärfärsk Läs in Prsonr och ärfärsk Bräkn Pkt Vis Pkt mumsmums = prsonr * 3 Är ärfärsk snn? mumsmums = prsonr * 2 Bräkn ntl mums mums Dl ntl mumsmums md och vrund uppåt pkt = mumsmums/ vrund uppåt Vis Pkt Stop Algoritm psduokod 1. Läs in Prsonr (ntlt prsonr) 2. Läs in ärfärsk (om mums mums är färsk) 3. If ärfärsk Thn 1. ntlmumsmums = Prsonr * 3. Els 1. ntlmumsmums = Prsonr * 2 5. svr = ntlmumsmums/ 6. Pkt = Avrund svr uppåt till närmst hltl 7. Vis Pkt. Algoritmnlys För tt vgör om n viss lgoritm är br, kollr mn oftst sämst fllt. Intrssnt tt koll hur lgoritmn växr md storlkn på problmt. Att sök ftr tt visst lmnt i n vktor är dirkt brond på ntlt lmnt, n, i vktorn.
Ordo Ordo Till hjälp tr mn då n mtmtisk funktionsdfinition som klls ordo, O. f(n) ngr ntlt bräkningr n lgoritm gör om storlkn på dtt är n. g(n) ngr n godtycklig funktion. Om dt finns tt c så tt f(n) <= c g(n) för n > n 0 sägs f(n) vr O(g(n)). Exmpl Att sök tt lmnt i n vktor är O(n). Ävn om vrj stg i sökningn krävr flr oprtionr, kn vi sätt c till tt högr tl och problmt växr nbrt v n. Att lt tt lmnt i tt blnsrt binärt sökträd är O(log 2 (n)). g(n) I g(n) vill mn nbrt h dn dl som växr fortst. Konstntr är INTE viktigt. Ex. n 2, nlog(n), n 3. Att koll på hur fort tt problm växr är för små problm oft int så intrssnt, mn för stor problm kn dt vr hlt vgörnd. Exmpl Litt räknxmpl n log 2 (n) n 2 n 3 2 n 1 oprtion tr 1μs 2 1 8 1*10 9 lmnt i n list 2 8 6 16 Kvdrtisk sortringslgoritm n 2 16 256 8 256 65.536 096 16 milj 65.536 1.15 10 77 31000 år Logritmisk sortringslgoritm n*log(n) 30000s 1 rbtsdg 102 10 1 milj 1 mrd 1.79 10 308 n 2 och dubblt så snbb => 15500 år n 2 och 1000 gångr så snbb => 31år
Anlys v lgoritmr Primitiv oprtionr Är i stort stt obrond v progrmspråk och kn dfinirs i trmr v psudokod: Anrop n mtod/funktion Rturnr från n mtod/funktion Utför n ritmtisk oprtion (+, -, ) Jämför två tl, tc. Rfrr till n/tt vribl/objkt Indxr i n rry Antg i nlysn tt dss kostr 1. Exmpl Algorithm rrymx(a,n) input: An rry A storing n intgrs output: Th mximum lmnt in A currntmx A[0] //1+1 for i 1 to n-1 do //+n(1+1+1)+(n-1)*([]+1+1+1) if currntmx < A[i] thn //1+1+1+1 currntmx A[i] //1+1+1 rturn currntmx //1+1 T mx (n)= 6+3n+(n-1)*10+2 = 13n-2 T min (n)= 6+3n+(n-1)*7+2 = 10n+1 Hur får mn ordo? Om dt finns tt c så tt f(n) <= c g(n) för n > n 0 sägs f(n) vr O(g(n)). På förr sidn hd vi T min (n) och T mx (n) T(n) är vårt f(n) och för tt få konstntn bräkns f (n) lim där g(n) är dn störst trmn n g(n) +1 i vårt fll n. 13n 2 lim + 1 = 1 n n 13n-2 <= 1n för ll n >= n 0 då n 0 =1 300 250 200 150 100 50 0 f(n) = 13n-2 g(n) = 1n 1 2 3 5 6 7 8 9 10 11 12 13 1 15 16 17 18 19 20 Algoritmnlys Smmnfttning O(n) nvänds för tt utryck ntlt primitiv oprtionr som utförs som n funktion v storlkn på indt En övr gräns för tillväxt rrymx är n linjär lgoritm dvs O(n) En lgoritm som körs på O(n) är bättr än n O(n 2 ), mn O(log(n)) är bättr än O(n) log(n) <<n<<n 2 <<n 3 <<2 n Algoritmnlys Litn vrning Vr ktsm, stor konstntr ställr till dt T(n)=1000000n är n linjär O(n), mn i mång fll sämr än T(n) = 2n 2 som är O(n 2 ) O-nottionn är n stor förnkling, dvs n övr gräns, dt finns släktingr som bgränsr ndåt. Anlysn tr j hänsyn till olik hårdvror.
Sortring En v d vnligr oprtionrn på vktorr/rryr. Komplx oprtion Vrj lmnt måst jämför sig md ll d övrig I grundn n O(n 2 ) oprtion Kn dn görs på tt bättr sätt? Bubbl sort Enklst och mst intuitiv sortringslgoritmn. Elmntn ''bubblr'' upp gnom fältt. Går ignom vktorn och bytr plts mlln två intilliggnd lmnts som int är i ordning. Upprpr dtt tills hl vktorn är sortrd (mx n ggr). Bubbl-sort Exmpl Mång implmnttionr nligt smm princip. ''Psudo''-kod: do { chngd = fls; for (i=1; i<lngth; i++) { // OBS! i=1 if (v[i-1] > v[i]) { chngd = tru; swp(v[i-1],v[i]); } } } whil(chngd); Mrg sort Jobbr md n xtr rry. Splittr vktorn för tt sdn utnyttj tt dlrryr rdn är sortrd. ''Divid nd conqur'' Byggr upp ny dl-rryr gnom tt prvis jämför frontlmntn. Exmpl mrg sort Divid-fsn 7 5 2 9 7 5 2 9 3 8 3 8 7 5 2 9 3 8 7 5 2 9 3 8
Exmpl mrg sort Qonqur-fsn Quick sort 7 5 2 9 3 8 5 7 2 9 3 8 2 5 7 9 3 8 2 3 5 7 8 9 'Divid nd conqur'' Användr tt ''pivot''-lmnt. Läggr ll lmnt mindr än pivotlmntt på n sid och d ndr på dn ndr. Upprpr procdurn för dl-rryrn. När ll dl-rryr bstår v som mst tt lmnt är d sortrd. Svåright tt hitt br pivot-lmnt "snbbt". Jämförls I mdlfllt är Bubblsort O(n 2 ). Mrg-sort och Quick-sort O(n log(n)). Mrg-sort och Quick-sort krävr n intllignt implmntring/mr minn. Kritiskt för stor dtmängdr. Mrg-sort och Quick-sort är rkursiv lgoritmr.