Saya memiliki beberapa objek dengan prioritas yaitu tipe majemuk dan hanya dipesan sebagian . Saya perlu memilih objek dalam urutan prioritas ini (yaitu menghasilkan item minimal setiap kali). Tetapi alih-alih menyelesaikan pesanan secara sewenang-wenang, saya lebih suka jika antrian stabil dalam arti bahwa jika ada lebih dari satu elemen minimal, itu harus mengembalikan yang tertua terlebih dahulu.
Apakah ada struktur tumpukan data yang akan berfungsi dengan pemesanan parsial? Atau modifikasi antrian prioritas reguler untuk bekerja dengannya? Pilihan umum untuk algoritma yang saya butuhkan adalah tumpukan biner atau 4-ary sederhana, tetapi itu tidak bekerja dengan pemesanan parsial.
Nilai-nilai prioritas mendukung:
- sebuah ≼ b b ≼ sebuah sebuah ⋚ ̸ b
- Menemukan infima (glb) dan suprema (lub). adalah y maksimal sehingga y \ preccurlyeq x_i . Menghitung nilai maksimum n membutuhkan O (n) waktu. Jumlah maksimum (dan supremum) dari setiap perangkat ada.y y ≼ x i n O ( n )
- Ekstensi linear untuk pemesanan parsial dapat ditentukan. Menggunakannya untuk antrian prioritas adalah jalan keluar yang mudah karena algoritme berfungsi seperti itu. Tetapi urutan mempengaruhi kinerja dan urutan penyisipan sepertinya yang terbaik dalam menghindari kasus terburuk.
Selain itu algoritma yang ingin saya gunakan ini perlu mengetahui infinite dari semua prioritas dalam antrian.
Prioritas memiliki beberapa makna dunia nyata, tetapi dapat berubah, sehingga tampaknya tidak layak untuk mengandalkan properti lain yang bisa mereka miliki.
Catatan: Biner tumpukan tidak berfungsi dengan pemesanan parsial. Asumsikan tumpukan biner dengan , dan , di mana dan dan . Mereka diposisikan dalam urutan itu, jadi
a (0)
/ \
b (1) c (2)
sekarang d dimasukkan. Posisi bebas berikutnya adalah 3, anak kiri dari , jadi kita dapatkan
a (0)
/ \
b (1) c (2)
/
d (3)
Jika (yang menyiratkan dari transitivitas, tetapi tidak mengatakan apa-apa tentang dan ) dan , maka tidak ditukar dengan , karena tidak kurang. Tapi itu sebenarnya kurang dari , tapi itu tidak dibandingkan dengan itu, jadi sekarang invarian tumpukan utama tidak berlaku; top tidak minimal.d ≼ c d b d ⋚ ̸ b d b a
Saya curiga ada tumpukan hutan dengan gaya tumpukan binomial yang bisa digunakan untuk bekerja. Pada dasarnya, penting untuk selalu membandingkan nilai-nilai baru dengan root dan hanya menghubungkan elemen-elemen yang sebanding. Itu akan membuat pohon-pohon di hutan berukuran acak dan dengan demikian membuat kerumitan tergantung pada jumlah set yang tak tertandingi di tumpukan. Saya agak curiga kerumitan tidak dapat diperbaiki (kita harus terus membandingkan sampai kita mencapai elemen yang sebanding) Saya mungkin telah melewatkan sesuatu, jadi saya membiarkan ini terbuka.
Catatan: Pemesanan sebagian dan meskipun ada cara untuk menentukan ekstensi linier untuk itu, menambahkan cap waktu dan menggunakannya sebagai kriteria sekunder bukan salah satunya. Misalkan kita menetapkan timestamp untuk masing-masing dan mendefinisikan urutan sebagai iff atau ( dan . Maka anggaplah kita memiliki berbeda , , , sehingga dan . Kemudian dansuatu ≼ ' a ≼ ' b a ≼ b b ⋠ sebuah t ( a ) ≤ t ( b ) a b c t ( a ) ≤ t ( b ) ≤ t ( c ) c ≤ a a ≼ ' b b ≼ ′ c c ≼ ′ a , tetapi , jadi relasinya tidak transitif dan karenanya bukan urutan sama sekali. Perpanjangan seperti ini hanya berfungsi untuk pesanan yang lemah, tetapi tidak untuk sebagian.
Sunting: Saya menyadari bahwa tidak hanya jumlah maksimum dari setiap set yang ditentukan, tetapi saya benar-benar harus dapat memperoleh elemen maksimum saat ini dalam antrian secara efisien. Jadi saya sekarang merenungkan apakah menambahkan node khusus yang mengandung infima subtree ke beberapa struktur heap umum akan membantu.