Apa yang diketahui tentang struktur data yang dapat mempertahankan urutan item yang tunduk pada dua operasi berikut?
- Tekan (x): tambahkan x ke akhir urutan, dan kembalikan pengidentifikasi untuk posisinya di urutan
- Ekstrak (S): diberi seperangkat pengidentifikasi yang tidak berurutan, menghapus item di posisi tersebut dari urutan, dan mengembalikan daftar item yang dihapus dalam urutan urutan
Jika Anda suka, Anda bisa menganggap ini sebagai tumpukan atau antrian dengan operasi split yang membaginya menjadi dua tumpukan: operasi ekstrak dapat digunakan untuk menerapkan operasi pop atau dequeue, dan urutan item yang diekstraksi juga dapat diletakkan kembali lagi ke tumpukan atau antrian yang berbeda.
Apa yang sudah saya ketahui: seseorang dapat mempertahankan urutan sebagai daftar yang ditautkan dua kali lipat, di mana setiap pengenal hanyalah sebuah penunjuk ke simpul daftar-tertaut, dan setiap simpul juga menyimpan nomor posisi yang memungkinkan perbandingan cepat antara posisi dua elemen yang tidak terkait dalam urutan. Tidak sulit untuk memperbarui nomor posisi saat struktur data berkembang sehingga semuanya adalah bilangan bulat positif dari nilai maksimum , di mana adalah jumlah item saat ini dalam daftar. Dengan struktur data ini, satu-satunya bagian yang sulit dari operasi ekstrak adalah menyortir item yang diekstraksi berdasarkan nomor posisi mereka. Ekstraksi item membutuhkann k O ( k √ waktu acak yang diharapkan menggunakan algoritma pengurutan integer dari Han dan Thorup dari FOCS 2002, misalnya, dan operasi push membutuhkan waktu yang konstan.
Apa yang saya tidak tahu: apakah mungkin untuk menangani ekstrak dalam waktu dan mendorong dalam waktu yang konstan? Apakah ada literatur tentang masalah ini? Apakah sulit seperti penyortiran bilangan bulat?
Motivasi: ini adalah langkah dasar yang diperlukan untuk memesan item dalam algoritma penjadwalan Coffman-Graham, yang juga memiliki aplikasi dalam menggambar grafik. Bagian sulit dari Coffman-Graham adalah pemesanan topologi leksikografis. Hal ini dapat dilakukan dengan mempertahankan, untuk masing-masing indegree yang berbeda, urutan simpul dengan indegree dalam subgraph yang disebabkan oleh simpul yang tersisa. Kemudian, berulang-ulang hapus simpul pertama dari urutan simpul nol-nol dan tambahkan ke urutan topologi; ekstrak tetangga dari derajat yang sebelumnya milik mereka dan dorong mereka ke urutan untuk derajat yang lebih kecil berikutnya. Jadiv O ( k ) waktu untuk operasi ekstrak dalam struktur data ini akan mengarah pada implementasi waktu linear dari algoritma Coffman-Graham.
Sejak awalnya menanyakan hal ini, saya menemukan sebuah makalah oleh Sethi dari tahun 1976 yang memungkinkan algoritma Coffman-Graham diimplementasikan dalam waktu linier, dan memasukkannya dalam artikel Wikipedia saya pada algoritma Coffman-Graham , sehingga motivasi aslinya kurang bermakna. Saya masih penasaran apa jawabannya.