Câu hỏi này liên quan đến thuật toán Fisher-Yates để trả về một sự xáo trộn ngẫu nhiên của một mảng nhất định. Các trang Wikipedia nói rằng sự phức tạp của nó là O (n), nhưng tôi nghĩ rằng nó là O (n log n).
Trong mỗi lần lặp i, một số nguyên ngẫu nhiên được chọn giữa 1 và i. Đơn giản chỉ cần viết số nguyên trong bộ nhớ là O (log i) và vì có n lần lặp, nên tổng số là
O (log 1) + O (log 2) + ... + O (log n) = O (n log n)
thuật toán ngây thơ không tốt hơn. Am i thiếu cái gì ở đây?
Lưu ý: Thuật toán ngây thơ là gán cho mỗi phần tử một số ngẫu nhiên trong khoảng (0,1), sau đó sắp xếp mảng liên quan đến các số được gán.