Metode Bently-Saxe memberikan antrian prioritas stabil yang cukup alami.
Simpan data Anda dalam urutan array yang diurutkan . A i memiliki ukuran 2 i . Setiap array juga memiliki counter c i . Entri array A i [ c i ] , … , A i [ 2 i - 1 ] berisi data.SEBUAH0, ... , AkAi2iciAi[ci],…,Ai[2i−1]
Untuk setiap , semua elemen di A i ditambahkan baru-baru ini daripada di A i + 1 dan dalam setiap A i elemen yang diperintahkan oleh nilai dengan ikatan yang rusak dengan menempatkan unsur-unsur yang lebih tua menjelang elemen baru. Perhatikan bahwa ini berarti kita dapat menggabungkan A i dan A i + 1 dan mempertahankan pemesanan ini. (Dalam kasus ikatan selama penggabungan, ambil elemen dari A i + 1. )iAiAi+1AiAiAi+1Ai+1
Untuk menyisipkan nilai , temukan i terkecil sehingga A i berisi 0 elemen, gabungkan A 0 , … , A i - 1 dan x , simpan ini dalam A i dan set c 0 , … , c i dengan tepat.xiAiA0,…,Ai−1xAic0,…,ci
Untuk mengekstrak min, cari indeks terbesar sehingga elemen pertama dalam A i [ c i ] adalah minimum di atas semua i dan selisih c i .iAi[ci]ici
Dengan argumen standar, ini memberikan waktu diamortisasi per operasi dan stabil karena urutan yang dijelaskan di atas.O(logn)
Untuk urutan penyisipan dan ekstraksi, ini menggunakan entri n array (jangan biarkan array kosong) ditambah O ( log n ) kata-kata data pembukuan. Itu tidak menjawab versi Mihai dari pertanyaan, tetapi itu menunjukkan bahwa kendala stabil tidak memerlukan banyak ruang overhead. Secara khusus, ini menunjukkan bahwa tidak ada Ω ( n ) batas bawah pada ruang ekstra yang dibutuhkan.nnO(logn)Ω(n)
nn
Ak,…,A0AkAk−1nniAi2i
nA0,…,Ai
ciAici2i−ci−1O(logn)A0[0],…,Ak[0]Ai[0]Ai[0]AiAi[ci]Ai[0]Ai[ci]
n