คำถามนี้เกี่ยวข้องกับอัลกอริทึม Fisher-Yates สำหรับส่งกลับการสุ่มแบบสุ่มของอาร์เรย์ที่กำหนด หน้าวิกิพีเดียบอกว่าความซับซ้อนของมันคือ O (n) แต่ผมคิดว่ามันเป็น O (n log n)
ในการวนซ้ำแต่ละครั้งฉันเลือกจำนวนเต็มแบบสุ่มระหว่าง 1 ถึง i เพียงแค่เขียนจำนวนเต็มในหน่วยความจำคือ O (log i) และเนื่องจากมีการวนซ้ำแล้วจึงรวมเป็น
O (บันทึก 1) + O (บันทึก 2) + ... + O (บันทึก n) = O (n บันทึก n)
ซึ่งไม่ดีกว่าอัลกอริทึมไร้เดียงสา ฉันทำอะไรบางอย่างหายไปหรือเปล่า
หมายเหตุ: อัลกอริธึมไร้เดียงสาคือการกำหนดหมายเลขสุ่มในแต่ละองค์ประกอบในช่วงเวลา (0,1) จากนั้นเรียงลำดับอาร์เรย์โดยคำนึงถึงตัวเลขที่กำหนด