Diskuze: Pole
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 9 zpráv z 59.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Chtělo by to napsat nějaký základ a interface, aby účastníci jen
dodali DLL s AI mohly se pustit dvě AI proti sobě, piškvorkový turnaj
Z 0 vedou například 2 sekvence:
0 -> 1 -> 2 -> 3
0 -> 4 -> 8 -> C
Z 9 vedou 4 sekvence.
"Z 0 vedou například 2 sekvence:
0 -> 1 -> 2 -> 3
0 -> 4 -> 8 -> C
Z 9 vedou 4 sekvence."
Uh.
To klidně můžou, ale to ten záplavový algoritmus přece vůbec nezajímá,
on prohledává okolí ve "vlnách", viz animace (nutno kliknout, aby se to
animovalo).
Pod sekvenčním přístupem si představuju třeba foreach na prvcích pole, ale ne to, že při přímém přístupu do pole jde náhodou pár indexů za sebou.
Pokud s polem pracuješ cyklem foreach, tak s ním pracuješ jako se seznamem.
Ty indexy však nemusí jít za sebou. Zaplavuješ všemi směry, proto z každého prvku vedou 4 cesty na sousední prvky. Je to vlastně neorientovaný graf, který však nemusí být omezen na 4 cesty, ale třeba u piškvorek může mít 8 cest z každého prvku.
Tohle jsou však algoritmy, které nejsou příliš výhodné v imperativních jazycích, ale např. v Lispu se používají velmi často.
Hezkým příkladem by mohlo být testování korektnosti sudoku. Můžeš to udělat jako matici 9×9 a udělat 3 algoritmy na test (vodorovně, svisle, skupina). Když to však uděláš jako 81 objektů, které umístíš do 27 seznamů po 9 objektech, stačí ti jen jeden testovací algoritmus na všechno.
"Pokud s polem pracuješ cyklem foreach, tak s ním pracuješ jako se
seznamem."
Někdy také, ale byl to jen příklad toho, co si představuju pod pojmem
sekvenční přístup.
"Ty indexy však nemusí jít za sebou. Zaplavuješ všemi směry, proto z
každého prvku vedou 4 cesty na sousední prvky. Je to vlastně neorientovaný
graf, který však nemusí být omezen na 4 cesty, ale třeba u piškvorek
může mít 8 cest z každého prvku."
Jestli prohledáváš osmiokolí nebo čtyřokolí je v tomhle případě
úplně jedno.
To už přece není sekvenční přístup, když ty indexy nejsou za sebou, ale
skáčeš při prohledávání v podstatě na náhodné indexy do té
mapy...
"Tohle jsou však algoritmy, které nejsou příliš výhodné v
imperativních jazycích, ale např. v Lispu se používají velmi často."
Nevím, proč by neměl tenhle algoritmus být výhodný v imperativním jazyce.
Lisp neznám, nevidím moc důvod tyhle obskurní jazyky používat .
Pokud se ti seznamy jeví výhodné v imperativním jazyce, tak proč je tak kritizuješ?
I když ty indexy při záplavě nejdou za sebou, v seznamech se stále jedná o sekvenční přístup.
U toho sudoku souhlasím, že by to tvé řešení bylo docela hezké.
Já nekritizuju seznamy, jen mi to přišlo, že bys je nejraději cpal všude, i tam, kde se více hodí pole, třeba na tu reprezentaci mapy pro záplavové hledání.
Ani když tu mapu máš místo pole uloženou jako seznam, tak tam nezapisuješ/nečteš sekvenčně při záplavovém prohledávání, vždyť je to nesmysl, ještě jednou:
Mám mapu
0 1 2 3
4 5 6 7
8 9 A B
C D E F
uloženou jako list (0 1 2 3 4 5 6 7 8 9 A B C D E F)
a hledám tu cestu třeba z 0 do A, tak saháš postupně na indexy
1 4 2 5 8 3 6 9 C 7 A
Já tam pořád žádnou sekvenci nevidím a jako sekvenční přístup mi to
rozhodně nepřipadá
Zobrazeno 9 zpráv z 59.