| 
		
			
				|  | © h.hofstede (h.hofstede@hogeland.nl)
		 |  | 
    
      | Het verbindingsprobleem. | 
    
      |  |  |  |  | 
    
      | We gaan deze les een 
		gewogen graaf bekijken waarvan we op jacht zijn naar de opspannende boom 
		met het kleinste totale gewicht. Dat noemen we de 
		minimale opspannende boom van deze graaf.  
		Denk bijvoorbeeld weer aan een stedennetwerk dat met spoorlijnen met 
		elkaar verbonden moet worden. De gewichten stellen dan afstanden of 
		kosten voor. 
 Eerst bekijken we een manier om een opspannende boom te maken als er 
		geen gewichten zijn (of als alle gewichten gelijk zijn). Dat gaat heel 
		eenvoudig:
 •  Kies één voor één de zijdes en zorg er daarbij voor dat de graaf 
		steeds acyclisch blijft.
 •  Stop als dat niet meer lukt.
 
 Hier zie je een voorbeeldje:
 | 
    
      |  |  |  |  | 
    
      | 
		 | 
    
      |  |  |  |  | 
    
      | Merk nog even op dat 
		de graaf tussendoor helemaal niet samenhangend hoeft te blijven. Aan het eind komt 
		vanzelf alles aan elkaar. | 
    
      |  |  |  |  | 
    
      | Kruskal's Algoritme | 
    
      |  |  |  |  | 
    
      | Kruskal breidde dit 
		eenvoudige systeem uit om een minimale opspannende boom te vinden.  Dat deed 
		hij met de belachelijk eenvoudige extra regel: | 
    
      | 
			
				
					| "Als je kunt kiezen, kies dan steeds 
					degene met het kleinste gewicht". |  | 
    
      |  |  |  |  | 
    
      | Zo kinderlijk 
		eenvoudig! Je kunt bijna niet geloven dat dit algoritme pas in 1956 werd 
		gepubliceerd!! Je ziet trouwens dat dit weer een voorbeeld is van een "greedy"" 
		algoritme. Hier zie je een voorbeeldje. Volg de blauwe pijlen.
 | 
    
      |  |  |  |  | 
    
      | 
		 | 
    
      |  |  |  |  | 
    
      | De optimale boom 
		heeft totaalgewicht 34 gekregen. Beter kan dus niet! 
 Waarom werkt dit eigenlijk?
 Een bewijs uit het ongerijmde.
 Noem de boom die we met dit algoritme hebben gevonden B*, en 
		stel dat de achtereenvolgens gekozen verbindingslijnen gelijk zijn aan 
		de lijst  {V1, V2, ..., Vn-1}
 
 Stel dat B* niet optimaal is.......
 | 
    
      |  | Dan is er in de lijst 
		van wél optimale bomen dus een boom B te vinden die beter is. Kies nu 
		van alle optimale bomen  B degene die het langst gelijk is aan B*.
		 Noem die boom B1. Dus dat is degene waar in het rijtje  {V1, V2, 
		...} zo laat mogelijk een afwijkende V voorkomt vergeleken 
		met B*.
 Noem deze eerste afwijkende zijde Vi  (we kiezen 
		dus de optimale boom B1 met maximale i).
 
 B1 + Vi  bevat dan een cykel.  
		(een V toevoegen aan een boom geeft altijd een cykel)
 
 Maar in die cykel zitten ook nog hogere V's  immers Vi  
		kan met de eerdere V's geen cykel maken want B1 heeft geen 
		cykel.
 Neem zo'n latere Vj uit de cykel en laat die weg uit 
		de graaf  B1.
 Dan heb je een nieuwe graaf B2 gekregen die óók een 
		opspannende boom is.
 gewicht van B2 = gewicht van B1 + gewicht van Vi 
		- gewicht van Vj
 maar omdat j een latere verbinding is dan i  is het 
		gewicht van j  ≥ gewicht van i
 dus dan is gewicht van  B2  ≤  
		gewicht van B1
 B2 is dan óók een optimale boom, met als eerste afwijkende 
		verbindingslijn Vj groter dan Vi
 Dat is in tegenspraak met het feit dat B1 de zo laat 
		mogelijk afwijkende Vi had (i was maximaal)
 | 
    
      | Dus de aanname dat B* 
		niet optimaal is klopt niet! | 
    
      | ■ |  |  |  | 
    
      | Verward door al die 
		B's en V's en  i 's en  j 's?? Hou dan dit plaatje in gedachten:
 | 
    
      | 
		 | 
    
      |  |  |  |  | 
    
      | Bij de 
		verbindingslijnen van B* staat tussen haakjes als hoeveelste ze gekozen 
		zijn. 
 Stel dat B1 en B*  pas bij de 4e 
		keus voor het eerst verschillen (V4) , en dat daarvoor in de 
		plaats in B1 werd gekozen voor de blauwe verbinding
		(4).
 Dan heeft B1 + V4  een cykel, in dit geval  
		(4)(8)(1)(7)
 Als je uit  B1 + V4 van die cykel  
		nu bijv. Vj = (8) weglaat krijg je B2.
 B2 is ook een opspannende boom, met waarde 
		≤  B1 dus ook een optimale boom  
		(want  (8) was groter dan (4) omdat je bij Kruskal altijd de 
		kleinste eerst koos)
 Maar B2 is pas later dan V4 
		ongelijk aan B*  en dat klopt niet met de aanname dat die V4 
		de grootste was......
 | 
    
      |  |  |  |  | 
    
      | Het algoritme van Prim | 
    
      |  |  |  |  | 
    
      | Prim bedacht een ander, maar ook 
		zeer eenvoudig, algoritme om een minimale opspannende boom te vinden. Zijn methode gaat in drie stappen:
 | 
    
      |  |  |  |  | 
    
      | 
			
				
					| 
						
							
								| stap 1. | kies een willekeurige 
								ongemarkeerde knoop van de graaf en markeer die |  
								| stap 2. | bekijk alle buren van 
								gemarkeerde knopen van de graaf bepaal van al die buren de kortste afstand tot 
								een gemarkeerde knoop
 |  
								| stap 3 | markeer de buur met de kleinste 
								minimale afstand ga weer naar stap 1.
 |  |  | 
    
      |  |  |  |  | 
    
      | Laten we het toepassen op 
		dezelfde graaf die we al met Kruskal behandelden. Kies bijvoorbeeld knooppunt K, en markeer dat (rood)
 Die heeft drie buren (oranje) met afstanden 5, 6, 2
 Markeer dus de buur met afstand 2.
 
 Hieronder zie je hoe het verhaal verder gaat. Weer via zo'n blauwe 
		pijlen-route. Het wijst zichzelf wel, denk ik...
 
 (de rode pijl geeft steeds het nieuw te markeren knooppunt aan; bij 
		gelijke minimale afstanden is zomaar eentje daarvan gekozen)
 |  | 
    
      |  |  |  |  | 
    
      | 
		 | 
    
      |  |  |  |  | 
    
      | En zoals je ziet wordt 
		uiteindelijk  precies dezelfde minimale opspannende boom van 34 
		gevonden die we ook al via Kruskal vonden. | 
    
      |  |  |  |  | 
    
      | 
			
				| OPGAVEN |  
				|  |  |  |  |  
				| 1. | Bepaal van de volgende 
				gewogen grafen een minimale opspannende boom, en geef het totale gewicht 
				daarvan. |  
				|  |  |  |  |  
				|  | a. | 
				 |  
				|  |  |  |  |  
				|  | b. | 
				 |  
				|  |  |  |  |  
				|  |  |  
				| 2. | Hieronder 
				staan een aantal plaatsen in Oost-Nederland 
				die direct met elkaar verbonden zijn. De afstanden staan bij de 
				verbindingswegen. Ontwerp een netwerk dat deze verbindingswegen gebruikt, en dat al deze plaatsen met elkaar verbindt en 
				waarvoor de totale lengte van alle verbindingen minimaal is.
 |  
				|  |  |  |  |  
				| 
				 |  
				|  |  |  |  |  
				|  |  |  |  |  | 
    
      |  |  |  |  | 
    
      | © h.hofstede (h.hofstede@hogeland.nl)
		 |