1 De permanent van een matrix

Download Report

Transcript 1 De permanent van een matrix

1
De permanent van een matrix
Schrijf Sn voor de symmetrische groep, met als elementen alle permutaties σ van de getallen
{1, . . . , n}. De permanent van een n × n matrix A = (aij ) is een getal dat formeel als volgt is
gedefinieerd,
X
per(A) =
a1σ(1) · a2σ(2) · . . . · anσ(n) .
(1)
σ∈Sn
Deze sommatie gaat dus over producten van entries uit de rijen 1 tot en met n, waarbij
de kolommen waaruit deze entries worden genomen telkens een andere permutatie van de
getallen 1 tot en met n vormen. Zo is per(A) = a11 a22 + a12 a21 voor 2 × 2 matrices A, en
per(A) = a11 a22 a33 + a11 a23 a32 + a12 a21 a33 + a12 a23 a31 + a13 a21 a32 + a13 a22 a31
(2)
voor 3 × 3 matrices A. Wat dat betreft lijkt de permanent dus sterk op de determinant: het
zijn beide voorbeelden van Schurfuncties. Dat zijn de matrixfuncties van de vorm
X
f (σ)a1σ(1) · a2σ(2) · . . . · anσ(n) ,
(3)
σ∈Sn
waarbij f : Sn → C een groepshomomorfisme is. Dit homomorfisme is voor de permanent het
triviale homomorfisme σ 7→ 1 en voor de determinant is het σ 7→ sign(σ).
De permanent werd ge¨ıntroduceerd door Augustin-Louis Cauchy. Na de formulering van het
Vermoeden van Van der Waerden werd het concept pas echt uitvoerig bestudeerd.
Augustin-Louis Cauchy (1789-1857), Bartel Leendert van der Waerden (1903-1996),
Henryk Minc (1919-2013) en Herbert John Ryser (1923-1985)
E´en van de ontwikkelingen was het algoritme van Ryser, de tot op heden snelste manier om
de permanent van een matrix te berekenen. Het naslagwerk Permanents van Henryk Minc is
een beroemd boek dat vrijwel uitsluitend over de permanent gaat.
1.1
Enkele voorbeelden van toepassingen van de permanent
Schrijf e = e1 + . . . + en voor de all-ones vector, dan is eenvoudig na te gaan dat
per(ee> ) = n!
(4)
Immers, ieder van de producten in de som (1) is gelijk aan ´e´en en dus telt de som op tot
het aantal elementen van Sn . Ook is in te zien dat per(ee> − I) gelijk is aan het aantal
derangementen van 1, . . . , n, oftewel, de permutaties σ ∈ Sn met de eigenschap dat σ(j) 6= j
1
voor alle j ∈ {1, . . . , n}. Een permutatie σ waarvoor σ(j) = j zal namelijk een bijdrage nul
geven aan de som omdat ajσ(j) = 0, terwijl de overige permutaties allemaal een bijdrage ´e´en
geven. het aantal derangementen van n noteren we met !n en er geldt dat
n!
>
!n = per(ee − I) =
,
(5)
e
met [x] de integer het dichtst bij x is. Voor bovenstaande breuk is die altijd goed gedefinieerd.
Daar waar de determinant laat zien wanneer een matrix inverteerbaar is, laat de permanent
iets zien over het patroon van in de matrix aanwezige nullen.
Stelling (Frobenius-K¨
onig) De permanent van een niet-negatieve n × n matrix A is nul
als en alleen als er indexverzamelingen {i1 , . . . , ik } en {j1 , . . . , j` } bestaan met k + ` = n + 1
en
aij = 0 voor alle i ∈ {i1 , . . . , ik } en j ∈ {j1 , . . . , j` }.
(6)
Bewijs. Zie bijvoorbeeld het boek Permanents van Henryk Minc.
1.2
Ontwikkeling van de permanent naar rijen of kolommen
Net als de determinant kan de permanent berekend worden middels ontwikkeling naar een rij
of een kolom. Zonder bewijs geven we hier een voorbeeld. Laat


1 0 4
A= 2 1 1 
(7)
3 2 1
dan geldt dat
per(A) = 1 · per
1 1
2 1
+ 0 · per
2 1
3 1
+ 4 · per
2 1
3 2
= 3 + 0 + 28 = 31,
maar bijvoorbeeld ook dat
1 1
0 4
0 4
per(A) = 1 · per
+ 2 · per
+ 3 · per
= 3 + 16 + 12 = 31.
2 1
1 1
2 1
(8)
(9)
Zowel de determinant als de permanent zijn te berekenen middels volledige ontwikkeling naar
rijen en kolommen, dus tot de determinant of permanent van 1×1 matrices wordt ge¨evalueerd.
Dit zijn er echter n!, en dus voor grotere n is deze manier af te raden.
Een aanzienlijke verbetering bij de berekening van de determinant volgde uit het feit dat elementaire rij-operaties de determinant van een matrix op een goed begrepen manier veranderen.
Dus de te volgen strategie om een determinant uit te rekenen is om middels rij-operaties de
matrix op echelonvorm te brengen, waarna de determinant eenvoudig bepaald van worden.
1.3
Een miljoen dollar voor permanentberekening in polynomiale tijd
Net als voor de determinant geldt dat de permanent lineair is in ieder van de rijen en kolommen. In tegenstelling tot de determinant blijft de permanent onveranderd als je twee rijen of
2
kolommen met elkaar verwisselt. In het bijzonder vertelt de permanent je niets over het al
dan niet inverteerbaar zijn van een matrix, immers,
1 1
3 6
per
= 2 en per
= 0,
(10)
1 1
−2 4
terwijl de linkermatrix niet inverteerbaar is en de rechtermatrix wel. De elementaire rijoperatie die ten grondslag ligt aan het eenvoudig kunnen bepalen van de determinant middels
rij-operaties is, dat als je een veelvoud van een rij van de matrix optelt bij een andere rij, de
determinant niet verandert. Voor de permanent is dit in het geheel niet het geval. Zie
3 6
3 6
3 6
∼
∼
(11)
−2 4
−3 6
0 12
en merk op hoe de permanent bij de eerste elementaire rijoperatie met een factor 3/2 toeneemt (en dus nul blijft) maar in de tweede stap ineens gelijk wordt aan 36.
Uitdaging. Het is onbekend wat de snelste manier is om de permanent van een matrix uit
te rekenen. Als je er in slaagt om een manier te vinden die polynomiaal is in n dan heb je een
probleem opgelost dat het beroemde P=NP probleem uit de zeven Millenium Prize Problems
impliceert, waarvan de oplossing een miljoen dollar waard is.
Met polynomiaal in n bedoelen we grofweg dat het aantal rekenkundige operaties zoals
optellingen en vermenigvuldigingen dat nodig is om een uitkomst te berekenen begrensd
wordt door een polynoom in n. Voor de determinant is dit een derdegraadspolynoom in n.
1.4
Het algoritme van Ryser: illustratie
In 1963 vond Herbert William Ryser een methode om de complexiteit van de berekening van
de permanent terug te brengen van O(n!) voor de naieve methode tot O(2n n). We illustreren
het idee achter deze methode voor n = 3. Bekijk de matrix A uit (7). Met (2) vinden we dat
per(A) = 1 · 1 · 1 + 1 · 1 · 2 + 0 · 2 · 1 + 0 · 1 · 3 + 4 · 2 · 2 + 4 · 1 · 3 = 31.
(12)
Deze zes producten vormen een bepaalde deelverzameling van de in totaal 27 producten van
de entries van de matrix die je krijgt als je de haakjes wegwerkt in het product P (A) van de
rijsommen van A, gedefinieerd als P (A) = (1 + 0 + 4)(2 + 1 + 1)(3 + 2 + 1). Deze 27 producten
zijn
1·2·3 1·2·2 1·2·1
1·1·3 1·1·2 1·1·1
1·1·3 1·1·2 1·1·1
0·2·3 0·2·2 0·2·1
0·1·3 0·1·2 0·1·1
0·1·3 0·1·2 0·1·1
4·2·3 4·2·2 4·2·1
4·1·3 4·1·2 4·1·1
4·1·3 4·1·2 4·1·1
Ryser bedacht een manier om de ongewenste 21 producten hier op effici¨ente wijze uit te
verwijderen. Deze niet helemaal triviale manier is, door er eerst 24 uit te verwijderen, en de
drie die er teveel uit zijn verwijderd, daarna toch weer aan toe te voegen. Hoe deed hij dit?
Schrijf Aj voor de 3 × 2 matrix die uit A ontstaat door de j-de kolom te verwijderen,






0 4
1 4
1 0
A1 =  1 1  , A 2 =  2 1  , A 3 =  2 1  .
2 1
3 1
3 2
3
Voor iedere j ∈ {1, 2, 3} bestaat het product P (Aj ) van de rijsommen van Aj uit acht termen,
P (A1 ) = (0 + 4)(1+ 1)(2 +1) = 0·1·2 +0·1·1 +0·1·2 +0·1·1 +4·1·2 +4·1·1 +4·1·2 +4·1·1,
P (A2 ) = (1+ 4)(2+ 1)(3 +1) = 1·2·3 +1·2·1 +1·1·3 +1·1·1 +4·2·3 +4·2·1 +4·1·3 +4·1·1,
P (A2 ) = (1+ 0)(2+ 1)(3 +2) = 1·2·3 +1·2·2 +1·1·3 +1·1·2 +0·2·3 +0·2·2 +0·1·3 +0·1·2.
Merk op dat ieder van deze 24 producten bestaat uit drie getallen die uit twee van de drie
kolommen van A komen, en dus geen deel uitmaken van de zes termen van per(A) in (2,
waarvan de drie getallen immers uit verschillende kolommen van A komen. Merk vervolgens
op dat drie van de bovenstaande 24 producten twee keer voorkomen, namelijk, precies de
producten van drie getallen uit dezelfde kolom. Dit leidt tot de conclusie dat
per(A) = P (A) − (P (A1 ) + P (A2 ) + P (A3 )) + P (A1,2 ) + P (A2,3 ) + P (A1,3 ),
(13)
waarbij Ai,j de matrix is die je krijgt door kolommen i en j uit A te verwijderen. Voor de
gegeven matrix A vinden we daarom dat
per(A) = 120 − 24 − 60 − 15 + 4 + 6 + 0 = 31.
Dit komt dus precies overeen met de middels andere methoden gevonden waarde.
1.5
Het algoritme van Ryser in iets meer abstractie
In het voorgaande bekeken we voor een 3 × 3 matrix A het product van de rijsommen
P (A) = (a11 + a12 + a13 )(a21 + a22 + a23 )(a31 + a32 + a33 ).
(14)
Als we de dit product uitvermenigvuldigen, ontstaat er een som van 27 producten van drie
getallen, die de eigenschap hebben dat ze uit drie verschillende rijen van A komen,
X
P (A) =
a1f (1) · a2f (2) · a3f (3)
(15)
f :{1,2,3}→{1,2,3}
waarbij gesommeerd wordt over de verzameling S van alle 27 verschillende functies van
{1, 2, 3} naar zichzelf. De permanent van A is precies gelijk aan de som over de deelverzameling S ∗ van bijectieve functies van {1, 2, 3} naar zichzelf, oftewel, de permutaties van {1, 2, 3}.
De methode van Ryser is nu gebaseerd op de volgende observatie. Laat Sj de verzameling
zijn van functies van {1, 2, 3} naar {1, 2, 3} \ {j}. Dan behoort iedere niet-bijectieve f ∈ S
tot ´e´en of meerdere van de verzamelingen S1 , S2 , S3 . En dus kan de som over S ∗ geschreven
worden als
X X X X X
X
X
X
X
=
−
−
−
+
+
+
−
,
(16)
S∗
S
S1
S2
S3
S1 ∩S2
S2 ∩S3
S1 ∩S3
S1 ∩S2 ∩S3
waarbij aangetekend dient te worden dat de doorsnede S1 ∩ S2 ∩ S3 in dit geval leeg is.
Opmerking.
Formule (16) heet het principe van inclusie en exclusie, en kan worden
gegeneraliseerd naar n × n matrices, met hierbij horende matrices die ontstaan door uit A
´e´en, twee, tot en met n − 1 kolommen weg te laten. We bekijken dit in de volgende sectie.
4
1.6
De formule van Ryser
Schrijf [n] = {1, . . . , n}. Het product P (A) van de rijsommen van A bestaat uit de nn
producten van n entries van A, waarbij ieder van deze n entries afkomstig zijn uit de n
verschillende rijen van A. Met andere woorden,
X
a1f (1) · a2f (2) · . . . · anf (n) (17)
(a11 + . . . + a1n ) · . . . · (an1 + . . . + ann ) = P (A) =
f :[n]→[n]
waarbij gesommeerd wordt over alle mogelijke nn functies f : [n] → [n]. Hiervan willen we
de n! producten overhouden waarvan de n getallen die het product vormen, uit verschillende
kolommen van A afkomstig zijn: oftewel, sommeren over alle bijectieve functies f : [n] → [n].
De algemene formule van Ryser laat zich als volgt opschrijven. Schrijf Σj (A) voor de verzameling van alle n×(n−k) matrices die ontstaan door op alle mogelijke verschillende manieren
k kolommen uit A te verwijderen. Dan is dus
Σ0 (A) = {A}, Σ1 (A) = {A1 , . . . , An }, en Σn−1 (A) = {Ae1 , . . . , Aen }.
(18)
Laat vervolgens
X
Sk =
P (X),
(19)
X∈Σk (A)
waarbij P (X) staat voor het product van de rijsommen van X. Dan geldt dat
per(A) = S0 − S1 + S2 − S3 + . . . + (−1)n−1 Sn−1 .
(20)
Merk op dat S0 = P (A) en S1 = P (A1 ) + · · · + P (An ) en Sn−1 = P (Ae1 ) + · · · + P (Aen ) en
dat we voor n = 3 hiermee inderdaad de eerder gegeven formule (13) terugvinden.
1.7
Dubbelstochastische matrices
Een dubbelstochastische matrix S is een niet-negatieve matrix met de eigenschap dat zowel de
rijen als de kolommen optellen tot ´e´en, oftewel,
S ≥ 0, Se = e, en
e> S = e> .
(21)
De eenvoudigste voorbeelden van dubbelstochastische n×n matrices zijn de n! permutatiematrices. Dit zijn precies de matrices M1 , . . . , Mn! met n enen en n2 − n nullen, waarbij in iedere
rij en iedere kolom precies ´e´en 1 staat. Voor n = 3 zijn het bijvoorbeeld






1 0 0
1 0 0
0 1 0
M1 =  0 1 0  , M 2 =  0 0 1  , M 3 =  1 0 0  ,
0 0 1
0 1 0
0 0 1






0 1 0
0 0 1
0 0 1
M4 =  0 0 1  , M 5 =  1 0 0  , M 6 =  0 1 0  .
(22)
1 0 0
0 1 0
1 0 0
Het is niet moeilijk na te gaan dat de matrix M gedefinieerd door
M=
n!
X
µj ≥ 0 en
µj Mj , waarbij
j=1
n!
X
j=1
5
µj = 1
(23)
ook dubbelstochastisch is. De omgekeerde implicatie is een redelijk zware stelling.
Stelling (Birkhof-Von Neumann) Zij M een dubbelstochastische n × n matrix. Dan
bestaan er µ1 , . . . , µn! ≥ 0 met µ1 + . . . + µn! = 1 zodanig dat
M=
n!
X
µ j Mj .
(24)
j=1
Oftewel, iedere dubbelstochastische matrix is een convexe combinatie van permutatiematrices.
Garrett Birkhoff (1911-1996) and John von Neumann (1903-1957)
De convexe deelverzameling in de vectorruimte van n × n matrices bestaande uit alle dubbelstochastische matrices wordt ook wel het Birkhoff-polytoop genoemd.
De volgende stelling was gedurende ruim een halve eeuw een open probleem, dat de concepten
van permanent en dubbelstochastische matrix onlosmakelijk met elkaar heeft verbonden.
Stelling. Laat M ∗ de n × n dubbelstochastische matrix zijn waarvan alle entries gelijk zijn
aan n−1 . Dan geldt
per(M ∗ ) < per(M )
(25)
voor alle overige dubbelstochastische matrices M .
Opmerking: De stelling maakte faam als het vermoeden van Van der Waerden, geformuleerd in 1926. De zoektocht naar een bewijs resulteerde in een ware opleving in de bestudering van de permanent, en resulteerde in 1980 uiteindelijk in een bewijs van B. Gyires, en
onafhankelijk daarvan in 1981 een bewijs van G. P. Egorychev and D. I. Falikman.
1.8
Opgaven
Opgave 1
Schrijf een Matlab functie function y = perm1(A) die de permanent van de vierkante matrix
A bepaalt aan de hand van de definitie (1). Maak gebruik van de Matlab functie perms.
Gebruik je functie om het aantal derangementen te bepalen van 1, . . . , n voor n ∈ {2, 3, 4, 5, 6}.
Kijk op de website www.oeis.org, de onlince encyclopedia of integer sequences of je deze rij
getallen daar terug vindt. Vul de rij aan tot n = 10 met behulp van deze website.
6
Opgave 2
Schrijf een recursieve Matlab functie function y = perm2(A) die de permanent van de
vierkante matrix A bepaalt aan de hand van ontwikkeling naar de eerste kolom van A.
Opgave 3
Schrijf een Matlab functie function y = perm3(A) die de permanent van de vierkante matrix
A bepaalt met het algoritme van Ryser. Maak handig gebruik van het commando nchoosek.
Opgave 4
Vergelijk je drie programma’s perm1, perm2, perm3 door ze voor oplopende waarde van n
de permanent uit te laten rekenen van de all-ones matrix. Stel met behulp van de Matlab
profiler een tabel samen die de benodigde executietijd van de drie methoden uitzet tegen n.
Om een eerlijker beeld te krijgen van de executietijd voor kleinere waarden van n kan je
overwegen om die permanent in een for-loop k keer uit te laten rekenen, en dan de totale
benodigde tijd door k te delen. Je zult namelijk zien dat de executietijd van herhaalde,
identieke taken, nooit helemaal hetzelfde is, doordat je computer de processor tegelijertijd
ook voor andere dingen gebruikt. Middelen over k executies is daarom een goed idee.
Opgave 5
Schrijf een functie M = DoubleStoch(n) die een random dubbelstochastische n × n matrix
genereert. Maak hierbij gebruik van het commando rand(1,k) dat een vector van k random
getallen tussen de nul en ´e´en retourneert. Maak hiermee een vector van k getallen µ1 , . . . , µk
tussen de nul en ´e´en die optellen tot ´e´en, en gebruik vervolgens (23) en het Matlab commando
perms om M te construeren.
Opgave 6
Genereer voor iedere n ∈ {3, 4, 5} veertig random dubbelstochastische matrices met behulp
van je code van Opgave 5. Bereken hiervan de permanent met je meest effici¨ente code, en sla
deze permanenten op in een 40-vector v. Trek hiervan af de waarde van de permanent van
de constante dubbelstochastische matrix M ∗ uit (25). Maak met behulp van >>stem(v) een
plaatje van de resulterende waarden. Sla de drie plaatjes op met als titel je eigen naam.
7