Borneq
2020-08-22 21:15:47 UTC
Na Rosetta-code jest w c++ wersja wyszukująca rekurencyjnie
wiele(wszystkie?) rozwiązania dla N=12.
Jednak czas wzrasta bardzo szybko dla większych N.
Zrobilem inaczej:
hetmany muszą być w każdym wierszu w innej kolumnie, więc
robię wektor 0,1,2,3,4,5..199, tasuję go przez shuffle
zliczam ilośc kolizji, najpierw jest ponad setka
i losowo biorę wiersz A i wiersz B, zamieniam je gdy ilość kolizji maleje.
Bardzo szybko działa dla N=200
ALE...jest to niestabilne.
to znaczy: czasami działa, z co któ©yś raz, (chyba w więcej niż 20%
przypadków) wpada w lopkalne optimum, gdzie bardzo szybko osiąga 1
kolizję i nie chce odtąd się zmniejszyć do zera przy żadnym swapie.
Jak sobie z tym poradzić?
wiele(wszystkie?) rozwiązania dla N=12.
Jednak czas wzrasta bardzo szybko dla większych N.
Zrobilem inaczej:
hetmany muszą być w każdym wierszu w innej kolumnie, więc
robię wektor 0,1,2,3,4,5..199, tasuję go przez shuffle
zliczam ilośc kolizji, najpierw jest ponad setka
i losowo biorę wiersz A i wiersz B, zamieniam je gdy ilość kolizji maleje.
Bardzo szybko działa dla N=200
ALE...jest to niestabilne.
to znaczy: czasami działa, z co któ©yś raz, (chyba w więcej niż 20%
przypadków) wpada w lopkalne optimum, gdzie bardzo szybko osiąga 1
kolizję i nie chce odtąd się zmniejszyć do zera przy żadnym swapie.
Jak sobie z tym poradzić?