Soyut ve somut veri yapıları arasındaki fark nedir?


17

I testere kadar ben ilişkisel dizi (yani harita veya sözlüğünü) düşünce ve karma tablo aynı kavram vardı Wikipedia o

Çok az sayıda ciltleme içeren sözlükler için, bir ilişkilendirme listesi, bağlantılı bir ciltleme listesi kullanarak sözlüğü uygulamak mantıklı olabilir. ...

İlişkilendirilebilir bir dizinin en sık kullanılan genel amaçlı uygulaması, bir karma tablosuyla yapılır: olası her anahtarı bir dizi dizinine eşleyen bir karma işleviyle birlikte bir dizi bağlama. ...

Sözlükler ayrıca ikili arama ağaçlarında veya sayı tabanı ağaçları, denemeler, Judy dizileri veya van Emde Boas ağaçları gibi belirli bir anahtar türü için uzmanlaşmış veri yapılarında depolanabilir. ...

Yani, benim sorunum, ilişkisel dizinin (yani harita veya sözlük) soyut bir veri türü olduğunu ve karma tablonun somut bir veri yapısı olduğunu ve farklı somut veri yapılarının aynı soyut veri türü.

Sorularım

  • Soyut veri yapıları ile somut veri yapıları arasındaki fark ve ilişki nedir?

  • Her biri için hangi örnekler vardır (soyut ve somut veri yapıları)? Ne kadar çok, o kadar iyi.

  • Hangi soyut veri yapılarını uygulamak için hangi somut veri yapılarının kullanılabileceğinin bir listesi var mı? Bir tane olması güzel olurdu.

Yanıtlar:


17

Soyut veri türü (ADT) esasen bir API'dir ve somut bir veri yapısı bu API'nın uygulanmasını sağlar. Belirli bir ADT için, ADT tarafından açıklanan sorgu ve güncelleme işlemlerini destekleyen genellikle birkaç farklı somut veri yapısı seçeneği vardır. Belirli bir ADT için her somut veri yapısı, ADT tarafından açıklanan tüm işlemleri desteklemelidir (muhtemelen rastgele yapılar söz konusu olduğunda bazı başarı olasılıkları ile birlikte), ancak her beton yapı, her bir işlemin çalışma süreleri için farklı garantiler verebilir. Belirli bir ADT için hangi somut veri yapısının uygulanacağı seçimi genellikle her bir işlemin verimlilik önceliklerine (yapının başlatılması dahil) ve çeşitli veri türlerinin uygulanması ve sürdürülmesinin karmaşıklığına bağlıdır.

Tek bir cevapta listelemek için çok fazla ADT ve karşılık gelen beton yapılar var, ancak birkaç örnek:

  • Bir sözlük destekler Find(x)sorgular. Bir anahtar için , anahtar ile sözlükte elemanının geri gibi bir eleman olup olmadığını. Dinamik bir sözlük ve destekler . Bir sözlüğün yaygın uygulamaları, farklı türlerde dengeli ikili arama ağaçlarını (örneğin, kırmızı siyah ağaç ) ve çeşitli karma tabloları içerir.xxInsert(x)Delete(x)

  • FindBir ADT'ye ek olarak , successor(x)sorguların desteklenmesi gerekebilir . Olduğunu, bir tuşlar kümesini korumak ve verilen anahtar en küçük anahtar bulmak, öyle ki . Ardıl ADT'yi destekleyen somut veri yapıları, çeşitli ikili arama ağaçlarını ve X hızlı trie veya van Emde Boas ağacı gibi daha karmaşık yapıları içerir (anahtarlar tamsayı ise).SxtSs<t

  • Bir Öncelik Kuyruğu , gerektiren insertve delete-minişlemler gerektiren bir ADT'dir (ve bazen find-min increase-keyveya gibi diğer işlemler delete-key). ADT öncelik kuyruğunu uygulayan veri yapıları şunları içerir:

    1. hızlı insertama yavaş olan sıralanmamış bağlantılı bir liste delete-min.

    2. hızlı delete-minama yavaş olan sıralı bağlantılı bir listeinsert

    3. logaritmik olan bir ikili arama ağacı, insertve delete-min, ve başlatma zamanı.sÖrt(n)

    4. Bir ikili yığın logaritmik sahiptir insertve delete-minve doğrusal zaman başlatma.

    5. Öbek uygulamalarının başka varyantları da vardır .

  • Bir aralık bıçaklama ADT, gerçek satırda bir dizi aralık tutar vestabbing(x) noktasını içeren (bıçak tarafından) aralıkların alt kümesini döndüren bir sorguyu destekler . Bıçaklama sorgusu ADT'yi uygulayan veri yapıları bir Segment Ağacı ve bir Aralık Ağacı içerir .x


9

Özet veri türü hangi işlemlerin kullanılabilir olduğunu ve hangi yasalara uyduklarını açıklar . Örneğin bir sözlük, belirli bir anahtarın altında bir değer depolamanıza ve bir anahtar için bir değer almanıza olanak tanır ve önce bir değeri depolayıp sonra aynı anahtarla alırsanız, geri depoladığınız değeri alacağınıza söz verir. Bir yığının itme ve pop işlemleri vardır.

Somut veri türü, bu işlemlerin gerçekte nasıl uygulandığını belirtir.


Teşekkürler! Hangi ortak veri yapısının hangisinin soyut, somut veya somut olduğunu gösteren listeler var mı?
Hepsi

Genel bir liste değil, ama xlinux.nist.gov/dads
Alexey Romanov
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.