DD2458, Problemlösig och programmerig uder press Föreläsig 10: Kombiatorik Datum: 2009-11-18 Skribeter: Cecilia Roes, A-Soe Lidblom, Ollata Cuba Gylleste Föreläsare: Fredrik Niemelä 1 Delmägder E delmägd av e mägd [] a 1, a 2,..., a är e mägd såda att varje elemet i delmägde s i mägde []. För att kostruera e delmägd ka ma för varje elemet i ursprugsmägde bestämma huruvida det ska vara e del av delmägde eller ite, det totala atalet delmägder blir då 2, alltså atalet möjliga kombiatioer av sådaa val. 1.1 Biomialtale k kallas biomialtal och är atalet delmägder av med storlek k. Ma ka också se det som atalet sätt att välja k elemet ur. Notera att k bara är deierat för icke-egativa k och, och för k > är k oll, eftersom det ite s ågot sätt att välja er elemet ä vad som s i mägde. Totala atalet delmägder är då summa av alla biomialtal där k går frå 0 till : i0 2 i Biomialtale ka deieras rekursivt på följade sätt 1 1 +, 1. k k 1 k 0 Detta ka visas geom kostruktio på följade sätt: Välj ett godtyckligt elemet x i e mägd X av storlek, för varje delmägd av storlek k gäller att detta elemet atige är i delmägde, eller i delmägdes komplemet. Atalet delmägder av storlek k sådaa att elemetet är i delmägde är atalet delmägder av storlek k 1 ur mägde X \ {x}, detta blir 1 k 1. Atalet delmägder sådaa att x är i dess komplemet är helt ekelt atalet delmägder av storlek k ur X \ {x}, alltså 1 k. Biomialtale är kopplade till Pascals triagel, då dea byggs upp på ett likade sätt. I triagel är värdet på uvarade positio summa av de två ärmaste tale på rade ovaför. Så för att hitta k i Pascals triagel tittar ma på det k:te elemetet på rad. 1
2 DD2458 Popup HT 2009 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 Figure 1: Pascals triagel Ma ka beräka biomialtale direkt ur de rekursiva formel ova. Görs detta uta memoiserig är tidskomplexitete expoetiell, O2. Med memoiserig däremot får vi O 2, då tale i gur 2 måste beräkas ebart e gåg. 2 Figure 2: Beräkade biomialtal För att beräkige skall bli mer eektiv ka ma istället aväda formel:! k k!k! 1 2... k k + 1... 1 2... k1 2... k vilket ger oss algoritm 1. Algorithm 1: Räkar ut k Biomial, k 1 r 1 2 for i 1 to k 3 r r k + i/i 4 retur r k + 1 k + 2..., 1 2... k Att vi i for-loope ka dela med i beror på att hela tide är mist e av termera vi multiplicerat i i r delbar med i. För att detta skall vara sat måste vi först multiplicera ia vi delar. Dea algoritm går i O, me har lite större risk för overow. Om ma aväder de rekursiva formel är största talet utdata, me i de här algoritme får vi i sista varvet av for-loope ett tal som är e faktor k större ä svaret. För att geerera alla delmägder av e mägd med storlek ka ma helt ekelt räka uppåt frå 0 till 2 och titta på de biära represetatioe av dessa tal, där e etta på positio i betyder att det i:te elemetet är med i delmägde, och e olla betyder att det ite är det.
Kombiatorik 3 1.2 Multiomialtale 1, 2,..., k kallas multiomialtal och är atalet sätt ma ka dela e mägd av k storlek i delmägder av storlekar 1, 2,..., k där i. Likt biomialtale ka multiomialtale deieras rekursivt som 1, 2,..., k i1 i1 k 1 1, 2,..., i 1,..., k Alterativt ka de deieras ur biomialtale som 1, 2,..., k k i 1 j1 j i i1! 1! 2! k!., då e motsvarade uppdelig ka kostrueras geom att först välja 1 elemet ur de ursprugliga mägde, seda 2 ur de resterade och så vidare. Notera att det sista elemetet i varje såda expasio alltid är lika med 1. Detta ger ett ekelt sätt att återaväda algoritmer för biomialtal för att beräka multiomialtal. Ma ser äve lätt ur dea idetitet att multiomialtalet är lika med biomialtalet k. k, k 2 Permutatioer Om ma bara har uika elemet är atalet permutatioer av elemet! stycke, först väljs ett elemet blad, se ett blad 1 osv. Hur måga s det då ma tillåter upprepigar? Exempel: Hur måga permutatioer s det av sträge abacca? Elemete a 3 bc 2 ska placeras ut på 6 platser. Att placera ut 3 stycke a: på 6 platser ka göras på 6 3 sätt. Det lämar 3 platser kvar till b, som alltså ka sättas ut på 3 1 sätt. Seda s det 2 platser kvar till de 2 c:a 2 2. Detta är samma sak som atalet delmägder där vi har 3,2 resp 1 elemet i varje 6 3,2,1. Om ma täker sig att ma delar upp positioera, istället för bokstävera, i delmägder så ser ma att ma får 3 delmägder, e med 3 elemet där a:a skall få plats, e med 2 elemet för c:a och e med 1 elemet för b:et. Atalet permutatioer är ma tillåter upprepigar är alltså multiomialtalet 1, 2,..., k där i är atalet förekomster av elemet i. Hur gör ma då för att geerera alla permutatioer? Det gör ma med 3 ekla steg: 1. Hitta första 2. Ta ästa, upprepa 3. Hitta sista
4 DD2458 Popup HT 2009 Första elemetet är de sorterade sträge, tex aaabcc, och sista är de bakåtsorterade sträge ccbaaa. Hur hittar ma då ästa? Det är alltid e fråga om att byta plats på saker, och ma vill alltid byta så lite som möjligt, de ästföljade sträge skall vara så lite större ä de föregåede som möjligt. Ma vill byta elemetet på de mist sigikata platse som är midre ä ågot av elemete till höger om sig och ma vill byta med det mista elemet till höger som är större. Seda vill ma sortera allt till höger för att få e så lite ökig som möjligt. Ex. abac ac abac ca och ac acba ac bcaa ac baac. Om elemete ite har e ibördes ordig ka e godtycklig ordig avädas. Algorithm 2: Hittar ästa permutatio ext_permutatiox, 1 for i 1 to 1 2 if x i < x i+1 3 break 4 for j to i + 1 5 if x j > x i 6 break 7 swapx j,x i 8 reversex i+1,x 9 retur x Permutatiosalgoritme ka äve avädas till att geerera alla delmägder med k elemet. Ma skapar då e sträg beståede av k stycke 1:or och k 0:or och kör permutatiosalgoritme på de. För biära tal s det e bättre algoritm, som ka avädas på system som aväder 2-komplemets represetatio. Algorithm 3: Hittar ästa permutatio ext 1 c AND % d j 2 r + c % swap 3 retur r XOR /4 c OR r % reverse Ett alterativ för portabel kod är att aväda prexikremet istället för bitoperatioera. 3 Partitioer E partitio av e mägd, är e uppdelig av mägde i disjukta, icketomma delmägder, dvs. B B 1, B 2,..., B k är e partitioerig i k delar omm B i [] B i Bj B i Dessa delmägder kallas äve block.
Kombiatorik 5 3.1 Stirligtal Atalet partitioer av [] i k block är Stirligtale av det adra slaget, dessa ka deieras rekursivt som S, k S 1, k 1 + k S 1, k, { 0 k >, k < 0, < 0 S, k 1 k 0, 0 Liksom med biomialtal ka detta visas geom kostruktio: Välj ett godtyckligt elemet x ur e mägd X med storlek, detta elemet är atige esam i sitt block, eller ite. Av det första fallet måste det as S 1, k 1 kombiatioer, dvs. atalet partitioer av X \ {x} i k 1 block. För att beräka atalet kombiatioer av det adra fallet kostateras att X \ {x} ka partitioeras i k block på S 1, k olika sätt, i varje såda kombiatio ka k olika partitioer av X bildas geom att stoppa i x i de k olika blocke. Det totala atalet partitioer i det adra fallet blir alltså k S 1, k. 3.2 Belltal Belltale beteckar det totala atalet partitioer av e mägd med storlek. Dessa har ett ekelt sambad till Stirligtale, då det är summa av atalet partitioer av mägde i i block för alla 1 i. B S, k k1 Belltale ka äve deieras rekursivt som B k1 1 B k. k 1 Vilket ka visas geom kostruktio som följer: Välj ett godtyckligt elemet x ur e mägd X av storlek. I varje partitio av mägde X är x i e partitio, dea partitio har e storlek k, 1 k. Atalet sätt att kostruera e partitio av storlek k ur mägde X \ {x} är 1 k 1. Atalet sätt att partitioera resterade k elemet på är B k. Atalet partitioer av X såda att x tillhör e partitio av storlek k är alltså 1 B k k 1 Det totala atalet sätt blir då k1 1 B k. k 1
6 DD2458 Popup HT 2009 4 Catalatal Catalatale ka avädas till mycket, de beskriver blad aat atalet biära träd och atalet sätt att korrekt placera ut pareteser. Tale ka deieras rekursivt som 1 C Ck C k 1, C0 1, k0 där ma ka täka sig att ma summerar över alla kombiatioer av storlekar på delträde, där k är storleke på det västra delträdet, och k 1 blir storleke på högra delträdet. Alla kombiatioer för C3 visas i gure eda. Figure 3: Catalatal som träd Parallelle med parateser ka förklaras geom att e korrekt paretetiserig alltid ka skrivas på forme XY, där X motsvarar väster delträd och Y motsvarar höger delträd dessa är alltså äve de på forme X Y såtillvida de ite är tomma, i vilket fall de represeteras av de tomma sträge.