ขั้นตอนวิธีของชไตน์เฮาส์ จอห์นสันและทร็อทเทอร์

จากวิกิพีเดีย สารานุกรมเสรี

ขั้นตอนวิธีของชไตน์เฮาส์ จอห์นสันและทร็อทเทอร์ (อังกฤษ: Steinhaus–Johnson–Trotter algorithm) คือ ขั้นตอนวิธีสร้างวิธีการเรียงสับเปลี่ยนโดยอาศัยการสลับที่ของตัวเลข

นิยาม[แก้]

ทิศทาง[แก้]

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

<1 <2 <3 เครื่องหมายน้อยกว่า (<) หน้าตัวเลขแต่ละตัวเป็นการบอกทิศทางของเลขนั้นๆว่าเป็นทิศทางซ้าย ในทางกลับกันเครื่องหมายมากกว่า (>) ที่ตามหลังตัวเลขหมายถึงทิศทางขวา
3> <1 <2 จากตัวอย่างข้างต้นแสดงให้เห็นว่าเลข 3 มีทิศทางขวา

ตัวเลขที่เปลี่ยนที่ได้[แก้]

ขั้นตอนวิธีนี้จะเรียกตัวเลขซึ่งมีตัวเลขที่อยู่ติดกันในทิศทางที่ระบุไว้มีค่าน้อยกว่าว่า ตัวเลขที่เปลี่ยนที่ได้ ยกตัวอย่างเช่น 3> <1 <2 ในกรณีนี้จะเรียกเลข 2 และเลข 3 ว่าตัวเลขที่เปลี่ยนที่ได้

ถ้าตัวเลขอยู่ทางขวาสุด และมีทิศทางขวา หรือตัวเลขอยู่ทางซ้ายสุดและมีทิศทางซ้าย จะเรียกเลขนั้นว่าตัวเลขที่เปลี่ยนที่ไม่ได้

ขั้นตอนวิธี[แก้]

  1. ขั้นตอนวิธีนี้จะทำงานโดยอาศัยตัวเลขที่มีการเรียงลำดับจากน้อยไปมากและมีการกำหนดทิศทางของตัวเลขแต่ละตัวเป็นทิศทางซ้าย
  2. หาตัวเลขที่เปลี่ยนที่ได้ที่มีค่ามากที่สุดแล้วสลับกับตัวเลขที่อยู่ติดกันในทิศทางนั้นๆ ห้ามเปลี่ยนทิศทางของตัวเลขที่สลับกัน
  3. ถ้าตัวเลขที่มีค่ามากที่สุดเปลี่ยนที่ไปจนไม่สามารถเปลี่ยนที่ได้แล้ว ให้หาตัวเลขที่เปลี่ยนที่ได้ที่มีค่ารองลงมาแล้วทำการสลับที่เช่นเดียวกัน
  4. ในแต่ละรอบที่ทำการสลับที่นั้นให้ตรวจสอบว่ามีตัวเลขที่มีค่ามากกว่าตัวเลขที่สลับที่อยู่หรือไม่ ถ้ามีให้เปลี่ยนทิศทางของตัวเลขที่มีค่ามากกว่า ไม่ว่าจะมีกี่ตัวก็ตาม
  5. ขั้นตอนวิธีนี้จะสิ้นสุดลงก็ต่อเมื่อไม่มีตัวเลขที่เปลี่ยนที่ได้แล้ว

แสดงตามขั้นตอนวิธี[แก้]

มีเลขจำนวน 3 ตัว จะทำให้มีวิธีเรียงสับเปลี่ยน 6 วิธี
  1. <1 <2 <3
  2. <1 <3 <2
  3. <3 <1 <2 เลข 3 ไม่สามารถเปลี่ยนที่ได้แล้ว เนื่องจากอยู่ทางซ้ายสุดและมีทิศทางซ้าย จึงเปลี่ยนมาทำการสลับที่เลข 2 แทน
  4. 3> <2 <1 เลข 3 เปลี่ยนทิศทาง เนื่องจากเมื่อ <2 สลับกับ <1 ขั้นตอนวิธีจะมีการตรวจสอบว่ามีตัวเลขที่มีค่ามากกว่าเลข 2 หรือไม่ ซึ่งก็มีคือเลข 3 จึงเปลี่ยนทิศทางของเลข 3 จากทิศทางซ้ายไปเป็นทิศทางขวา เลข 3 กลับมาเป็นเลขที่มีค่ามากที่สุดที่เปลี่ยนที่ได้
  5. <2 3> <1
  6. <2 <1 3>
ขั้นตอนวิธีนี้สิ้นสุดลงเนื่องจากไม่มีตัวเลขที่สามารถเปลี่ยนที่ได้อีกแล้ว
<2 เปลี่ยนที่ไม่ได้ เนื่องจากอยู่ทางซ้ายสุดและมีทิศทางซ้าย
<1 เปลี่ยนที่ไม่ได้ เนื่องจากเลขที่อยู่ทางซ้ายมือของ 1 มีค่าไม่น้อยกว่า 1
3> เปลี่ยนที่ไม่ได้ เนื่องจากอยู่ทางขวาสุดและมีทิศทางขวา

ตัวอย่าง เมื่อมีตัวเลขจำนวน 4 ตัว[แก้]

มีเลขจำนวน 4 ตัว จะทำให้มีวิธีเรียงสับเปลี่ยน 24 วิธี
  1. <1 <2 <3 <4
  2. <1 <2 <4 <3
  3. <1 <4 <2 <3
  4. <4 <1 <2 <3
  5. 4> <1 <3 <2
  6. <1 4> <3 <2
  7. <1 <3 4> <2
  8. <1 <3 <2 4>
  9. <3 <1 <2 <4
  10. <3 <1 <4 <2
  11. <3 <4 <1 <2
  12. <4 <3 <1 <2
  13. 4> 3> <2 <1
  14. 3> 4> <2 <1
  15. 3> <2 4> <1
  16. 3> <2 <1 4>
  17. <2 3> <1 <4
  18. <2 3> <4 <1
  19. <2 <4 3> <1
  20. <4 <2 3> <1
  21. 4> <2 <1 3>
  22. <2 4> <1 3>
  23. <2 <1 4> 3>
  24. <2 <1 3> 4>

ประสิทธิภาพการทำงาน[แก้]

ขั้นตอนวิธีนี้มีเวลาในการทำงานเป็น Θ(n!)[1] เมื่อ n คือจำนวนตัวเลขที่ต้องการหาวิธีการเรียงสับเปลี่ยน เนื่องจากจำนวนวิธีการเรียงสับเปลี่ยนคือ เพราะฉะนั้นการใช้ขั้นตอนวิธีในการแจกแจงวิธีการเรียงสับเปลี่ยนจึงต้องใช้ ด้วย

ตัวอย่างการประยุกต์ใช้งาน[แก้]

ในปริศนาควีนแปดตัว[2]สามารถนำขั้นตอนวิธีนี้ไปใช้ในการเลือกตำแหน่งการวางควีน เนื่องจากควีนไม่สามารถอยู่ในแถวหรือหลักเดียวกันได้มากกว่าหนึ่งตัว จึงไม่ทำให้เกิดเลขซ้ำกัน การใช้วิธีการเรียงสับเปลี่ยนจึงเป็นทางเลือกหนึ่งสำหรับการแก้ปัญหาประเภทนี้

อ้างอิง[แก้]

  1. "การวิเคราะห์ Algorithm". คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2011-09-25. สืบค้นเมื่อ 2011-09-29.
  2. N-Queens

แหล่งข้อมูลอื่น[แก้]