Gegeven twee rechthoekige, gehele tabellen en , waarbij gegeven is dat elk
element in of ofwel gelijk is aan of gelijk is aan .
We definiëren de grootheid als het aantal elementen waar en
verschillen. Het is de bedoeling om via een reeks bewerkingen op de zo klein
mogelijk te maken (m.a.w. lijkt gaandeweg meer op , en wordt idealiter gelijk aan
, waardoor de score 0 wordt). Hierbij zijn volgende bewerkingen toegelaten:
- een rij van met vermenigvuldigen
- een kolom van met vermenigvuldigen
.
Schrijf volgende functies:
- : deze methode levert de score op, zoals hierboven gedefinieerd
- : deze methode voert één toegelaten bewerking uit op
. Je gaat als volgt tewerk: je probeert alle rijbewerkingen, en vervolgens alle kolombewerkingen,
en berekent telkens de resulterende score. Je past dan de bewerking op toe die in de laagste
score resulteert. Indien meerdere bewerkingen in dezelfde laagste score resulteren, neem je de eerste
bewerking die dit realiseert in de hierboven opgegeven volgorde. Het resultaat van de methode is een tuple,
bestaande uit de aangepaste versie van , gevolgd door de nieuwe score.
- : deze methode roept de methode op tot geen betere
score meer gevonden wordt. Het resultaat van de methode is de resulterende tabel
(die volgens de opgegeven procedure zo dicht mogelijk bij de tabel ligt).
Je mag veronderstellen dat de argumenttabellen dezelfde dimensies hebben, uit minstens 1 rij en minstens 1 kolom bestaan, en
enkel de waarden en bevatten.
Voorbeeld
a0 = np.array([[1, 1, 1], [-1, -1, -1], [1, -1, 1]])
a1 = np.array([[1, 1, 1], [-1, -1, -1], [-1, 1, -1]])
a2 = np.array([[1, 1, 1], [-1, -1, -1], [-1, 1, -1]])
b0 = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])
b1 = np.array([[1, 1, 1], [-1, -1, -1], [-1, 1, -1]])
b2 = np.array([[-1, -1, -1], [-1, -1, -1], [-1, -1, -1]])
score(a0,b0) = 4
score(a1,b1) = 0
score(a2,b2) = 4
volgende(a0,b0) = (np.array([[1, 1, 1], [1, 1, 1], [1, -1, 1]]), 1)
volgende(a1,b1) = (np.array([[1, 1, 1], [-1, -1, -1], [-1, 1, -1]], 0)
volgende(a2,b2) = (np.array([[-1, -1, -1], [-1, -1, -1], [-1, 1, -1]], 1)
losOp(a0,b0) = np.array([[1, 1, 1], [1, 1, 1], [1, -1, 1]])
losOp(a1,b1) = np.array([[1, 1, 1], [-1, -1, -1], [-1, 1, -1]])
losOp(a2,b2) = np.array([[-1, -1, -1], [-1, -1, -1], [-1, 1, -1]])