เครื่องมือสุ่มรายการ - เครื่องมือสุ่มรายการออนไลน์ฟรี
เครื่องมือสุ่มรายการฟรีโดยใช้อัลกอริทึมฟิชเชอร์-เยตส์ที่เชื่อถือได้ สุ่มรายชื่อ นักเรียน ทีม หรืองานได้ทันที เหมาะสำหรับครู การแข่งขัน และการตัดสินใจอย่างเป็นกลาง ไม่ต้องสมัครสมาชิก
เครื่องสับเปลี่ยนรายการสุ่ม
ป้อนรายการเพื่อสลับ หนึ่งรายการต่อบรรทัด บรรทัดว่างจะถูกลบโดยอัตโนมัติ
เอกสารประกอบการใช้งาน
เครื่องสับรายการแบบสุ่มคืออะไร?
เครื่องสับรายการแบบสุ่มเป็นเครื่องมือที่รับรายการสิ่งต่าง ๆ แล้วจัดเรียงใหม่ให้เป็นลำดับแบบสุ่ม พิมพ์ชื่อ งาน หรือสิ่งอื่น ๆ ลงไป โดยใส่รายการละหนึ่งบรรทัด จากนั้นเครื่องมือจะจัดเรียงใหม่เพื่อให้ลำดับที่เป็นไปได้ทุกลำดับมีโอกาสเกิดขึ้นเท่ากัน เครื่องมือนี้ใช้อัลกอริทึม Fisher–Yates ซึ่งเป็นอัลกอริทึมที่รู้จักกันดีสำหรับสร้างลำดับแบบสุ่มที่ไม่มีอคติ
วิธีใช้เครื่องสับรายการแบบสุ่ม
- พิมพ์หรือวางรายการลงในช่อง โดยใส่รายการละหนึ่งบรรทัด
- คลิก "Randomize List" รายการจะถูกจัดเรียงใหม่ทันที
- อ่านรายการที่สับแล้วใต้ปุ่ม ซึ่งมีหมายเลขกำกับตามลำดับใหม่
- คลิก "Randomize List" อีกครั้งเพื่อสับรายการใหม่อย่างเป็นอิสระ
- คลิก "Copy Result" เพื่อคัดลอกลำดับใหม่ หรือคลิก "Clear" เพื่อเริ่มต้นใหม่
ระบบจะลบบรรทัดว่างในข้อมูลนำเข้าโดยอัตโนมัติ ดังนั้นการขึ้นบรรทัดใหม่เกินมาจะไม่สร้างรายการว่างในผลลัพธ์
อัลกอริทึมการสับแบบ Fisher-Yates ทำงานอย่างไร?
การสับแบบ Fisher–Yates จะไล่ผ่านรายการหนึ่งครั้ง โดยเริ่มจากรายการสุดท้ายและย้อนเข้าหาด้านหน้า ในแต่ละขั้น ระบบจะสุ่มเลือกหนึ่งรายการจากส่วนของรายการที่ยังไม่ได้จัดวาง แล้วสลับรายการนั้นมาไว้ในตำแหน่งปัจจุบัน
สูตรการสับแบบ Fisher-Yates
สำหรับรายการที่มี n รายการ โดยหมายเลขตำแหน่งเริ่มจากตำแหน่ง 0 ถึงตำแหน่ง n − 1:
1for i from n − 1 down to 1:
2 choose a random whole number j, where 0 ≤ j ≤ i
3 swap the items at positions i and j
4ลูปทำงาน n − 1 ครั้ง ดังนั้นการสับจึงใช้เวลารวมประมาณ n ขั้น ซึ่งเรียกว่าเวลาเชิงเส้น เขียนเป็น O(n) เนื่องจากอัลกอริทึมพิจารณาแต่ละตำแหน่งเพียงครั้งเดียวและเลือกจากกลุ่มรายการที่ลดลงอย่างมีขอบเขตชัดเจน ลำดับที่เป็นไปได้ทั้งหมด n! (แฟกทอเรียลของ n: n × (n − 1) × ... × 1) จึงมีโอกาสเป็นผลลัพธ์เท่ากัน
ตัวอย่าง: การสับรายการที่มีสี่รายการ
เริ่มต้นด้วยรายการสี่รายการในตำแหน่ง 0 ถึง 3: Apple, Banana, Cherry, Date
- i = 3: ผลการสุ่มเลือกคือ j = 0 สลับตำแหน่ง 3 และ 0 → Date, Banana, Cherry, Apple
- i = 2: ผลการสุ่มเลือกคือ j = 2 การสลับตำแหน่งกับตัวมันเองไม่ทำให้เกิดการเปลี่ยนแปลง → Date, Banana, Cherry, Apple
- i = 1: ผลการสุ่มเลือกคือ j = 0 สลับตำแหน่ง 1 และ 0 → Banana, Date, Cherry, Apple
ลำดับสุดท้าย: Banana, Date, Cherry, Apple
รายการสี่รายการมีลำดับที่เป็นไปได้ 4! = 24 ลำดับ แต่ละลำดับ รวมถึงลำดับนี้ มีโอกาส 1 ใน 24 ที่จะเกิดขึ้นในการสับแต่ละครั้ง
ทำไมไม่สุ่มสลับคู่รายการไปเลย?
วิธีที่ดูง่ายกว่าอย่างการสุ่มเลือกตำแหน่งสองตำแหน่งแล้วสลับกันหลายครั้ง ดูเหมือนสุ่มแต่จริง ๆ แล้วไม่ใช่ โปรแกรมสับรายการยุคแรกบางโปรแกรมในช่วงทศวรรษ 1950 ใช้วิธีนี้ และให้น้ำหนักกับบางลำดับมากกว่าลำดับอื่นโดยไม่แสดงให้เห็นอย่างชัดเจน แม้การทำงานแต่ละครั้งจะดูไม่น่าสงสัยก็ตาม การสับแบบ Fisher–Yates หลีกเลี่ยงปัญหานี้ เพราะแต่ละรายการจะถูกย้ายเพียงครั้งเดียวไปยังตำแหน่งที่เลือกจากชุดตัวเลือกซึ่งลดลงอย่างแม่นยำ จึงทำให้ลำดับสุดท้ายทุกลำดับมีโอกาสเกิดขึ้นเท่ากัน
การสับแบบ Fisher-Yates มีที่มาอย่างไร?
นักสถิติ Ronald Fisher และ Frank Yates อธิบายวิธีนี้ไว้ใน 1938 ในหนังสือตารางสถิติ สำหรับใช้สับรายการด้วยมือขณะออกแบบการทดลอง ใน 1964 Richard Durstenfeld ปรับวิธีนี้สำหรับคอมพิวเตอร์ เพื่อให้จัดเรียงรายการใหม่ในตำแหน่งเดิมได้โดยไม่ต้องใช้รายการที่สองสำหรับติดตามรายการที่เหลือ Donald Knuth นำคอมพิวเตอร์รุ่นนี้ไปรวมไว้ในหนังสือ The Art of Computer Programming ของเขาใน 1969 จึงมีการเรียกวิธีนี้ในบางครั้งว่า Knuth shuffle เว็บเบราว์เซอร์ในปัจจุบันใช้อัลกอริทึมเดียวกัน
การใช้งานทั่วไปของเครื่องสับรายการ
- กำหนดลำดับที่นักเรียนจะนำเสนอหรือตอบคำถามในชั้นเรียน
- สุ่มจัดสายการแข่งขันหรือกำหนดลำดับผู้เล่นในเกม
- แบ่งกลุ่มออกเป็นทีมแบบสุ่ม
- เลือกร้านอาหาร ภาพยนตร์ หรืองานจากรายการตัวเลือกสั้น ๆ โดยไม่ให้น้ำหนักกับตัวเลือกใดเป็นพิเศษ
การสับแบบธรรมดาไม่ใช่วิธีที่เหมาะสมเสมอไป หากบางรายการต้องปรากฏบ่อยกว่ารายการอื่น การสุ่มเลือกแบบมีน้ำหนักจะเหมาะกว่า หากต้องรับประกันให้ทุกหมวดหมู่มีตัวแทน การสุ่มตัวอย่างแบบแบ่งชั้นจะทำงานได้ดีกว่าการสับแบบสุ่มเพียงครั้งเดียว
คำถามที่พบบ่อย
การสับเป็นการสุ่มอย่างแท้จริงหรือไม่?
การสับอาศัยตัวสร้างเลขสุ่มเทียม (PRNG) ของเว็บเบราว์เซอร์ ซึ่งเป็นสูตรที่สร้างลำดับตัวเลขซึ่งมีลักษณะคล้ายการสุ่มในทางปฏิบัติ วิธีนี้เพียงพอสำหรับจัดลำดับในชั้นเรียน จัดสายการแข่งขัน หรือเลือกภาพยนตร์ แต่ไม่ได้ออกแบบมาสำหรับการเข้ารหัส ระบบการพนัน หรือสิ่งใดก็ตามที่เงินหรือความปลอดภัยขึ้นอยู่กับความไม่สามารถคาดเดาได้ กรณีเหล่านั้นต้องใช้ตัวสร้างเลขสุ่มที่ผ่านการรับรอง
เครื่องมือนี้ส่งรายการของฉันไปยังเซิร์ฟเวอร์หรือไม่?
การสับทำงานทั้งหมดในเบราว์เซอร์โดยใช้ JavaScript จึงไม่จำเป็นต้องส่งคำขอผ่านเครือข่ายเพื่อจัดเรียงรายการใหม่ รายการปัจจุบันยังถูกเขียนไว้ในที่อยู่เว็บของหน้าเว็บด้วย ดังนั้นการโหลดซ้ำหรือบุ๊กมาร์กหน้าจะไม่ทำให้รายการสูญหาย หากมีการคัดลอก แชร์ หรือเปิดที่อยู่นั้นอีกครั้ง รายการจะติดไปด้วย รวมถึงส่งไปยังเซิร์ฟเวอร์ใดก็ตามที่โหลดหน้านั้นในภายหลัง หากเรื่องนี้มีความสำคัญ ควรหลีกเลี่ยงการใส่ข้อมูลที่ละเอียดอ่อนลงในรายการ
จะเกิดอะไรขึ้นกับรายการที่ซ้ำกัน?
รายการที่ซ้ำกันจะยังคงอยู่ หาก "Sam" ปรากฏสองครั้งในข้อมูลนำเข้า ก็จะยังปรากฏสองครั้งในผลลัพธ์ที่สับแล้ว โดยอาจอยู่คนละตำแหน่งกัน
ฉันสามารถสับรายการได้มากที่สุดกี่รายการ?
เครื่องมือไม่มีการกำหนดขีดจำกัดไว้ เนื่องจากการสับใช้เวลาเชิงเส้น แม้แต่รายการยาว ๆ ก็สามารถจัดเรียงใหม่ได้ภายในเสี้ยววินาทีบนอุปกรณ์สมัยใหม่ทุกชนิด
การสับแตกต่างจากการเรียงลำดับอย่างไร?
การเรียงลำดับจะจัดรายการตามกฎตายตัว เช่น ลำดับตัวอักษร และให้ผลลัพธ์เดิมเสมอเมื่อใช้ข้อมูลนำเข้าเดียวกัน ส่วนการสับจะจัดรายการแบบสุ่มและให้ลำดับที่แตกต่างกันเกือบทุกครั้ง แม้ข้อมูลนำเข้าจะเหมือนเดิม
ฉันสามารถสับรายการเดิมมากกว่าหนึ่งครั้งได้หรือไม่?
ได้ การคลิก "Randomize List" แต่ละครั้งจะเรียกใช้อัลกอริทึมอีกครั้งโดยเป็นอิสระจากการสับครั้งก่อน ๆ สำหรับรายการขนาดเล็ก อาจเกิดลำดับซ้ำกันได้โดยบังเอิญ แต่สำหรับรายการขนาดใหญ่ โอกาสดังกล่าวจะน้อยมาก