28.09.2013 Views

Uppgift 6

Uppgift 6

Uppgift 6

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Uppgift</strong> 6<br />

Joakim Östlund<br />

Patrik Lindegrén<br />

Pontus Nyrén<br />

Daniel Holmqvist<br />

Peyman Ziari<br />

20 februari 2004<br />

1


Grundläggande grafteoretiska begrepp<br />

Grafer är en teknik för att modellera förhållanden. En graf består utav en serie<br />

punkter (även kallade noder eller hörn) som kan representera olika saker, och<br />

dessa kan bindas ihop med linjer (s.k. kanter) för att representera förhållandet<br />

mellan noderna. Man kan därför säga att en graf är en mängd noder där vissa<br />

är parvis förenade med kanter. Två noder som sitter ihop med en kant kallas<br />

också för grannar i grafen. Nodmängden i en graf kallas V, och kantmängden<br />

E. En graf kan därav anges som G = (V, E), då grafens struktur är bestämd av<br />

noderna och kanterna.<br />

Olika grafteoretiska begrepp<br />

Nedan följer ett antal grafiska begrepp och exempel:<br />

Vandring: Är en förflyttning från nod till nog längs kanter. En vandring kan<br />

beskrivas genom att man räknar upp passerande noder i ordning, t.ex. 2 - 1- 2<br />

- 5 - 8<br />

Väg: En vandring där en kant ej får passeras mer än en gång.<br />

Stig: En vandring där en nod ej får passeras mer än en gång.<br />

2


Krets: En sluten väg där man börjar och slutar på samma nod.<br />

Cykel: En sluten stig där man börjar och slutar på samma nod.<br />

Delgraf: En del av en graf där det inte finns någon väg till en annan del av<br />

samma graf.<br />

Hamiltonstig: En stig som besöker varje nod i grafen exakt en gång.<br />

3


Hamiltoncykel: En sluten Hamiltonstig. Detta är en bra teknik för att sätta<br />

ihop en effekt rutt då man vill besöka alla platser en gång för att sedan återgå<br />

till starpunkten, t.ex. för en brevbärares runda.<br />

Eulerväg: En väg som går längs varje kant i grafen exakt en gång.<br />

Eulerkrets: En sluten Eulerväg.<br />

4


Nods grad: En nods grad bestäms av antalet utgående kanter.<br />

Komplett graf: Varje nod i grafen är förbunden med varje annan nod i grafen.<br />

Komplementgraf: Består av samma noder som den ursprungliga grafen men<br />

kanter går endast mellan de noder som inte var förbundna i ursprungsgrafen.<br />

Bipartit graf: En graf där noderna är indelade i två olika grupper. Där kanterna<br />

endast förbinder mellan grupperna.<br />

Multipla kanter: Två noder som är förbundna med fler än en kant.<br />

Ögla: En kant som förbinder en nod med sig själv.<br />

Multigrafer: Grafer som innehåller öglor och/eller multipla kanter.<br />

Enkla grafer: Grafer som inte innehåller öglor eller multipla kanter.<br />

Riktad kant: En kant som endast kan passeras i en riktning.<br />

Riktad graf: En graf som endast innehåller riktade kanter.<br />

Oriktad graf: En graf som inte innehåller riktade kanter.<br />

Isomorfa grafer<br />

En graf går att beskriva på två olika sätt: Som en samling hörn och kanter,<br />

eller som en matris. Vanligast är den grafiska modellen med hörn och kanter,<br />

den är även den modellen som är mest intuitiv; men ett snabbt ögonkast är det<br />

oftast lätt att att se hur relationerna mellan olika hörn är strukturerade. Dock<br />

är den modellen inte alltid att föredra, och ibland kan det helt vara omöjlig<br />

att använda, t.ex. vid datorbehandling av en graf. Vid sådana tillfällen används<br />

matrisformen. En enkel form av detta är grannmatrisen, som för varje hörn talar<br />

om vika andra hörn det är ”granne” med.<br />

1 2 3 4<br />

1 0 1 0 0<br />

2 1 0 1 1<br />

3 0 1 0 1<br />

4 0 1 1 0<br />

Figur 1: Tre isomorfa grafer.<br />

