Hogy érdemes megoldani ezt a feladatot?
Van egy játékunk, amiben 5 betűs szavakat lehet kirakni az angol ABC nagybetűiből. Megkapjuk a kiinduló szót, a nyerő szót és a tiltott szavak tömbjét. Egy lépésben megváltoztathatunk a kiinduló szóban egy betűt az ABC-ben azt megelőző vagy azt követő betűre (pl. A-ból lehet Z vagy B, B-ből lehet A vagy C stb.). Ha valamelyik lépésben olyan szót kapunk, ami szerepel a tiltott szavak listáján, akkor vesztettünk.
Az a kérdés, hogy mennyi a legkevesebb lépés, amivel nyerhetünk.
Pl:
"AAAAA" - kiinduló szó
"AACAA" - nyerő szó
["AABAA"] - tiltott szavak listája
A kézenfekvő megoldás ez lenne:
1. "AAAAA" -> "AABAA"
2. "AABAA" -> "AACAA"
2 lépés, de az "AABAA" tiltott szó miatt ez nem lehetséges.
A jó megoldás legkevesebb 4 lépés (több lehetséges megoldás is van):
1. "AAAAA" -> "ABAAA"
2. "ABAAA" -> "ABBAA"
3. "ABBAA" -> "ABCAA"
4. "ABCAA" -> "AACAA"
> Hogy érdemes megoldani ezt a feladatot?
Én így közelíteném meg:
Ha bele gondoltsz, ez egy sima gráfkeresés:
Az egyes szavak a gráf csúcsai.
Él akkor van a két csúcs közt, ha a szavak átalakíthatók egy lépésben egymásba, pl: AAAAA és AAAAB közt van él, viszont AAAAA és AAAAC közt nincs.
A tiltott szavak egyszerüen nem részei a gráfnak.
Meg kell találni a legrövidebb utat ebben a gráfban a kiinduló szó és a nyerö szó csúcsok közt.
Ez innen egy jól ismert probléma: [link]
Van még egy csavar a dologban: Ha nincsenek 'tiltott' szavak, akkor akkor két szó távolságát nagyon könnyen ki lehet számítani, csak összeadod a párban álló betük 'távolságát': AAA - BCD = |1-2| + |1-3| + |1-4| = 6
Ezt akár heurisztikának is használhatod a te problémádban: Sima gráfkeresö algoritmusok helyett használhatsz heurisztikus keresö algoritmusokat is.
Én a best-first search, vagy az A* algoritmusokat nézném meg a helyedben.
További 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!