นี่คือคำตอบที่ elaborates ตามอัลกอริทึมจากกระดาษที่เชื่อมโยงโดย Joe: http://arxiv.org/abs/0805.1598
ก่อนอื่นให้เราพิจารณาอัลกอริทึมซึ่งใช้การหารและพิชิตΘ(nlogn)
1) หารและพิชิต
เราจะได้รับ
a1,a2,…,b1,b2,…bn
ตอนนี้ใช้การหารและพิชิตสำหรับบางเราพยายามหาอาร์เรย์m=Θ(n)
[a1,a2,…,am,b1,b2,…,bm],[am+1,…,an,bm+1,…bn]
และการชดเชย
ขอให้สังเกตว่าส่วนเป็นการเปลี่ยนแปลงแบบวงกลมของb1,b2,…bm,am+1,…an
am+1,…an,b1,…bm
ตามสถานที่m
นี่เป็นแบบคลาสสิกและสามารถทำได้ภายในสามครั้งและเวลาO(n)
ดังนั้นการแบ่งและพิชิตช่วยให้คุณอัลกอริทึมที่มีการเรียกซ้ำคล้ายกับ(N)Θ(nlogn)T(n)=2T(n/2)+Θ(n)
2) วงจรการเปลี่ยนรูป
ทีนี้อีกแนวทางหนึ่งของปัญหาคือการพิจารณาการเปลี่ยนแปลงเป็นชุดของวงจรที่แยกจากกัน
การเปลี่ยนแปลงได้รับจาก (สมมติว่าเริ่มต้นที่ )1
j↦2jmod2n+1
ถ้าเรารู้ว่าวัฏจักรคืออะไรโดยใช้พื้นที่พิเศษคงที่เราสามารถตระหนักถึงการเปลี่ยนแปลงโดยการเลือกองค์ประกอบพิจารณาว่าองค์ประกอบนั้นไปที่ใด (ใช้สูตรข้างต้น) ใส่องค์ประกอบในตำแหน่งเป้าหมายลงในพื้นที่ชั่วคราววาง องค์ประกอบไปยังตำแหน่งเป้าหมายนั้นและดำเนินต่อไปตามวงจร เมื่อเราทำกับหนึ่งรอบเราย้ายไปยังองค์ประกอบของรอบถัดไปและติดตามรอบนั้นและอื่น ๆAA
นี่จะทำให้เรามีอัลกอริทึมเวลา แต่เราคิดว่า "รู้ว่าวงจรคืออะไร" และพยายามทำหนังสือเล่มนี้ภายในจำกัด พื้นที่ เป็นสิ่งที่ทำให้ปัญหานี้ยากO(n)O(1)
นี่คือที่กระดาษใช้ทฤษฎีจำนวน
มันสามารถแสดงให้เห็นว่าในกรณีที่เมื่อองค์ประกอบที่ตำแหน่ง ,อยู่ในรอบที่แตกต่างกันและทุกรอบมีองค์ประกอบ ที่ตำแหน่ง02n+1=3k13,32,…,3k−13m,m≥0
นี้จะใช้ความจริงที่ว่าเป็นเครื่องกำเนิดไฟฟ้าของ *2(Z/3k)∗
ดังนั้นเมื่อวิธีการติดตามวัฏจักรทำให้เรามีอัลกอริธึมเวลาสำหรับแต่ละรอบเรารู้ว่าจะเริ่มต้นตรงไหน: พลังของ (รวม ) สามารถคำนวณในช่องว่าง )2n+1=3kO(n)31O(1)
3) อัลกอริทึมสุดท้าย
ตอนนี้เรารวมสองสิ่งข้างต้น: หารและพิชิต + เปลี่ยนวงจร
เราทำหารและพิชิต แต่รับเพื่อให้เป็นอำนาจของและ(N)m2m+13m=Θ(n)
ดังนั้นแทนที่จะเรียกซ้ำทั้งสอง "แบ่งเท่า ๆ กัน" เราจะจ่ายคืนเพียงครั้งเดียวและทำงานพิเศษΘ(n)
สิ่งนี้ทำให้เราเกิดซ้ำ (สำหรับ ) และทำให้เรามีเวลาอัลกอริทึมพื้นที่!T(n)=T(cn)+Θ(n)0<c<1O(n)O(1)