Aldri for gammel for enda mer Store O
a<b⇓a≤b⇑a=b⇔⇔⇔b>a⇓b≥a⇑b=a
a=o(b)⇓a=O(b)⇑a=Θ(b)⇔⇔⇔b=ω(a)⇓b=Ω(a)⇑b=Θ(a)
Aldri for gammel for enda mer Store O
a<b⇓a≤b⇑a=b⇔⇔⇔b>a⇓b≥a⇑b=a
a=o(b)⇓a=O(b)⇑a=Θ(b)⇔⇔⇔b=ω(a)⇓b=Ω(a)⇑b=Θ(a)
Og at disse greske bokstavene egentlig er mengder
Θ(n2)={4n2+3n, 21n2+67nlogn, n2−45n+6}
f(n)=Θ(g(n)) ⇒ n→∞limg(n)f(n)=C, 0<C<∞
Men la gå
f(n)=O(g(n))
Betyr egentlig
f(n)=X, der ∃X∈O(g(n))
O(n2)+O(n3)=O(g(n))
Betyr egentlig
∀X∈O(n2),∀Y∈O(n3),∃Z∈O(g(n))slik atX+Y=Z
Fra en av Øvingene, men likevel relevant, skulle jeg mene

Desember 2017

Temmelig like, men også ulike
Balansering og høyde
Lagres kompakt!
Eksamen august 2019

Eksamen November 2019

En liten oppgave
Du er gitt en liste med n tall.
Du ønker å fjerne tall fra listen, slik at ingen prefikser til listen har negativ sum.
Fjern så få tall som mulig.
Eksamen November 2020

November 2019

Jeg tar med noe hjemmesnekk
Da slipper vi DP!
I sted trengte vi DP, siden vi måtte prøve alle delinstanser.
Hva om vi bare tar den som ser mest lovende ut?
Hvis det er globalt optimalt å gjøre det som er lokalt optimalt, oppfylles grådighetsegenskapen.
Grådighet funker
Eksamen desember 2018

Eksamen august 2019

Viktige begreper å kunne
Representasjoner:
Den som bruker en kø
Med BFS = bredde-først-søk finner vi korteste vei fra én node til alle andre.
Fungerer bare hvis kantene ikke har vekter.
Kantene kan ha retning, det går fint.
Bruker en kø.
Holder oversikt over besøkte noder.
Begynner med kun start-noden i køen.
O(∣V∣+∣E∣)
Den som bruker en stakk
Med DFS = dybde-først-søk lager vi en slags ordning.
Bruker en stakk.
Har også en "tid-teller". Holder oversikt over besøk-start og besøk-slutt for hver node.
Kan trenge flere start-noder.
O(∣V∣+∣E∣)
Vi ender opp med et tre, pluss eventuelle ekstra noder

Angår altså DFS
Én node sin start- og slutt-tid vil aldri delvis overlappe med en annens.
Hvis u er etterkommer av v, var det kun hvite noder fra v til u da v ble grå.
Vi bruker de derre slutt-tidene etter å ha gjort DFS
Sorter alle nodene etter slutt-tid. Størst først.
For alle noder u der det finnes en vei til v, vil u kommer før v.
Fungerer ikke hvis grafen har back-edge. Da har den sykler.
En liten oppgave
Vi har n forfattere, og k artikler.
Hver artikkel er skrevet av enten 1,2,3,…n forfattere.
Hvis forfatter A og forfatter B begge to har skrevet på samme artikkel, er de medforfattere.
Forfatter nummer 1 er Erdős. Han har Erdős-tall 0.
Alle som er medforfatter med Erdős har Erdős-tall 1.
Medforfatterne deres igjen, har Erdős-tall 2.
Erdős-tall er altså antall "hopp" mellom medforfattere som må gjøres for å nå Erdős.
Finn alle forfatternes Erdős-tall.
Alle noder skal med, men billigst mulig kanter, takk
Vi har en vektet urettet graf.
Spenntrær kobler sammen alle nodene, uten å lage sykler.
Minimale spenntrær velger de billigste kantene.
Her fungerer det å være grådig.
Én måte å finne minimale spenntrær
Sorter alle kantene etter vekt. Minst først.
Legg til én og én av kantene, med mindre det skaper en sykel.
Raskt sjekke om to noder er koblet fra før?
Disjoint set data structure (union find).
Enda en måte å finne minimale spenntrær
Begynn med én node. Dette blir roten.
Ha en prioritetskø over alle kanter som stikker ut av treet ditt.
I en vektet, muligens rettet graf
Obs! Negative sykler er et problem!
Kan vi løse negative sykler ved å kun godta enkle veier?
BELLMAN-FORD oppdager hvertfall negative sykler. DJIKSTRA blir grundig lurt og vil holde på til evig tid.
Dette har også betydning for spørsmålet lengste vei.
Relax relax relax
Begynn med at alle noder er ∞ langt unna start.
For hver kant, prøv å slakke! RELAX!
Etter å ha slakket alle kanter, ∣V∣−1 ganger, vil alle stier være funnet!
O(∣E∣∣V∣)
Den klassiske korteste vei fra én til alle
Gi gjør det samme som PRIM, men med total avstand fra start.
\mathrm{O}(|V|\lo)Eksamen aug 2019

Korteste vei, alle til alle
Lag en matrise med korteste kjente avstand mellom alle par.
O(∣V∣3)
La ditt rike flomme
Vi har en graf med en kran og et sluk,
der hver kant har en retning og kapasitet.
Har vi en urettet graf, doble alle kanter!
Vi vil sende vann gjennom rørene, slik at mest mulig vann flyter gjennom.
FORD-FULKERSON-METHOD beskriver augmenting paths
EDMONDS-KARP beskriver hvordan vi finner augmenting paths med BFS.
Faktisk akkurat samme problem, en såkalt dual
Vi velger de kantene som er helt fulle.
Snipp snipp.
Noen ting er rett og slett vanskelige
Vi ser på ja-nei-problemer (beslutnings-problemer).
"Finnes det en enkel vei som besøker alle noder?"
Klassen NP er problemer der ja-svar kan verifiseres i polynomisk tid.
Alt i NP kan reduseres til de NP-komplette problemene.
De er de vanskeligste problemene vi har i NP.
Alt som er NP-komplett eller vanskeligere er NP-hardt.
Nesten det samme
Klassen vo-NP er problemer der nei-svar kan verifiseres i polynomisk tid.
Eksamen august 2019