1 2 3 4<br />

1 0 1 0 0<br />

2 1 0 1 1<br />

3 0 1 0 1<br />

4 0 1 1 0<br />

1 2 3 4<br />

1 0 1 1 1<br />

2 1 0 0 0<br />

3 1 0 0 1<br />

4 1 0 1 0<br />

Tabell 1: Grannmatriser beskrivande de tre isomorfa graferna.<br />

Även fast de tre graferna, och deras grannmatriser, ser olika ut, beskrver de<br />

samma data. Detta fenomen kallas för isomorfi. För en graf spelar det ingen roll<br />

5


hur hörnen ritas ut, så länge som kanterna går mellan de hörn som ska vara<br />

förbundna med en väg. På samma sätt spelar det ingen roll i vilken ordning man<br />

för in hörnen i grannmatrisen, vilket förklarar varför matris nummer 3 i (tabell<br />

1) ser annorlunda ut än de andra två; hörn 1 och 2 har helt enkelt bytt ”namn”.<br />

Den tyska matematikern Douglas Hofstadter har givit en informell definition<br />

av isomorfi enligt följande:<br />

”Ordet ’isomorfism’ är applicerbart när två komplexa strukturer kan<br />

läggas över varandra, på ett sådant sätt att för varje del i den ena<br />

strukturen så finns det en motsvarande del i den andra strukturen,<br />

där ’motsvarande’ betyder att de två delarna har liknande roller i<br />

sina respektive strukturer”.<br />

En mer formell definition av isomorfi lyder ”För att två grafer A och B skall<br />

vara isomorfiska, krävs det att det finns en bijektion φ mellan hörnen i A och<br />

B, sådan att elementen i grannmatriserna på plats (i, j ) och (φ(i), φ(j )) alltid<br />

är identiska.” Med andra ord, två hörn som är grannar i graf A, ska även vara<br />

grannar i graf B. För att bättre förstå detta koncept kan en definition av ordet<br />

bijektion vara på plats.<br />

En bijektion kan per definition bara finnas mellan två grafer som består av<br />

lika många hörn. Finns det olika antal hörn i graferna är det omöjligt att de<br />

beskriver samma data! En bijektion är i själva verket en kombination av surjektion<br />

och injektion.<br />

En surjektion (se fig. 2) kan inträffa mellan två olika stora grafer, så länge<br />

Figur 2: Surjektion<br />

som graf A är som mest lika stor som graf B, och sker när varje hörn i graf A<br />

motsvarar minst ett hörn i graf B, och det inte finns något hörn i graf B som<br />

inte har ett motsvarande i graf A (det vill säga, A ”täcker” hela B).<br />

En injektion (se fig. 3) kan också inträffa mellan olika stora grafer, och även<br />

här måste A vara mindre än eller lika stor som B. Vid en injektion motsvarar<br />

varje hörn i A ett unikt hörn i B (unikt så tillvida att inget annat hörn i A<br />

motsvarar samma hörn). Vid en injektion kan det finnas hörn i B som inte har<br />

en motsvarighet i A (dock måste alla hörn i A motsvara ett i B).<br />

Kombinerar man dessa två, får man en bijektion (se fig. 4). Vid en bijek-<br />

6


Figur 3: Injektion<br />

Figur 4: Bijektion<br />

tion måste alla hörn i A motsvara ett, och endast ett, unikt hörn i B, och alla<br />

hörn i B måste ha en motsvarighet i A (kom ihåg att ”motsvarar” i det fall<br />

betyder att dom uppfyller samma funktion). Därför kan inte graferna ha olika<br />

många hörn (skulle dom ha det skulle det antingen finnas hörn som inte hade<br />

en motsvarighet i den andra grafen, alt. hörn som motsvarade fler än ett annat).<br />

Träd<br />

Träd är sammanhängande grafer utan cykler. De yttersta noderna i ett träd<br />

kallas för löv. Det finns ett samband mellan antalet noder och antalet kanter i<br />

träd. Sambandet säger att antalet noder |V| är lika med antalet kanter |E| plus<br />

1, dvs:<br />

|V | = |E| + 1<br />

Plockar man bort kanter ur en sammanhängande graf med cykler, så att cyklerna<br />

