มีเวลาเชิงเส้นในสถานที่อัลกอริทึมสับเปลี่ยน riffle หรือไม่? นี่คืออัลกอริธึมที่บางคนมีมือที่คล่องแคล่วโดยเฉพาะอย่างยิ่งมีความสามารถในการดำเนินการ: แบ่งเท่า ๆ กันอาร์เรย์อินพุตขนาดที่เท่ากันแล้ว interleaving องค์ประกอบของทั้งสองแบ่งเท่า ๆ กัน
Mathworld มีหน้าสั้น ๆ เกี่ยวกับการสับเปลี่ยนระลอกคลื่นน้อย โดยเฉพาะอย่างยิ่งผมสนใจในความหลากหลายออกสับเปลี่ยนที่แปลงการป้อนข้อมูลอาร์เรย์ 1 2 3 4 5 6 ลง 1 4 2 3 5 6 ทราบว่าในความหมายของพวกเขา, ความยาวใส่เป็น n
มันตรงไปตรงมาที่จะแสดงในเวลาเชิงเส้นถ้าเรามีขนาดที่สองเป็นอาร์เรย์หรือมีประโยชน์มากกว่า ก่อนอื่นให้คัดลอกองค์ประกอบสุดท้ายไปยังอาร์เรย์ แล้วสมมติว่าการจัดทำดัชนี 0-based คัดลอกแรกองค์ประกอบจากดัชนีเพื่อ ] จากนั้นคัดลอกองค์ประกอบจากอาร์เรย์หลังที่สองไปยังอาร์เรย์ป้อนข้อมูลดัชนีการทำแผนที่ไป ] (เราสามารถทำงานได้น้อยกว่านั้นเล็กน้อยเพราะองค์ประกอบแรกและองค์ประกอบสุดท้ายในอินพุตไม่ย้าย)
วิธีหนึ่งในการพยายามทำสิ่งนี้ในสถานที่เกี่ยวข้องกับการสลายตัวของการเปลี่ยนแปลงไปสู่รอบแยกจากนั้นจัดเรียงองค์ประกอบตามแต่ละรอบ อีกครั้งสมมติ 0 ตามการจัดทำดัชนีการเปลี่ยนแปลงที่เกี่ยวข้องในกรณี 6 องค์ประกอบคือ
ตามที่คาดไว้องค์ประกอบแรกและสุดท้ายเป็นคะแนนคงที่และถ้าเราอนุญาตองค์ประกอบกลาง 4 เราได้รับผลลัพธ์ที่คาดหวัง
น่าเสียดายที่ความเข้าใจของฉันเกี่ยวกับคณิตศาสตร์ของพีชคณิต (และLของพวกเขา ) ส่วนใหญ่มาจากวิกิพีเดียและฉันไม่รู้ว่าสามารถทำได้ในเวลาเชิงเส้นหรือไม่ บางทีการเรียงสับเปลี่ยนที่เกี่ยวข้องกับการสับนี้สามารถย่อยสลายได้อย่างรวดเร็ว? นอกจากนี้เราไม่จำเป็นต้องแยกย่อยทั้งหมด เพียงแค่กำหนดองค์ประกอบเดียวของแต่ละรอบของความไม่ลงรอยจะพอเพียงเนื่องจากเราสามารถสร้างวงจรใหม่จากองค์ประกอบหนึ่งของมัน อาจจำเป็นต้องใช้แนวทางที่แตกต่างอย่างสิ้นเชิง
แหล่งข้อมูลที่ดีเกี่ยวกับคณิตศาสตร์ที่เกี่ยวข้องมีค่าเท่ากับอัลกอริทึม ขอบคุณ!