Siklus kisi acak yang menghindari diri sendiri dalam kotak pembatas yang diberikan

25

Sehubungan dengan Slither link puzzle, saya sudah bertanya-tanya: Misalkan bahwa saya memiliki grid sel persegi, dan saya ingin mencari siklus sederhana dari tepi kotak, seragam secara acak di antara semua siklus sederhana mungkin.n×n

Salah satu cara untuk melakukan ini adalah dengan menggunakan rantai Markov yang statusnya adalah himpunan kotak yang batasnya adalah siklus sederhana dan yang transisinya terdiri dari memilih kuadrat acak untuk membalik dan menjaga flip ketika set kuadrat yang dimodifikasi masih memiliki siklus sederhana seperti batasnya. Kita dapat beralih dari siklus sederhana ke siklus lainnya dengan cara ini (menggunakan hasil standar tentang keberadaan penembakan) sehingga ini akhirnya menyatu ke distribusi yang seragam, tetapi seberapa cepat?

Atau, apakah ada rantai Markov yang lebih baik, atau metode langsung untuk memilih siklus sederhana?

ETA: Lihat posting blog ini untuk kode untuk menghitung jumlah siklus yang saya cari, dan arahkan ke OEIS untuk beberapa angka-angka ini. Seperti yang kita ketahui, penghitungan hampir sama dengan generasi acak, dan saya simpulkan dari kurangnya pola yang jelas dalam faktorisasi angka-angka ini dan kurangnya formula dalam entri OEIS bahwa tidak mungkin ada metode langsung sederhana yang diketahui. . Tapi itu masih menyisakan pertanyaan seberapa cepat rantai ini bertemu dan apakah ada rantai yang lebih baik terbuka lebar.

David Eppstein
sumber
1
Batas himpunan yang dihitung oleh urutan OEIS tidak harus siklus sederhana, misalnya untuk 3x3, salah satu dari 218 memiliki semua kotak kecuali tengah, dan empat lainnya diberikan dengan lebih jauh menghilangkan satu sudut.
Colin McQuillan
1
Untuk kisi 2xn, angkanya seperti yang diberikan di oeis.org/A059020 . Untuk 3xn saya cukup yakin mereka adalah 6.40.213.1049.5034.23984.111169.542.295.2577870,12253948,58249011,276885683,1316170990,6256394122,29739651711,141366874247, ... (tidak di OEIS). Saya mengatur matriks transfer untuk menghitungnya dengan tangan tetapi saya membandingkannya dengan matriks yang dihasilkan mesin dan satu-satunya entri mereka berbeda tangan yang benar dan mesin yang salah. (Ini seharusnya muncul dalam kasing 3x3 - matriks mesin akan memungkinkan sebuah octomino berlubang di tengahnya.)
David Eppstein
1
Anda harus mengirim urutan itu ke Neil Sloane sehingga dia bisa memasukkannya ke dalam OEIS.
Peter Shor
1
@ David: Terima kasih. Mungkin, ini saatnya bagi saya untuk mempelajari metode transfer matrix secara lebih menyeluruh.
Yoshio Okamoto
2
@ David: Anda hanya menghabiskan dua jam dalam hidup saya dengan tautan ke teka-teki itu .. Terima kasih!
domotorp

Jawaban:

1

Tampaknya karena Anda hanya menggunakan penghitungan jumlah siklus dalam grafik untuk memilih siklus secara acak, bahwa jika Anda memiliki perkiraan acak untuk angka ini, maka Anda masih dapat memilih siklus yang kurang lebih sama.

G(u,v)G(u,v)uvG(u,v)uvG

Gn×n(u,v)uvG(u,v)

CvsveNveCuNuvsG[V(C{vs,ve})]uve(ve,u)

Dengan cara ini, sejumlah tepi polinom dipilih, masing-masing membutuhkan sejumlah kecil perhitungan algoritma perkiraan waktu polinomial. Dengan demikian, suatu siklus dapat dipilih secara seragam.

Saat ini saya memiliki pertanyaan stackexchange yang meminta referensi untuk algoritma perkiraan jumlah jalur cepat. Saya telah membaca di beberapa tempat bahwa algoritma ini ada tetapi belum menemukannya.

bbejot
sumber