Dobrý deň,
chcem pouzivat prehladavanie do sirky v jave, kde mam dvojrozmerne pole a z neho sa moze ist do roznych scenarov cize rozne ine dvojrozmerne polia s inou podobou. Potrebujem kontrolovat, ci uz sa dane pole nevyskytlo vo vyhladavani (aby mi viac krat neprehladavalo ten isty pripad) a vyhladavanie je uspesne pri nejakej podmienke. Zatial nemam skusenosti s breath search first . Bolo mi poradene aby som to robil cez nejake hashovacie tabulky. Potreboval by som nejaky logicky postup ako by som to mal naprogramovat a popripade nejake odkazy odkial sa da dobre pochopit vyhladavanie popripade dalsie veci potrebne k programovaniu tohto problemu.
java vyhladavanie
Re: java vyhladavanie
V prvom rade prestaň o probléme rozmýšľať v súvislosti s 2D polom a začni rozmýšľať v grafoch. No a potom trebárs http://www.algoritmy.net/article/1399/P ... i-do-sirky
Aj keď si nie som istý, či je na tvoj problém vôbec BFS vhodný. Mohol by si ho popísať viac, aký máš vstup a čo sa snažíš dosiahnuť?
Aj keď si nie som istý, či je na tvoj problém vôbec BFS vhodný. Mohol by si ho popísať viac, aký máš vstup a čo sa snažíš dosiahnuť?
-
programatorik
Novice
- Príspevky: 7
- Registrovaný: 24 mar 2014, 10:27
Re: java vyhladavanie
- 220008
300508
311508
300500
400077
406660
konecny stav:
- 322000
300000
300011
400508
477508
666508
Re: java vyhladavanie
No to sa teda potrápiš
V prvom rade si musíš zadefinovať graf - hlavne teda určiť, čo reprezentujú hrany. V tomto prípade to asi bude pohyb konkrétnej skupiny čísel, ale to si musíš urobiť sám podľa presného zadania. Dúfam, že poznáš teóriu grafov. Potom viz link na BFS, je tam aj implementácia.
No a teraz už aj k pôvodnej otázke: Ak chceš skontrolovať, či už sa ti tento prípad niekedy objavil, tak to bude asi najjednoduchšie nejakou hashovacou funkciou. Ide ti totiž o to, aby si celý jeden stav reprezentoval v jednoduchšom tvare (aby si nemusel porovnávať vždy celé dva 2D polia) a uchovával si množinu už navštívených stavov. Ak sa vykašleš na efektivitu, tak ti toto v podstate ani netreba, stačí ti urobiť vhodnú triedu na reprezentáciu jedného stavu (2D pola) a udržovať si množinu už dosiahnutých stavov.
Jednoduchá hashovacia funkcia by mohla to 2D pole jednoducho prehodiť do stringu po riadkoch. Tým vznikne vždy unikátny string s 36 znakmi a so stringami už sa dá pekne pracovať.
No a teraz už aj k pôvodnej otázke: Ak chceš skontrolovať, či už sa ti tento prípad niekedy objavil, tak to bude asi najjednoduchšie nejakou hashovacou funkciou. Ide ti totiž o to, aby si celý jeden stav reprezentoval v jednoduchšom tvare (aby si nemusel porovnávať vždy celé dva 2D polia) a uchovával si množinu už navštívených stavov. Ak sa vykašleš na efektivitu, tak ti toto v podstate ani netreba, stačí ti urobiť vhodnú triedu na reprezentáciu jedného stavu (2D pola) a udržovať si množinu už dosiahnutých stavov.
Jednoduchá hashovacia funkcia by mohla to 2D pole jednoducho prehodiť do stringu po riadkoch. Tým vznikne vždy unikátny string s 36 znakmi a so stringami už sa dá pekne pracovať.