Thuật toán ngây thơ để xác định từ :ABA
Với , hãy xác định giá trị của bằng cách so sánh từng với với
và đếm những giá trị thỏa mãn .k=1,…,nB(k)A(i)A(k)i=1,…,kA(i)<A(k)
Thuật toán này so sánh với tất cả những người khác ( lần), với người khác, v.v. vì vậy tổng số so sánh là . Nhưng đó không phải là điều tốt nhất chúng ta có thể làm. Ví dụ, nhìn vào , chúng ta không cần phải so sánh! vì đó là số tự nhiên đầu tiên và được đảm bảo (không phụ thuộc vào hoán vị) rằng các số tự nhiên thấp hơn sẽ ở đó. Còn thì sao? Thay vì kiểm tra đến , chúng ta chỉ có thể kiểm tra . Đó là:A(1)n−1A(2)n−2(n−1)(n−2)2B(n)B(n)=A(n)−1 nn−1B(n−1)A(1)A(n−2)A(n)
Với , sử dụng thuật toán ở trên; với
sử dụng thuật toán ngược: xác định bằng cách đặt ban đầu thành và sau đó trừ cho mỗi mục cho nhỏ hơn .k=1,…,n2k=n2,…,nB(k)A(n)−11A(i)i=k+1,…,nA(k)
Điều này sẽ mất bước, vẫn là . Cũng lưu ý rằng khi xây dựng từ , nếu thì .2×(n2−1)(n2−2)2=(n−2)(n−4)4O(n2)ABB(n)=A(n)−1A(n)=B(n)+1
Nhưng bây giờ cho tinh tế hơn. Nếu chúng tôi cho phép một số không gian bổ sung hoặc sắp xếp tại chỗ, chúng tôi có thể sắp xếp các số khi chúng tôi so sánh chúng. Ví dụ:
∣∣∣∣ASB8904803701407332219166655∣∣∣∣
Thay vì kiểm tra tất cả chúng (hoặc kiểm tra chúng theo thứ tự), chúng tôi có thể sử dụng tìm kiếm nhị phân để xác định từng . Tuy nhiên, việc sắp xếp vẫn mất thời gian .B(k)O(nlogn)