M
Martin
Gast
Ich suche nach einem Algorithmus, mit dem ich eine Matrix nach einer vorgegebenen Untermatrix durchsuchen kann. Die im Web verfügbaren Matrix-Packages bieten diese Funktion, so weit ich gesehen hab, nicht an. Hat jemand eine Idee, wie ich das am besten angeh?
In meinem speziellen Fall, beinhaltet die Matrix (beliebige Größe) nur die Werte 1 und 0 (eins bedeutet belegt und 0 frei), und es soll nach einer n*k-Untermatrix aus lauter Nullen gesucht werden. Der Algorithmus soll also z.B. erkennen, dass in folgender 5*3-Matrix nur noch ein 2*2-Feld frei ist.
1 1 1 1 1
1 1 1 0 0
1 1 1 0 0
Damit wäre mir fürs erste schon sehr geholfen. Toll wäre es dann noch, wenn auch jene Fälle berücksichtigt würden, bei denen die gesuchte Untermatrix in mehreren Teilen enthalten ist. Also z.B.:
1 1 1 1 1
1 1 1 0 0
1 0 0 1 1
wenn möglich aber auch
1 1 1 1 0
1 1 1 1 0
1 0 0 1 1
wichtig ist nur, dass immer mindestens zwei Felder nebeneinander frei sind.
Dann müsste man noch Fälle wie
1 1 0 0 1
1 1 1 0 0
1 1 1 1 1
1 0 1 1 1
1 0 0 1 1
1 1 0 1 1
herausnehmen, wo es zusätzlich eine vertikale/horizontale Überlappung gibt, usw.
(Ist ein Problem im Rahmen einer kleinen Spieleprogrammierung.)
Fürs erste wäre ich sehr dankbar, wenn jemand einen Ansatz für das grundlegende Problem hat, der in akzeptabler Rechenzeit machbar ist. Hab mir bis jetzt nur eine Lösung für 2*2-Untermatrizen überlegt und keine (vernünftige) Idee, wie sich das verallgemeinern lässt. Vielen Dank!
Grüße, Martin
In meinem speziellen Fall, beinhaltet die Matrix (beliebige Größe) nur die Werte 1 und 0 (eins bedeutet belegt und 0 frei), und es soll nach einer n*k-Untermatrix aus lauter Nullen gesucht werden. Der Algorithmus soll also z.B. erkennen, dass in folgender 5*3-Matrix nur noch ein 2*2-Feld frei ist.
1 1 1 1 1
1 1 1 0 0
1 1 1 0 0
Damit wäre mir fürs erste schon sehr geholfen. Toll wäre es dann noch, wenn auch jene Fälle berücksichtigt würden, bei denen die gesuchte Untermatrix in mehreren Teilen enthalten ist. Also z.B.:
1 1 1 1 1
1 1 1 0 0
1 0 0 1 1
wenn möglich aber auch
1 1 1 1 0
1 1 1 1 0
1 0 0 1 1
wichtig ist nur, dass immer mindestens zwei Felder nebeneinander frei sind.
Dann müsste man noch Fälle wie
1 1 0 0 1
1 1 1 0 0
1 1 1 1 1
1 0 1 1 1
1 0 0 1 1
1 1 0 1 1
herausnehmen, wo es zusätzlich eine vertikale/horizontale Überlappung gibt, usw.
(Ist ein Problem im Rahmen einer kleinen Spieleprogrammierung.)
Fürs erste wäre ich sehr dankbar, wenn jemand einen Ansatz für das grundlegende Problem hat, der in akzeptabler Rechenzeit machbar ist. Hab mir bis jetzt nur eine Lösung für 2*2-Untermatrizen überlegt und keine (vernünftige) Idee, wie sich das verallgemeinern lässt. Vielen Dank!
Grüße, Martin