Algoritma naif untuk menentukan dari :ABA
Untuk , tentukan nilai dengan membandingkan setiap dengan untuk
dan menghitung yang memenuhi .B ( k ) A ( i ) A ( k ) i = 1 , … , k A ( i ) < A ( k )k=1,…,nB(k)A(i)A(k)i=1,…,kA(i)<A(k)
Algoritma ini membandingkan dengan yang lainnya ( kali), hingga lainnya, dll. Sehingga jumlah total perbandingan adalah . Tapi itu bukan yang terbaik yang bisa kita lakukan. Sebagai contoh, melihat , kita tidak perlu melakukan perbandingan! karena ini adalah alami pertama , dan dijamin (terlepas dari permutasi) bahwa bilangan alami lebih rendah akan ada di sana. Bagaimana dengan ? Alih-alih memeriksa hingga , kita bisa memeriksa . Itu adalah: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)
Untuk , gunakan algoritma di atas; untuk
gunakan algoritma terbalik: tentukan dengan mengaturnya awalnya ke dan kemudian kurangi untuk setiap entri untuk yang kurang dari .k=1,…,n2k=n2,…,nB(k)A(n)−11A(i)i=k+1,…,nA(k)
Ini akan memakan waktu langkah, yang masih . Perhatikan juga bahwa dalam membangun dari , jika maka .2×(n2−1)(n2−2)2=(n−2)(n−4)4O(n2)ABB(n)=A(n)−1A(n)=B(n)+1
Tapi sekarang untuk lebih pintar. Jika kami diizinkan ruang tambahan atau mengurutkan di tempat, kami dapat mengurutkan angka saat kami membandingkannya. Sebagai contoh:
∣∣∣∣ASB8904803701407332219166655∣∣∣∣
Alih-alih memeriksa semuanya (atau memeriksanya secara berurutan), kita bisa menggunakan pencarian biner untuk menentukan masing-masing . Namun, pengurutan masih membutuhkan waktu .B(k)O(nlogn)