ตรวจจับวัฏจักรในการจำลอง
ข้ามไปข้างหน้าเมื่อสถานะเกิดซ้ำ
ตรวจจับวัฏจักรในการจำลอง เป็นบทเรียน Coding Interview Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Coding Interview Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
เมื่อขั้นตอนเกิดซ้ำ
การจำลองบางข้อถามหาสถานะหลังจากทำขั้นตอนจำนวน มหาศาล เช่น หนึ่งล้านล้านครั้ง การทำทีละขั้นจะไม่มีวันเสร็จทันเวลา ⏳
สถานะมีจำนวนจำกัด
หากจำนวน สถานะ ที่เป็นไปได้มีจำกัด การจำลองจะต้องกลับมาเจอสถานะเดิมในที่สุด จากจุดนั้นสถานะจะวนซ้ำไปตลอด
ลักษณะของวัฏจักร
เส้นทางมี ช่วงหาง ที่นำเข้าสู่วัฏจักร แล้วมีวงวนที่เกิดซ้ำ การมองเห็นวงวนช่วยให้ข้ามขั้นตอนนับพันล้านขั้นไปได้อย่างรวดเร็ว
จำจุดที่เคยผ่าน
เก็บแต่ละสถานะไว้ใน พจนานุกรม โดยจับคู่กับหมายเลขขั้นตอนที่พบสถานะนั้นเป็นครั้งแรก การพบสถานะเดิมอีกครั้งจะเผยให้เห็นวัฏจักร
seen = {}ตรวจจับการเกิดซ้ำ
ก่อนแต่ละขั้น ให้ตรวจสอบว่าสถานะปัจจุบันอยู่ใน รายการที่พบแล้ว หรือไม่ หากอยู่ แสดงว่าคุณเพิ่งปิดวัฏจักรลง
if state in seen:
start = seen[state]วัดความยาววัฏจักร
ความยาว คือขั้นตอนปัจจุบันลบด้วยขั้นตอนที่คุณพบสถานะนี้เป็นครั้งแรก จำนวนขั้นตอนดังกล่าวจะพาสถานะกลับมายังจุดเดิมพอดี
length = step - seen[state]ข้ามไปข้างหน้าด้วยโมดูโล
ลบช่วงหางออก แล้วนำจำนวนขั้นตอนที่เหลือไป หารเอาเศษด้วยความยาววัฏจักร จากนั้นคุณจะจำลองเพียงส่วนที่เหลือขนาดเล็กเท่านั้น
rem = (N - start) % lengthทำขั้นตอนที่เหลือให้เสร็จ
จำลองต่ออีกเพียงขั้นตอน ที่เหลือจากจุดเริ่มต้นของวัฏจักร สถานะสุดท้ายจะตรงกับสถานะเมื่อถึงขั้นตอน N พอดี
for _ in range(rem):
state = step_fn(state)รักษาสถานะให้แฮชได้
คีย์ของพจนานุกรมต้อง แฮชได้ ดังนั้นให้เปลี่ยนรายการเป็นทูเพิลก่อนจัดเก็บ สถานะที่เปลี่ยนแปลงได้จะใช้เป็นคีย์ไม่ได้
key = tuple(row)Floyd โดยไม่ใช้หน่วยความจำ
หากสถานะใหญ่เกินกว่าจะจัดเก็บ อัลกอริทึมเต่าและกระต่ายของ Floyd จะค้นหาวัฏจักรโดยใช้ตัวชี้สองตัวและหน่วยความจำเพิ่มเติมเพียงเล็กน้อย
เหตุผลที่วิธีนี้ช่วยได้
การตรวจจับวัฏจักรเปลี่ยนวงวนที่มีขั้นตอนหนึ่งล้านล้านครั้งซึ่ง เป็นไปไม่ได้ ให้เหลือเพียงไม่กี่พันขั้น การมองเห็นการเกิดซ้ำคือเคล็ดลับทั้งหมด
ตรวจสอบอย่างรวดเร็ว
คุณพบสถานะปัจจุบันเป็นครั้งแรกที่ขั้นตอน s และตอนนี้อยู่ที่ขั้นตอน t
สรุป
เมื่อสถานะเกิดซ้ำ ให้บันทึกแต่ละสถานะใน ตารางจับคู่ หาความยาววัฏจักร ข้ามไปข้างหน้าด้วยการหารเอาเศษ และจำลองเฉพาะขั้นตอนที่เหลือ 🚀
คำถามที่พบบ่อย
บทเรียน “ตรวจจับวัฏจักรในการจำลอง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ตรวจจับวัฏจักรในการจำลอง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Coding Interview Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ตรวจจับวัฏจักรในการจำลอง”
ข้ามไปข้างหน้าเมื่อสถานะเกิดซ้ำ คุณปฏิบัติ Coding Interview Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Coding Interview Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Coding Interview Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “ตรวจจับวัฏจักรในการจำลอง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Coding Interview Prep นี้ได้ไหม
ได้ บทเรียน Coding Interview Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- จำลองสถานะและก้าวไปข้างหน้า
- การเดินบนกริดและเวกเตอร์ทิศทาง
- ตรวจจับวัฏจักรในการจำลอง
- รับมือกรณีขอบที่ซับซ้อน