försvinner, men grafen förblir sammanhängande, har man fått ett s.k.<br />

spännande träd. Det spännande trädet är en delgraf till den ursprungliga grafen.<br />

Ur en graf kan man ibland ta ut flera spännande träd. Beroende på vad<br />

trädet beskriver (sträckor, vikter, etc.), kan det finnas ett eller flera spännande<br />

träd som är de ”effektivaste”, t.ex. ett träd som beskriver den kortaste vägen ur<br />

en labyrint. De träden kallas för minimalt spännande träd. Kanternas ”längd”<br />

eller ”kostnad” kallas vikt.<br />

För att finna det minimalt spännande trädet till en graf kan Kruskals algoritm<br />

användas. Trädet konstrueras genom att en kant åt gången väljs från originalgrafen<br />

tills ett spännande träd har skapats. Den kant som väljs ska vara den lättaste<br />

7


kanten (den kant med lägst vikt) som inte bildar cykler med redan valda kanter.<br />

Rotade Träd<br />

I ett träd kan man utse en nod att vara rot, som kan tolkas som trädets startpunkt.<br />

Ett sådant träd kallas rotat träd (se fig. 5). En nods grannod som ligger<br />

närmare roten kallas dess förälder, och grannoder som ligger längre ifrån roten<br />

kallas dess barn. När ett rotat träd ritas brukar oftast roten ritas högst upp och<br />

sedan ritas barnen upp på nivån under och deras barn på nästa nivå osv.<br />

Det kan sägas att ett rotat träd är balanserat då det består av så få nivåer<br />

som möjligt. Ett rotat träds höjd kan fås fram genom att antalet nivåer räknas.<br />

Figur 5: Rotat träd.<br />

Det finns två vanliga sätt att söka igenom rotade träd, de kallas bredden-först<br />

sökning och djupet-först söking. Vid bredden-först sökning söks noderna igenom<br />

nivå för nivå, från t.ex. vänster till höger. Vid djupet-först sökning söks hela<br />

tiden först nodens barn igenom.<br />

Binära träd<br />

Ett binärt träd (se fig. 6) är ett rotat träd där varje nod kan ha max två<br />

barn. En av de vanligaste användningsområdena för binära träd är att man kan<br />

använda dem till snabba sökbara strukturer.<br />

Figur 6: Binärt träd.<br />

Ett sätt att skriva ut data i ett binärt träd är att gå genom noderna i in-ordning,<br />

då skriver man först ut värdet på den vänstra under-noden, sedan roten, och<br />

sist den högra noden. Det finns ytterligare två sätt att göra det på, pre-ordning,<br />

8


där man först skriver ut roten, och sedan under-noderna från vänster till höger,<br />

samt post-ordning där man först skriver ut under-noderna från vänster till höger,<br />

och avslutar med roten.<br />

Räkneexempel<br />

Man ska lägga ett nytt stadsnätverk i centrala Västerås. På kartan (se fig. 7)<br />

finns nätverkets noder utsatta och alla vägar mellan dem där kabel läggning är<br />

möjligt. Även längden på dessa vägar är utsatta.<br />

Figur 7: Karta över Västerås med nätverksnoder och de möjliga vägarna mellan<br />

dem utsatta.<br />

a) Avgör om det är möjlit att gå på alla markerade vägar som ligger mellan<br />

noderna utan att gå på samma väg två gånger.<br />

Lösning: Nej, figuren är sammanhängande men saknar Euler väg pga.<br />

hörnen inte har en jämn grad.<br />

b) Bestämma den minsta vägen av kabelläggning som krävs för att skapa nätverket<br />

med trädtopologi, dvs det minimalt spännande trädet av kretsen.<br />

Lösning: Man använder sig av Kruskals algoritm för att ta reda på det<br />

minimalt spännande trädet (se fig. 8)<br />

c) Då stadsnätet är lagt får man ett nät med trädtopologi. Rita om det till ett<br />

balanserat binärt träd.<br />

Lösning: Trädet skrivs med så få nivåer som möjligt (se fig. 9)<br />

9


Figur 8: Minimalt spännande träd.<br />

Figur 9: Balanserat binärt träd.<br />

10

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!