สุ่มรอบ lattice ที่หลีกเลี่ยงตัวเองภายในกล่องขอบเขตที่กำหนด


25

ในการเชื่อมต่อกับSlither เชื่อมโยงปริศนาฉันได้รับการสงสัย: สมมติว่าผมมีตารางของตารางเซลล์และผมต้องการที่จะหาวงจรที่เรียบง่ายของขอบตารางสม่ำเสมอที่สุ่มในทุกรอบเป็นไปได้ง่ายn×n

วิธีหนึ่งในการทำเช่นนี้คือใช้ลูกโซ่มาร์คอฟซึ่งรัฐเป็นชุดสี่เหลี่ยมที่มีขอบเขตเป็นวัฏจักรที่ง่ายและช่วงการเปลี่ยนภาพประกอบด้วยการเลือกสี่เหลี่ยมจัตุรัสแบบสุ่มเพื่อพลิกและเก็บการพลิกเมื่อชุดสี่เหลี่ยมที่ดัดแปลงยังคงมีวัฏจักรง่ายๆ ขอบเขตของมัน ใครจะได้รับจากวงจรง่าย ๆ กับคนอื่น ๆ ในลักษณะนี้ (ใช้ผลมาตรฐานเกี่ยวกับการมีอยู่ของเปลือกหอย) ดังนั้นในที่สุดสิ่งนี้ก็แปรเปลี่ยนเป็นการแจกแจงแบบเดียวกัน แต่เร็วแค่ไหน?

อีกวิธีหนึ่งคือมีห่วงโซ่มาร์คอฟที่ดีกว่าหรือเป็นวิธีโดยตรงสำหรับการเลือกวงจรง่าย ๆ ?

การทางพิเศษแห่งประเทศไทย: ดูโพสต์บล็อกนี้สำหรับรหัสในการคำนวณจำนวนรอบที่ฉันกำลังมองหาและตัวชี้ไปที่ OEIS สำหรับตัวเลขเหล่านี้บางส่วน อย่างที่เรารู้การนับนั้นเกือบจะเหมือนกับการสร้างแบบสุ่มและฉันอนุมานจากการขาดรูปแบบที่ชัดเจนใด ๆ ในความเป็นจริงของตัวเลขเหล่านี้และการขาดสูตรในรายการ OEIS ที่ไม่น่าจะมีวิธีการแบบง่าย ๆ . แต่นั่นก็ยังคงทิ้งคำถามว่าเชนนี้มาบรรจบกันได้เร็วแค่ไหนและมีห่วงโซ่ที่เปิดกว้างกว่านี้หรือไม่


1
ขอบเขตของเซตที่นับตามลำดับ OEIS นั้นไม่จำเป็นต้องเป็นวัฏจักรที่ง่ายเช่น 3x3, 218 อันใดอันหนึ่งมีสี่เหลี่ยมจัตุรัสทั้งหมดยกเว้นตรงกลาง
โคลิน McQuillan

1
สำหรับ 2xn กริดตัวเลขที่เป็นไปตามที่กำหนดในoeis.org/A059020 สำหรับ 3xn ฉันค่อนข้างแน่ใจว่าพวกเขามี 6,40,213,1049,5034,23984,114069,542295,2577870,12253948,12243948,58249011,276885683,1316170990,6256394122,29739651711,141366874247, สำหรับ ... (ไม่ใช่ OE) ฉันตั้งค่าเมทริกซ์การถ่ายโอนเพื่อคำนวณด้วยมือ แต่ฉันเปรียบเทียบกับเมทริกซ์ที่สร้างด้วยเครื่องและรายการเดียวที่พวกเขาแตกต่างจากมือหนึ่งนั้นถูกต้องและเครื่องหนึ่งผิด (สิ่งนี้น่าจะปรากฏในกรณี 3x3 - เมทริกซ์ของเครื่องจักรจะอนุญาตให้ octomino ที่มีรูอยู่ตรงกลาง)
David Eppstein

