Saya selalu berpikir bahwa tumpukan dan antrian prioritas adalah sinonim - struktur data abstrak yang mendukung insert
, findMin
dan deleteMin
operasi.
Beberapa literatur tampaknya setuju dengan saya - Struktur Data Murni Fungsional Chris Okasaki (bab 3), misalnya.
Di sisi lain, halaman tumpukan Wikipedia mendefinisikannya sebagai struktur data berbasis pohon, dan menyatakan bahwa tumpukan adalah implementasi konkret dari antrian prioritas.
Saya mengalami kesulitan mendamaikan ini dengan fakta bahwa saya dapat memikirkan lebih dari satu implementasi tumpukan - tumpukan kiri, tumpukan binomial, tumpukan hamparan ...
Apakah fakta sederhana bahwa tumpukan dapat diimplementasikan dengan struktur data yang berbeda tidak berarti, menurut definisi, bahwa itu adalah struktur data abstrak? Dan jika itu masalahnya, apakah ada perbedaan aktual dengan antrian prioritas?
sumber
Jawaban:
Antrian prioritas dapat memiliki implementasi apa pun, seperti larik yang Anda cari secara linear ketika Anda muncul. Semua itu berarti bahwa ketika Anda pop Anda mendapatkan nilai dengan minimum atau maksimum tergantung.
Tumpukan klasik seperti yang biasanya disebut biasanya tumpukan kecil. Implementasi yang memiliki kompleksitas waktu yang baik (
O(log n)
on push dan pop) dan tidak ada memori overhead.sumber
findMin
,deleteMin
,insert
), tumpukan telah dijamin "baik" kompleksitas bagi mereka di mana antrian prioritas tidak?O(log(n))
dorongan dan pop, kurasa.Situs web ini memberikan penjelasan yang sangat jelas. http://pages.cs.wisc.edu/~vernon/cs367/notes/11.PRIORITY-Q.html
Singkatnya, antrian prioritas dapat diimplementasikan menggunakan banyak dari struktur data yang telah kita pelajari (array, daftar tertaut, atau pohon pencarian biner). Namun, struktur data tersebut tidak memberikan operasi yang paling efisien. Untuk menjadikan semua operasi sangat efisien, kami akan menggunakan struktur data baru yang disebut heap.
sumber
Saya pikir apa yang Anda tulis tentang beton vs abstrak benar. Di mana Anda mengatakan bahwa tumpukan tumpukan, tumpukan binomial adalah implementasi dari tumpukan yang berbeda, saya pikir lebih tepat untuk mengatakan bahwa mereka adalah jenis tumpukan yang berbeda. Heap saya anggap sebagai kategori implementasi yang umumnya menjamin tidak hanya antarmuka yang sama, tetapi juga waktu akses yang sama.
Anda melihat ini dengan peta asosiatif, dan tabel hash dan pohon pencarian biner juga. Bsts dan tabel hash keduanya struktur data konkret yang menyediakan antarmuka abstrak peta asosiatif. Pohon merah-hitam dan dan pohon-pohon AVL keduanya seimbang, dengan jaminan O besar yang sama dan antarmuka tambahan yang sama (dalam urutan traversal). Mereka adalah jenis pohon yang berbeda, menurut saya lebih dari sekadar implementasi pohon yang berbeda. Mereka adalah implementasi yang berbeda tetapi terkait erat dari peta asosiatif.
sumber