Föreläsning 13 Innehåll Exempel på problem där materialet i kursen används Hitta k största bland n element Histogramproblemet Schemaläggning PFK (Föreläsning 13) VT 2013 1 / 15
Hitta k största bland n element Algoritm 1: Sortera Problem: Givet en vektor a med n tal, tag reda på de k största. Ex: Talen är 4, 1, 9, 5, 2, 6 och k = 3 ger svaret 5, 6, 9 Algoritm: Lagra talen i en vektor och sortera dem. Sedan är det enkelt att avläsa de k största: 1, 2, 4, 5, 6, 9 Välj en lämplig sorteringsalgoritm. Tidskomplexitet? PFK (Föreläsning 13) VT 2013 2 / 15
Hitta k största bland n element Algoritm 2: Håll reda på de k hittills största Gå igenom de n talen och försök hålla reda på de k största bland de tal vi hittills betraktat. Gå igenom k av talen i vektorn a och sätt in dem i R För varje tal t av de övriga (n - k) ur a om t > minsta talet i R tag bort minsta talet ur R sätt in t i R De k största talen finns nu att hämta i R Välj en lämplig datastruktur för R. Tidskomplexitet? PFK (Föreläsning 13) VT 2013 3 / 15
Histogramproblemet Man har n element i en samling. Man vill veta vilka olika element som förekommer och hur många gånger de förekommer. Ex: En text med ord. Vi vill kartlägga vilka ord som förekommer och antal förekomster av resp. ord. Ex: Vi har ett register över hela befolkningen. Vi vill ta reda på vilka olika förnamn som förekommer och hur många som har dessa namn. Ex: Kasta tärning många gånger. Hur många 1:or, 2:or...? Namnet på problemet beror på att man kan presentera resultatet i form av ett histogram om man vill. Se nästa bild. PFK (Föreläsning 13) VT 2013 4 / 15
Histogramproblemet Exempel: kasta tärning En tärning kastades 10 gånger: {4, 2, 3, 2, 4, 2, 2, 6, 2,4} Resultat som en lista av par (element,frekvens): (2,5) (3,1) (4,3) (6,1) Resultat som histogram: frekvens 5 4 3 2 1 1 2 3 4 5 6 element PFK (Föreläsning 13) VT 2013 5 / 15
Histogramproblemet lösning för ett specialfall Specialfall: elementen är heltal i ett begränsat intervall 0..s. skapa en heltalsvektor a av storlek s + 1; för vart och ett av elementen e: a[e]++; a 0 1 2 3 4 5 6 0 0 5 1 3 0 1 PFK (Föreläsning 13) VT 2013 6 / 15
Histogramproblemet generell lösning Algoritm 1: Sortera Elementen kan ha godtycklig typ. T ex typen String om det är namn som räknas. Algoritm: Sortera elementen element som är lika hamnar då intill varandra Iterera genom den sorterade samlingen och räkna frekvenser Välj en lämplig sorteringsalgoritm. Tidskomplexitet? PFK (Föreläsning 13) VT 2013 7 / 15
Histogramproblemet generell lösning Algoritm 2: Map Man kan använda en map, t.ex. HashMap. Hur? Tidskomplexitet? PFK (Föreläsning 13) VT 2013 8 / 15
Problemexempel: schemaläggning av maskiner Vi har m identiska maskiner och n jobb att utföra. Tiden för att utföra jobb i är t i. En maskin kan bara göra ett jobb i taget. Ett enskilt jobb kan inte delas mellan olika maskiner. Ett jobb som en maskin börjat utföra görs färdigt utan avbrott. Hur ska jobben allokeras till maskinerna för att tiden det tar att göra alla klara ska bli så kort som möjligt? PFK (Föreläsning 13) VT 2013 9 / 15
Schemaläggning av maskiner Man känner inte till någon effektiv algoritm som löser problemet: Att prova alla möjligheter går men kostar exponentiell exekveringstid. Approximativa algoritmer måste användas i praktiken för stora probleminstanser. En sådan är LPT-algoritmen Longest Processing Time first. PFK (Föreläsning 13) VT 2013 10 / 15
LPT-algoritmen Jobben allokeras till maskiner efter avtagande tidsåtgång. Jobbet allokeras till den maskin som har minst att göra (blir ledig tidigast). Ex: 3 maskiner M 1..M 3 och 7 jobb j 1..j 7 med tidsåtgång 2, 14, 4, 16, 6, 5, 3. 16 ( j ) M 1 4 M 2 M 3 14 ( j ) 2 6 ( j ) 5 ( j ) 3 ( j ) 7 4 ( j ) 2 ( j ) 5 6 3 1 Total tidsåtgång för att avsluta alla jobb: 17 PFK (Föreläsning 13) VT 2013 11 / 15
LPT-algoritmen Ger inte alltid den optimala lösningen Ex: 2 maskiner och 5 jobb med tidskrav 6, 6, 5, 5, 5. Total tidsåtgång för att avsluta alla jobb blir 16: M 1 6 5 5 M 2 6 5 Men bättre lösning finns tidsåtgång 15: M 1 5 5 5 M 2 6 6 PFK (Föreläsning 13) VT 2013 12 / 15
LPT-algoritmen Implementering Man kan implementera LPT-algoritmen med hjälp av prioritetskö. Maskinerna sätts in i prioritetskön. Maskinerna innehåller attributen prio = tidpunkt då maskinen blir ledig och ett heltalsattribut nbr = maskinnummer. Alla maskiner är från början lediga. De har då prioritet = 0. Givet en vektor t med n element, där t[i] = tidsåtgång för jobb i. sortera vektorn t i avtagande ordning skapa en prioritetskö q låt alla maskiner få prioritet 0 och sätt in dem i q för i = 0..n-1 Machine m = q.poll(); m.prio = m.prio + t[i]; q.offer(m); PFK (Föreläsning 13) VT 2013 13 / 15
LPT-algoritmen Fallet antal jobb antal maskiner I specialfallet antal jobb antal maskiner (n m) kan algoritmen förenklas: Alla jobb kan då sättas igång samtidigt på var sin maskin. Det blir det längsta jobbet som bestämmer tidsåtgången. Vi behöver alltså bara söka maximum av elementen i vektorn t. PFK (Föreläsning 13) VT 2013 14 / 15
LPT-algoritmen tidskomplexitet Allmänna fallet Vi antar att antal jobb > antal maskiner (n > m). Sortera jobben efter avtagande tidsåtgång kostar O(n log n) med en effektiv metod Bygga en heap och sätta in de m maskinerna kostar O(m) eftersom alla maskinernas prioritet är lika initialt poll n gånger och offer n gånger i heapen av storlek m kostnad O(n log m) Totalt: O(n log n) PFK (Föreläsning 13) VT 2013 15 / 15