1
คุณควรส่งลำดับนั้นไปที่ Neil Sloane เพื่อให้เขาสามารถวางไว้ใน OEIS
Peter Shor

1
@ David: ขอบคุณ อาจเป็นเวลาที่ฉันจะเรียนรู้วิธีการโอนเมทริกซ์อย่างละเอียดมากขึ้น
โยชิโอะโอกาโมโตะ

2
@David: คุณเพิ่งเสียเวลาสองชั่วโมงในชีวิตของฉันไปกับลิงค์นั้นปริศนา .. ขอบคุณ!
domotorp

คำตอบ:


1

ดูเหมือนว่าเนื่องจากคุณใช้การนับสำหรับจำนวนรอบในกราฟเพื่อเลือกรอบแบบสุ่มเท่านั้นหากคุณมีการประมาณแบบสุ่มสำหรับตัวเลขนี้คุณจึงยังคงสามารถเลือกรอบได้อย่างสม่ำเสมอ

โปรดทราบว่าจำนวนรอบในกราฟซึ่งมี edge ( u , v )เท่ากับจำนวนรอบในG - ( u , v )บวกจำนวนเส้นทางแบบง่ายจากuถึงvในG - ( u , v ) . ดังนั้นด้วยการประมาณเวลาพหุนามสำหรับจำนวนของเส้นทางu - vการประมาณเวลาพหุนามสามารถทำได้โดยการเพิ่มขึ้นทีละGเพื่อเพิ่มขึ้นทีละGโดยประมาณเมื่อคุณไป G(u,v)G(u,v)uvG(u,v)uvG

จริง ๆ แล้วฉันคิดว่ามีวิธีที่ตรงไปตรงมามากขึ้นสำหรับการเลือกรอบ ให้เป็นกราฟทั้งหมดของขอบรอบn × nตารางสี่เหลี่ยม สำหรับแต่ละขอบ( U , V )พบว่าจำนวนรอบที่มีที่ขอบ (ซึ่งเป็นหมายเลขของยู - วีเส้นทางในG - ( U , V ) ) จากนั้นสุ่มเลือกขอบถ่วงน้ำหนักตามจำนวนรอบที่มี นี่จะเป็นขอบแรกในรอบการสุ่มที่คุณเลือก ขอบอื่น ๆ ทั้งหมดจะถูกเลือกโดยการขยายขอบหนึ่งครั้งGn×n(u,v)uvG(u,v)

สมมติว่าคุณได้เลือกเส้นทางที่เป็นส่วนหนึ่งของวงจรการสุ่มของคุณ ให้ชุดของจุดบนเส้นทางนี้จะเป็นและปล่อยให้วีsและวีอีจะ endvertices ของเส้นทาง ปล่อยให้Nเป็นชุดของเพื่อนบ้านของv eซึ่งไม่ได้อยู่ในC (โปรดทราบว่ามีเพียง 3 ในกราฟนี้โดยเฉพาะ) สำหรับแต่ละยูNนับจำนวนของยู - วีsเส้นทางในกราฟเหนี่ยวนำให้เกิดG [ V - ( C - { V s , วีอีCvsveNveCuNuvs ] แล้วเลือกเพื่อนบ้านยูของวีอีถ่วงน้ำหนักในเส้นทางนับเพียง เพิ่ม edge ( v e , u )ลงในพา ธ ที่คุณเลือกโดยขยายออกไปทีละอันG[V(C{vs,ve})]uve(ve,u)

ด้วยวิธีนี้มีการเลือกจำนวนขอบพหุนามแต่ละอันต้องใช้การคำนวณจำนวนเล็กน้อยของอัลกอริทึมการประมาณเวลาพหุนาม ดังนั้นรอบสามารถเลือกอย่างสม่ำเสมอ

ขณะนี้ฉันมีคำถาม stackexchange ที่ขออ้างอิงสำหรับอัลกอริทึมการนับจำนวนอย่างรวดเร็ว ฉันได้อ่านในไม่กี่ที่ที่อัลกอริทึมเหล่านี้มีอยู่ แต่ยังไม่พบพวกเขา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.