Bir yığın ile öncelik sırası arasındaki fark


36

Hep yığınları ve öncelikli kuyruklar eş sanıyordum - soyut veri yapısı olduğunu destekler insert, findMinve deleteMinoperasyonlar.

Bazı edebiyat benimle aynı fikirde gibi gözüküyor - örneğin Chris Okasaki'nin Tamamen İşlevsel Veri Yapıları (bölüm 3).

Öte yandan, Wikipedia'nın yığın sayfası bunu ağaç tabanlı bir veri yapısı olarak tanımlar ve yığınların öncelikli sıraların somut bir uygulaması olduğunu belirtir.

Birden fazla yığın uygulaması düşünebildiğim gerçeği ile bunu çözmekte zorlanıyorum - sol yığınlar, binom yığınları, yayılma yığınları ...

Bir yığının farklı veri yapıları ile uygulanabileceği basit gerçeği, tanım olarak soyut bir veri yapısı olduğu anlamına gelmiyor mu? Ve eğer durum buysa, öncelik sıraları ile gerçek bir fark var mı?


11
Öncelik sıraları hakkındaki Wikipedia sayfasını okuyun ( en.wikipedia.org/wiki/Priority_queue ), "bir öncelik sırası bir yığınla veya sıralanmamış bir dizi gibi başka çeşitli yöntemlerle uygulanabilir" - ve bu aslında cevabın cevabıdır. senin sorun.
Doktor Brown,

2
Eh, tam olarak değil - bir yığının somut bir veri yapısı mı yoksa soyut bir yapı mı olduğunu anlamama yardımcı olmuyor. Soyut bir şey söylemeye meyilliyim, çünkü bir yığının somut uygulamaları var. Eğer durum buysa ve öncelik listesi ve bir yığın aynı özelliklere sahip soyut veri yapılarıysa, farkı anlamakta yardıma ihtiyacım var ve birinin diğerinin muhtemel bir uygulaması olduğunu söylemek, aslında ikisi de değilse somut uygulama.
Nicolas Rinaudo

İşler daha da kötüsü: Bir ikili yığın, bir dizi veya bir ikili ağaç olarak uygulanabilir. Neyse ki, başka bir şey olarak uygulanan bir dizi henüz duymadım.
Alexey

Yanıtlar:


25

Bir öncelik sırasını, açılırken doğrusal olarak aradığınız bir dizi gibi herhangi bir uygulamaya sahip olabilir. Tek yapmanız gereken, pop açtığınızda, değeri bağlı olarak minimum veya maksimum değerle almanızdır.

Tipik olarak belirtildiği gibi klasik bir yığın genellikle bir min yığınıdır. İyi zaman karmaşıklığına sahip ( O(log n)zorla ve patladığında) ve hafızası olmayan bir uygulama.


4
Eğer fark, aynı işlemleri (paylaşırken o olduğunu demek istiyorsunuz ki findMin, deleteMin, insertonlar için), yığınları garanti var "iyi" karmaşıklıklar öncelik sıraları yok nereye?
Nicolas Rinaudo

Yığın ayrıca farklı zaman karmaşıklıklarına sahip farklı uygulamalara da sahip olamaz mı (örneğin normal bir bağlantılı ikili ağaç)? Ayrıca, zaman karmaşıklığı kullanılan hafızaya bağlıdır. Eğer manyetik bir bantsa, O(log(n))sanırım bas ve pop için hiçbir şey olmayacak .
Alexey

6

Bu web sitesi gerçekten net bir açıklama sağlar. http://pages.cs.wisc.edu/~vernon/cs367/notes/11.PRIORITY-Q.html

Kısacası, daha önce üzerinde çalıştığımız birçok veri yapısını (bir dizi, bağlantılı bir liste veya ikili bir arama ağacı) kullanarak bir öncelik sırası uygulanabilir. Ancak, bu veri yapıları en verimli işlemleri sağlamamaktadır. Tüm işlemleri çok verimli hale getirmek için, yığın adı verilen yeni bir veri yapısı kullanacağız.


1
Bağlandığınız sayfanın özetinde, öncelik sırasının kendisine veri yapısı adı verildiğini unutmayın .
Alexey,

2

Somut ve soyut hakkında yazdıklarınızın doğru olduğunu düşünüyorum. Yayılma yığınlarının, binom yığınlarının yığınların farklı uygulamaları olduğunu söylerken, farklı yığın tipleri olduğunu söylemek daha doğru olur. Yığın Genellikle sadece aynı arayüzü değil, aynı zamanda aynı erişim zamanını garanti eden bir uygulama kategorisi olarak düşünüyorum.

Bunu ilişkisel haritalar, karma tablolar ve ikili arama ağaçları ile birlikte görürsünüz. Bsts ve karma tabloları birleştirici harita soyut arayüzü sağlayan somut veri yapılarıdır. Kırmızı siyah ağaçlar ve ve avl ağaçları, aynı büyük O garantileri ve aynı ek arayüz (sıra geçişi) ile hem dengeli bstlerdir. Onlar farklı ağaç türleridir, farklı ağaç uygulamalarından daha fazlasını söyleyebilirim. Bunlar farklı ancak birbirleriyle ilişkili haritaların uygulamalarıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.