Một cách khác để suy nghĩ về điều này là giá trị tối đa i
trở thành trước khi nó được đặt lại. Điều này, như hóa ra, làm cho nó đơn giản hơn để suy luận về cách thứ tự sắp xếp trước A
ảnh hưởng đến thời gian chạy của thuật toán.
Cụ thể, quan sát rằng khi i
đặt giá trị tối đa mới của nó, hãy gọi nó là N, mảng [A[0], ..., A[N-1]]
được sắp xếp theo thứ tự tăng dần.
Vậy điều gì xảy ra khi chúng ta thêm phần tử A[N]
vào hỗn hợp?
Toán học:
Vâng, giả sử nó phù hợp ở vị trí . Sau đó, chúng ta cần các vòng lặp (mà tôi sẽ biểu thị ) để di chuyển nó đến các lần lặp , để di chuyển nó đến vị trí và nói chung:pNNstepsN−1N+(N−1)N−2
stepsN(pN)=N+(N−1)+(N−2)+⋯+(pN+1)=12(N(N+1)−pN(pN+1))
Đối với một mảng được sắp xếp ngẫu nhiên, lấy phân phối đồng đều trên cho mỗi , với:pN{0,1,…,N}N
E(stepsN(pN))=∑a=1NP(pN=a)stepsN(a)=∑a=1N1N12(N(N+1)−a(a+1))=12(N(N+1)−13(N+1)(N+2))=13(N2−1)=Θ(N2)
tổng có thể được hiển thị bằng công thức Faulhaber hoặc liên kết Wolfram Alpha ở phía dưới.
Đối với một mảng được sắp xếp ngược, cho tất cả và chúng tôi nhận được:pN=0N
stepsN(pN)=12N(N+1)
chính xác, mất nhiều thời gian hơn bất kỳ giá trị nào khác của .pN
Đối với một mảng đã được sắp xếp, và , với các điều khoản bậc thấp trở nên có liên quan.pN=NstepsN(pN)=0
Tổng thời gian:
Để có được tổng số thời gian, chúng tôi tổng hợp các bước trên tất cả các . (Nếu chúng tôi cực kỳ cẩn thận, chúng tôi sẽ tổng hợp các giao dịch hoán đổi cũng như các vòng lặp và quan tâm đến các điều kiện bắt đầu và kết thúc, nhưng thật dễ dàng để thấy rằng chúng không góp phần vào sự phức tạp trong hầu hết các trường hợp) .N
Và một lần nữa, sử dụng tính tuyến tính của kỳ vọng và Công thức của Faulhaber's:
Expected Total Steps=E(∑N=1nstepsN(pN))=∑N=1nE(stepsN(pN))=Θ(n3)
Tất nhiên, nếu vì một lý do nào đó không phải là (ví dụ: phân phối mảng mà chúng tôi đang xem đã rất gần với việc sắp xếp), thì điều này không phải lúc nào cũng cần là trường hợp. Nhưng phải mất các bản phân phối rất cụ thể trên để đạt được điều này!stepsN(pN)Θ(N2)pN
Đọc có liên quan: