Java - 2 db 2D mátrix között hogyan számolják össze az egyező részleteket?
Van 2 db 2D nátrixom:
a[][] <-- 8x8 méretű nagyobbik
b[][] <-- 3x3 méretű kisebbik
A b[][] így néz ki:
_X_
XXX
_X_
Az a[][]-ban ez a minta többször is előfordul, és a feladat az egyezések megszámolása.
Ehhez kérem a segítségeteket.
Viszonylag egyszerű.
Szóban hogyan keresel egy betűt? Végiglépegetsz a betűin, ha egyezés van, meg is vagy.
Szóban hogyan keresel egy részt? Ugyanúgy ahogy betűt, csak a teljes rész egyezőségét ellenőrzöd.
Kétdimenziós tömbnél ugyanez a megoldás. Végig kell lépegetned rajta. [0][0]-tól indulsz, [5][5] lesz a vége, és minden lépésben ellenőrzöd, hogy a kiindulóponttól jobbra/lefelé lévő 3x3-as mező egyezik-e a b tömbbel.
Pl:
A tömb:
1 2 3
4 5 6
B tömb:
5 6
1-től indulva: 1 != 5, tehát itt nem lesz jó
2-től indulva: 2 != 5, tehát nem jó
(3 kimarad)
4-től indulva: 4 != 5, tehát nem jó
5-től indulva: 5 == 5, OK, következő: 6 == 6, OK
Tehát benne van.
boolean[][] img; // nagyobbik
boolean[][] e; // kisebbik
// ...
int w = e[0].length, h = e[1].length, n = 0, x = 0, y = 0;
for (int i = 0; i < img[0].length; i++) {
for (int j = 0; j < img[1].length; j++) {
for (int k = 0; k < w; k++) {
for (int l = 0; l < h; l++) {
if (img[i][j] == e[k][l]) {
}
}
}
}
Idáig jutottam, ez csak egy része a dolognak, csak itt már nagyon belezavarodtam.
Meg lehet csinálni úgy is, ahogy azt elkezdted.
A nagy mátrixban meghatározol egy pontot, ez a bal felső sarok, ez lesz a kiindulópont. Innen végzel iterációt a kis mátrix méreteinek megfelelően. Az összehasonlító mátrix méretei megfelelnek a kis mátrixénak, és az összehasonlítás eredményét tárolja.
Még vigyázni kell az indexhatárokkal, különben az első sor végén elszáll a program, IndexOutOfBoundsExceptionnel.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!