ฉันเพิ่งอ่านทฤษฎีกราฟโดยเฉพาะhypercubesและคิดเกี่ยวกับวิธีที่น่าสนใจในการสร้างเส้นทางบนพวกเขา นี่คือสิ่งที่ฉันมาด้วย
ดังที่คุณอาจทราบแล้วว่าคุณสามารถสร้างไฮเปอร์คิวบ์ n- มิติได้โดยนำ n-tuples ทั้งหมดที่ประกอบไปด้วย1และ0เป็นจุดยอดและเชื่อมต่อมันถ้ามันต่างกันในหลักเดียว หากคุณตีความเลขฐานสองเหล่านี้เป็นตัวเลขจำนวนเต็มคุณจะได้กราฟที่มีจุดยอดที่เป็นตัวเลข ตัวอย่างเช่นn=3:
สมมติว่าคุณต้องการที่จะใช้เวลาเดินบน hypercube 0นี้และเริ่มต้นที่จุดสุดยอด ตอนนี้คุณจะกำหนดจุดสุดยอดที่คุณต้องการเยี่ยมชมต่อไปได้อย่างไร กฎที่ฉันใช้คือนำจำนวนaจุดยอดที่คุณอยู่พลิกmod(a,n)บิตของมัน(การทำดัชนีแบบ zero-based) แล้วไปที่จุดสุดยอดที่เกิดขึ้น อย่างเป็นทางการกฎนี้สามารถกำหนดซ้ำเป็น
a[m+1] = xor(a[m], 2^mod(a[m],n)).
โดยทำตามกฎนี้คุณจะยังคงอยู่บนลูกบาศก์และเดินทางไปตามขอบ เส้นทางที่ได้จะมีลักษณะเช่นนี้
อย่างที่คุณเห็นคุณจะเดินเป็นวงกลม! อันที่จริงในทุกมิติและสำหรับทุกจุดเริ่มต้นเส้นทางของคุณจะจบลงด้วยการวนซ้ำ ตัวอย่างเช่นn=14และa[0]=0ดูเหมือนว่านี้
สำหรับนักวางแผนตัวยงความยาวของเส้นทางที่วางแผนไว้เป็นข้อมูลสำคัญ ดังนั้นงานของคุณคือการเขียนฟังก์ชั่นหรือโปรแกรมที่ใช้มิติ hypercube nจุดยอดเริ่มต้นa[0]เป็นอินพุตและเอาต์พุตจำนวนจุดยอดในลูปผลลัพธ์
กรณีทดสอบ
n a[0] Output
-----------------
3 0 6
14 0 50
5 6 8
17 3 346
กฎระเบียบ
- ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
- เอาต์พุต / อินพุตอาจอยู่ในรูปแบบที่เหมาะสม
- คุณอาจถือว่า
a[0]เป็นจุดสุดยอดที่ถูกต้อง
เกณฑ์การให้คะแนน
รหัสที่สั้นที่สุดเป็นไบต์ชนะ
หากคุณมีข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้ฉันยินดีที่จะได้ยิน!
a[m]อยู่ใน hypercube a[m+1]ก็จะเป็นเช่นกัน และในขณะที่คุณสามารถถือว่าa[0]เป็นจุดสุดยอดที่ถูกต้องคุณแทบไม่จำเป็นต้องใส่ใจกับสิ่งใด ๆ ของ hypercube และเพียงแค่ทำตามกฎ



a[m+1] = xor(a[m], 2^mod(a[m],n))แล้วมันไม่เกี่ยวข้องถ้าจุดยอดเป็นของ hypercube ใช่ไหม?