2017-08-13 2 views
-7

gegeben zwei Binärmatrizen m1 und m2, m2 ist garantiert, eine größere oder gleiche Größe (in beiden Dimensionen) im Vergleich zu m1 zu haben. Schreibe eine Funktion in C++, um das Aussehen von m1 in m2 zu zählen. z.B.zählen das Auftreten einer kleinen binären Matrix in einer großen binären Matrix

m1 = [1 1; 1 1], m2 = [1 1 0 0; 1 1 0 0; 0 0 1 1 0 0 1 1]

dann m1 in m2 2 Mal erschien, sollte die Funktion zurückgeben integer 2.

Kann jemand eine wenig Manipulation basierte Methode, um dieses Problem effizient zu lösen?

+3

SO ist kein Code-Schreibdienst. –

+0

Immer noch auf das Problem warten Sie konfrontiert sind. –

+1

Jeder Versuch von Ihnen gemacht? –

Antwort

0

Wenn Sie Ihre binären Muster mit Lauflängencodierung darstellen, wird das Problem zu einer gewöhnlichen Zeichenkette, die einer entspricht, auf einer komprimierten Darstellung, und es ist kein bisschen fiedeln erforderlich.

Dann können Sie zu einem Standardalgorithmus wie Boyer-Moore greifen, und wenn eine Abweichung gefunden wird, können Sie die längste Verschiebung zwischen denen in allen Zeilen gefunden.

+0

Intuitiv dachte ich über Bittricks nach, weil die 2 Matrizen binäre Matrizen sind. Aber ich stelle dann fest, dass die einfache Umwandlung der Zeilen der Matrix in eine vorzeichenlose Long Long Integer Größenbeschränkung hat. Danke für die Idee des String-Matchings! –

Verwandte Themen