Listeler yerine arama ağaçlarını kullanarak karma


11

Ben karma ve ikili arama ağacı malzeme ile mücadele ediyorum. Aynı hash değerlerine sahip girişleri saklamak için listeler kullanmak yerine ikili arama ağaçlarının da kullanılabileceğini okudum. Ve operasyonlar için en kötü ve ortalama vaka çalışma süresinin ne olduğunu anlamaya çalışıyorum

  1. insert,
  2. find ve
  3. delete

değerlidir. ortalama vaka. Listelere göre iyileşiyorlar mı?


Doğrusal zincirleme (yani doğrusal listeler) içeren karma tabloların çalışma sürelerinin ayrıntılı bir analizine erişiminiz varsa, doğrusal listelerdeki ortalama maliyetlerin takıldığı bölümü dengeli bir arama ağacı uygulamasının ortalama durum sonuçlarıyla değiştirin. Gerisi mekanik. (Açıkçası, yardımcı olur.)
Raphael

Yanıtlar:


4

Listeler için ekleme, bulma ve silme sırasıyla , , . Sıralama listesi daha kötüdür. İkili aramanın kendisi, işlemlerin , , olduğu sıralı diziler içindir . "Ekleme" ve "silme" işlemleri istiyorsanız, ikili aramadan daha fazlasına ihtiyacınız vardır.O(1)O(n)O(n)O(n)O(logn)O(n)

Muhtemelen ikili arama ağaçları gibi bir şey istersiniz . Uygun terminolojiye sahip olduğunuzda bu konuda referanslar bulmak çok daha kolaydır. Bu işlemler, örneğin AVL ağaçları ve kırmızı-siyah ağaçları kullanan uygulamalar için en kötü zaman dilimindedir .O(logn)


1
Hepsi doğru, ama sorulan soruya nasıl cevap verdiğini göremiyorum.
rgrig

Aynı soru değildi hiç zaman. (Düzenleme geçmişinin bile orijinal sorusu yok. Tuhaf.) Cevabımı güncelleyebilirim, ancak Gilles'in gereksiz hale gelirdi.
jmad

4

En kötü durumda, yalnızca aynı karma değerlerine sahip öğeleri depolarsanız, karma tablosu her öğeyi aynı grupta depolar. Bir grubun öğelerini saklamak için listeler kullanırsanız, arama en kötü durumda olur (burada tablodaki öğe sayısıdır - daha genel olarak , en büyük gruptaki öğe sayısıdır), çünkü tabloda bulunmayan bir öğeyi arıyorsanız tüm listeyi gözden geçirmeniz gerekir. Pozitif arama (öğenin mevcut olduğunu bildiğiniz yerde) aynı karmaşıklığa sahiptir: listenin son öğesini arıyorsanız . Silme işlemi aynı karmaşıklığa sahiptir ( gerekirO(n)nnn1=Θ(n)n1son öğeyi siliyorsanız, aramalar). Varolan bir öğeyi denetlemeniz gerekiyorsa ekleme de veya yinelemelere izin verirseniz (bu durumda öğeyi listenin başına ekleyebilirsiniz).O(n)O(1)

İle dengeli ikili arama ağaçları, en kötü durum karmaşıklığı düşürülür dengeli bir arama ağacının derinliği dengeleme tanımından ağacının boyutu logaritmik büyür, çünkü.O(logn)

Ortalama veri dağılımı ile, elemanlar farklı kovalara yayılır ve çok az çarpışma vardır, bu nedenle çarpışma durumunda kullanılan veri yapısından bağımsız olarak karmaşıklık yakındır .O(1)

Tüm öğenin aynı grupta yer aldığı, ters olarak seçilen bir veri dağılımında rastgele aramalarla, geçilmesi gereken ortalama liste uzunluğu , bu nedenle bu durumda ortalama arama karmaşıklığı . Bir ağaçta, en kötü durumda ortalama .nn/2Θ(n)Θ(logn)


2
"verilerin ortalama dağılımı ile" yeterince rasgele bir karma işleviyle "
okunmalı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.