Apa struktur data yang persisten untuk sekumpulan elemen yang dipesan sebagian?

15

Saya perlu menyimpan set elemen tipe a. Ketik sebagian memerintahkan, sehingga membandingkan dan sebuah 2 dapat kembali lebih kecil, lebih besar, sama atau tak tertandingi.a1a2

Satu masalah dengan hashtable adalah bahwa dua elemen yang sama dapat direpresentasikan secara berbeda, dan saya tidak memiliki akses ke fungsi hashing yang konsisten dengan kesetaraan.

Membandingkan dua elemen bisa menjadi proses yang panjang sehingga akan menarik untuk meminimalkan perbandingan. Jika perlu, dimungkinkan untuk memoize panggilan ke operator perbandingan. Saya menyadari sekarang bahwa saya hanya perlu menyimpan antik (atau anggap saja begitu). Lebih tepatnya, operasi yang perlu saya lakukan adalah sebagai berikut:

  • Hapus elemen dari antichain;
  • Coba tambahkan elemen. Jika elemen lebih kecil dari anggota, jangan tambahkan, jika tidak, tambahkan dan hapus setiap elemen lebih kecil dari itu.

Saya juga dapat terikat setiap elemen oleh dua bilangan bulat, sehingga jika saya tahu bahwa dan i 3 < b < i 4 , kemudian mengetahui i 2 < i 3 langsung memberi saya sebuah < b . Tentu saja, i 2i 3 tidak berarti a b ... Menemukan batas bilangan bulat adalah operasi yang relatif murah dibandingkan dengan perbandingan elemen yang ditiup penuh.i1<a<i2i3<b<i4i2<i3a<bi2i3ab

Abdallah
sumber
1
Saya pikir kita perlu tahu lebih banyak untuk menjawab pertanyaan Anda dengan cerdas. Apakah Anda menyimpan elemen dan urutan parsial mudah dihitung? Atau apakah Anda juga menyimpan urutan parsial dalam semacam tabel pencarian? Bagaimana Anda bermaksud menggunakan perintah parsial? Apakah Anda berharap menggunakannya dengan cara yang sama seperti urutan linear yang digunakan untuk menyimpan set (misalnya di pohon pencarian)?
Andrej Bauer
Sekarang saya menyadari bahwa saya hanya akan memiliki antik antik, saya tidak yakin ada yang lebih baik daripada solusi naif menyimpan hasil dalam daftar. Jika demikian, maaf untuk masalahnya!
Abdallah
Jika Anda pikir pertanyaan Anda sekarang diperdebatkan, mungkin Anda harus menandainya untuk dihapus / ditutup?
Suresh Venkat
1
Dua elemen dalam set tidak akan ada bandingannya, tetapi ini tidak berarti bahwa representasi naif adalah yang terbaik yang dapat Anda lakukan. Sebagai contoh, pertimbangkan multiset terbatas yang dipesan dengan penyertaan (= bilangan bulat yang dapat dibagi): ada banyak potensi untuk optimasi, tergantung pada representasi data Anda (menggunakan kardinalitas, menggunakan set dukungan, ...). Optimalisasi ini akan sangat tergantung pada sifat dari relasi urutan. Lalu ada masalah terpisah untuk memutuskan apakah perlu menyimpan informasi tentang elemen yang sekarang dihapus: apakah Anda akan sering membandingkannya dengan penambahan baru?
Gilles 'SANGAT berhenti menjadi jahat'
Oke terima kasih. Jadi saya menambahkan beberapa informasi (kemungkinan bilangan bulat integer) yang dapat mengarah pada optimasi.
Abdallah

Jawaban:

8

Makalah "Penyortiran dan Seleksi dalam PoSets" oleh Daskalakis, Karp, Mossel, Risensefield, Verbin, 2008 yang menggambarkan representasi dinamis dari PoSets berdasarkan antichains.

Anda mungkin juga tertarik dengan makalah "Succinct Posets" oleh Munro, Nicholson, 2012 yang baru-baru ini dirilis di Arxiv dan dalam daftar pustaka di dalamnya. Struktur data mereka statis tetapi saya berasumsi bahwa langkah selanjutnya adalah memiliki struktur data dinamis.

Jeremy
sumber
Penyortiran dan Pemilihan dalam Poset sangat bagus untuk mendapatkan ide tentang apa yang dibutuhkan untuk struktur data, tetapi algoritma mengasumsikan menandai elemen-elemen dalam poset (misalnya masalah yang ingin kita selesaikan di tempat pertama!) Untuk hitung hubungan antara dua elemen dalam O ( 1 ) setelah membangun struktur data dalam O ( q n ) query. Jadi, makalah ini mengasumsikan pertanyaan tentang hubungan antara dua elemen menjadi mahal dan memetakan elemen poset menjadi sepele, sedangkan memetakan struktur data biasanya mengasumsikan kebalikan dari yang pertama untuk menyelesaikan yang terakhir. O(1)O(1)O(qn)
Sebastian Graf
Memiliki peta yang diwakili sebagai dekomposisi rantai (minimal) adalah wawasan yang baik. Mempertahankan yang invarian melalui penghapusan adalah hal yang rumit.
Sebastian Graf
4

Pernahkah Anda melihat Heeringa et al "Mencari dalam Perintah Partial Dynamic Seperti Pohon" ? Mereka memberikan struktur data dinamis untuk masalah pendahulu pada poset. Ini dirancang untuk RAM, tetapi Anda dapat mewakili array sebagai pohon biner seimbang dan hanya menimbulkan overhead multiplikasi sambil membuat struktur berfungsi murni.O(lgn)

jbapple
sumber
1
Perhatikan ini hanya mencakup perintah parsial 'mirip pohon', misalnya ketemu-semilattis, di mana semua elemen kurang dari atau sama dengan beberapa elemen emembentuk rantai.
Sebastian Graf