Mátrix keresése mátrixban C#?
Most ezt csak simán meg akarod oldani vagy valami hatákony algoritmust szeretnél?
Ha csak "simán" is jó, akkor men végig mátrix elemeken és nézd meg, hogy attól a mezőtől egyezik-e a kis mátrix... és térj vissza a adott indexekkel, ha igen.
Ha hatákony algortmus kell, akkor arra keress google-ben, hogy two/multidimensional pattern matching.
pl: [link]
Megkeresed a kis mátrix bal felső elemét a nagy mátrixban és elkezded ellenőrizni, hogy meddig stimmel. Ha nem stimmel, akkor skip, keresel egy másik "bal felső" elemet és ugyanez. Ha stimmel, akkor megvan az első találat, ha egyáltalán nem stimmel sehol, akkor nincs találat.
Kérdés, hogy mit értesz a legelső előfordulás alatt... Ha mondjuk többször is szerepel a nagyban a kicsi, akkor attól függően, hogy sorfolytonosan vagy oszlopfolytonosan állsz neki keresgélni (esetleg valami kombinált módon), akkor más-más lehet az első előfordulás.
#3: Ez rendben van, de pl. vegyük ezt:
Kis mátrix:
1 2
3 4
Nagy mátrix:
0 0 1 2 0 0
0 0 3 4 0 0
1 2 0 0 0 0
3 4 0 0 0 0
0 0 0 0 0 0
Ha oszlopfolytonosan keresem, akkor a 3. sorban lévőt találom meg először. Ha sorfolytonosan keresem, akkor a 3. oszlopban lévőt. :)
"sehogy se megy"
Tipp: Megkeresed a bal felső elemet a nagy mátrixban. Utána a jobbra és alatta lévő elemeket összeveted a kis mátrixal, hogy egyeznek-e. Ha igen, akkor megtaláltad.
Az előbbi válaszomban lévő példában ez így nézne ki:
Keresés elindul oszlopfolytonosan, megtalálja a 3. oszlopban a kis mátrix bal felső elemét (ez az "1"). Ez a [0][2] helyen van, feljegyzi egy változóba az indexet.
Innentől a következőket lépné még meg az algoritmusom (?= jelentése: egyenlő-e vizsgálat):
[0][3] ?= kismátrix[0][1]
[1][2] ?= kismátrix[1][0]
[1][3] ?= kismátrix[1][1]
Ha mindegyik egyezik, akkor megszakad a futása vagy amit akarsz és kiírja, hogy az első előfordulás a {eltárolt_index} helyen van a nagy mátrixban.
Ha valamelyik nem egyezik, akkor folytatódik a keresés, amint talál az algoritmus egy újabb potenciális "bal felső" elemet, átírja a változót, hogy ott van.
Amire figyelni kell, hogy ha egyáltalán nincs találat, akkor valahogy le kell kezelni, hogy az eltárolt változót ne írja ki... Pl. ha teljes egyezés van, akkor egy másik változó, pl. confirmed=true értéket kap és ha ez true, akkor kiírod, hogy találat van, ha false (ez legyen az alapérték), akkor meg kiírod, hogy nincs találat. Vagy bármi más, ez csak egy ötlet.
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!