W związku z układanką Slither Link zastanawiałem się: Załóżmy, że mam siatkę kwadratowych komórek i chcę znaleźć prosty cykl krawędzi siatki, równomiernie losowy wśród wszystkich możliwych prostych cykli.
Jednym ze sposobów na to byłoby użycie łańcucha Markowa, którego stanami są zbiory kwadratów, których granice są prostymi cyklami i których przejścia polegają na wybraniu losowego kwadratu do przerzucenia i zachowaniu przerzutu, gdy zmodyfikowany zestaw kwadratów nadal ma prosty cykl jako jego granica. W ten sposób można przejść z dowolnego prostego cyklu do dowolnego innego (korzystając ze standardowych wyników dotyczących istnienia ostrzałów), więc ostatecznie zbiega się to do jednolitego rozkładu, ale jak szybko?
Alternatywnie, czy istnieje lepszy łańcuch Markowa, czy też bezpośrednia metoda wyboru prostych cykli?
ETA: Zobacz ten post na blogu, aby znaleźć kod do obliczenia liczby cykli, których szukam, i wskazuje na OEIS dla niektórych z tych liczb. Jak wiemy, liczenie jest prawie tym samym, co generowanie losowe, i wnioskuję z braku jakiegokolwiek oczywistego wzorca faktoryzacji tych liczb i braku wzoru we wpisie OEIS, że mało prawdopodobne jest, aby znana była prosta metoda bezpośrednia . Ale to wciąż pozostawia pytania o to, jak szybko ten łańcuch zbiega się i czy istnieje lepszy łańcuch szeroko otwarty.
źródło
Odpowiedzi:
Wygląda na to, że ponieważ używasz zliczeń tylko do liczby cykli na wykresie, aby losowo wybrać cykl, że jeśli masz losowe przybliżenie tej liczby, możesz nadal wybrać cykl w przybliżeniu równomiernie.
W ten sposób wybiera się wielomianową liczbę krawędzi, z których każda wymaga niewielkiej liczby obliczeń algorytmu wielomianowego aproksymacji czasu. W ten sposób cykl może być jednolicie wybrany.
Obecnie mam pytanie wymiany stosu z prośbą o referencje do algorytmów aproksymacyjnych zliczania szybkich ścieżek. Przeczytałem w kilku miejscach, że te algorytmy istnieją, ale jeszcze ich nie znalazłem.
źródło