Hash Tables üzerinde İkili Arama Ağaçları Avantajları

oy
81

karma tablolar üzerinde ikili arama ağaçları avantajları nelerdir?

Hash tabloları Teta (1) zaman içinde herhangi bir elemanını bakabilirsiniz ve bir öğe eklemek gibi kolaydır .... ama tersi oluyor avantajlardan emin değilim.

Oluştur 08/11/2010 saat 23:06
kaynak kullanıcı
Diğer dillerde...                            


20 cevaplar

oy
70

İkili ağacın biri "avantajı" sırayla tüm unsurları kapalı listelemek için gidilebileceğini olmasıdır. Bu Hash tabloyla imkansız değil ama bir karmayı yapısına normal bir operasyon tek tasarım değildir.

Cevap 08/11/2010 saat 23:11
kaynak kullanıcı

oy
9

(Onlar hiç takılı olsun ya da olmasın), bir ikili arama ağacı sadece ihtiyacı kadar büyük olacak henüz eklenecek olan elemanların hazır yuvası olacak - bu ilk oluşturulduğunda hashtable'a daha fazla yer alacağını olmak. Bir karma-tablo fazla oda ihtiyaç duyduğunda Ayrıca, başka yapıya genişleyen olabilir zaman alıcı olabilir, ama bu uygulamaya bağlı olabilir.

Cevap 08/11/2010 saat 23:11
kaynak kullanıcı

oy
76

İkili Arama Ağaçları (referans bazlı) bellek verimli olduğunu unutmayın. onlar için gerekenden daha Onlar daha fazla bellek ayırmak gerekmez.

Bir hızlı arama fonksiyonu bir dizi vardır Örneğin, R(h) = 0...100o zaman sadece 20 elemanları karma bile, 100 (işaretçiler yapılır) elemanlarından oluşan bir dizi tahsis etmek gerekir. Aynı bilgileri depolamak için bir ikili arama ağacı kullanacak olursak, yalnızca kadar gerektiği şekilde boşluk yanı sıra bağlantıları hakkında bazı meta tahsis edecek.

Cevap 08/11/2010 saat 23:11
kaynak kullanıcı

oy
6

Bir ikili ağaç arama ve eklemek için yavaştır, ama aslında sen sıralı bir şekilde ağacın düğümlerini yinelemek anlamına gelir infix Çapraz geçiş çok güzel bir özelliği vardır.

hepsi bellekte dağınık çünkü bir karma tablosu girdileri yineleme sadece anlamda çok yapmaz.

Cevap 08/11/2010 saat 23:13
kaynak kullanıcı

oy
8

Bir ikili arama ağacı bir ile uygulanabilecek kalıcı yeni bir ağaç döndürülür ancak eski ağaç var olmaya devam arayüzü. Dikkatle Uygulanan onların düğümlerinin en eski ve yeni ağaçlar paylaşır. Bir standart karma tablo ile bunu yapamaz.

Cevap 08/11/2010 saat 23:19
kaynak kullanıcı

oy
23

karma tablo üzerinde bir ikili ağacın ana avantajları ikili ağaç karma tabloyla size iki ek operasyonlar sen (hızlı, kolay) yapamaz sağlamasıdır

  • En yakın (en yakın yukarı / aşağı veya) (zorunlu olarak eşit değildir) bir rasgele anahtar değeri elemanı bulmak

  • sıralanmış sırada ağacın boyunca yineleme

İki bağlanır - yani sıralı düzen gerektiren şeyler yapmak kolaydır böylece ikili ağaç, sıralı bir şekilde içeriğini tutar.

Cevap 08/11/2010 saat 23:25
kaynak kullanıcı

oy
14

karma tablolar için "sabit" kat itfa edilmiş kez ise A (dengeli) ikili arama ağacı da asimptotik karmaşıklık aslında bir üst sınırdır avantajına sahiptir: Bir uygunsuz karma işlevi varsa, lineer zamana aşağılayıcı bitebileceğini , oldukça sabit bir daha.

Cevap 08/11/2010 saat 23:29
kaynak kullanıcı

oy
1

Sıralanmış bir şekilde verilere erişmek istiyorsanız, o zaman sıralanmış bir liste karma tabloya paralel olarak muhafaza edilmelidir. Buna iyi bir örnek Net Sözlük olduğunu. (bakınız http://msdn.microsoft.com/en-us/library/3fcwy8h6.aspx ).

Bu sadece yavaşlatan ekler yan etkisi yoktur, ancak b-ağacının daha belleğin daha büyük miktarda tüketir.

b-ağaç sıralanır Bundan başka, sonuçların aralıkları bulmak için, ya sendikaları veya birleştirmeleri gerçekleştirmek için basittir.

Cevap 08/11/2010 saat 23:34
kaynak kullanıcı

oy
48

Diğer tüm iyi yorumlar yanı sıra:

Genel olarak Hash tabloları daha iyi önbellek davranışlarını bir ikili ağacın kıyasla daha az bellek okur gerektiren var. Verilerinizi tutan bir referans erişebilir önce karma tablo için normalde yalnızca tek bir okuma tabi. O dengeli bir varyantı ise ikili ağaç, sırasına göre bir şey gerektirir k * lg (n) bellek bazı sabiti için okur.

bir düşman senin karma fonksiyonlu biliyorsa Öte yandan, düşman performansını ciddi biçimde engellemekle, çarpışma yapmak için karma tablosunu zorunlu kılabilir. Geçici çözüm bir aileden rastgele karma-fonksiyonunu seçmek için, ancak BST bu dezavantajı yok. karma tablo basıncı çok fazla büyür, ayrıca, sık sık enlargen ve pahalı bir işlem olabilir karma tablosunu yeniden tahsis eğilimindedir. BST burada daha basit davranış vardır ve aniden çok fazla veri tahsis ve rehashing operasyonu yapmak eğilimindedir etmez.

Ağaçlar nihai ortalama veri yapısı olma eğilimindedir. Bunlar sırasına hızlı çıkarma, ekleme ve arama bilgisi, kolayca paralel işlem için ayrılabilir, listeler olarak hareket edebilir O (lg n) . Onlar hiçbir şey özellikle de, ama onlar da herhangi aşırı kötü davranış yok.

Son olarak, BSTS uygulamak çok daha kolaydır (saf) fonksiyonel diller karma tablolar ile karşılaştırıldığında ve bunların uygulanmasını (edilecek yıkıcı güncellemelerini gerektirmeyen kalıcılık yukarıda Pascal tarafından argüman).

Cevap 09/11/2010 saat 01:01
kaynak kullanıcı

oy
-1

Karma tablo başlıca avantajı, hemen hemen tüm ops yapmasıdır ~ = O (1). Ve onun çok kolay anlamak ve uygulamak. Bu verimli birçok "mülakat sorunları" çözmek yapar. u kodlama röportaj kırmak istiyorsanız, karma tablo ile iyi arkadaş olmak ;-)

Cevap 05/04/2011 saat 00:45
kaynak kullanıcı

oy
4

BSTS da ayrıca çok kullanışlı operasyonlar olabilir O (logn) zamanında "findPredecessor" ve "findSuccessor" operasyonları (sonraki en küçük ve sonraki büyük elemanları bulmak için), sağlarlar. Hash Tablosu o zaman verimliliğinde sağlayamaz.

Cevap 20/09/2012 saat 18:55
kaynak kullanıcı

oy
1

Aynı zamanda kullanıma bağlıdır, Hash tam eşleşme bulmak için sağlar. Eğer bir aralık için sorgulamak istiyorsanız o zaman BST seçimdir. Eğer veri e1, e 2, e3 ..... tr bir sürü olduğunu varsayalım.

karma tablo ile sabit zamanda herhangi bir öğeyi bulabilirsiniz.

Eğer E41 daha büyük ve e8 daha az aralık değerlerini bulmak istiyorsanız, BST çabuk bulabilirsiniz.

Anahtar nokta, bir çarpışmayı engellemek için kullanılan karma işlevidir. Tabii ki, biz tamamen biz zincirleme veya başka yöntemlere başvurabilir ve bu durumda bir çarpışma, kaçınamaz. Bu en kötü durumda artık alım sabit zaman yapar.

Tam kez karma tablo yine tüm unsurları üzerindeki kova boyutunu artırmak ve kopyalamak için vardır. Bu BST üzerinde mevcut olmayan ek bir maliyettir.

Cevap 29/01/2013 saat 15:54
kaynak kullanıcı

oy
94

kimsenin işaret ettiği bir avantajı ikili arama ağacı verimli aralığı aramaları yapmak için izin vermesidir.

Benim fikir göstermek için, ben aşırı bir durumda yapmak istiyorum. kimin tuşları 0 5000 Ve aslında arasındadır sadece tek bir eleman olan ve anahtarları aralıkta olmayan 10000 diğer unsurları vardır tüm unsurları almak istediğini farz edelim. o cevap imkansız bir alt ağacı aramaz çünkü BST oldukça verimli aralık aramaları yapabilirsiniz.

Iken, nasıl bir karma tablo aralığı aramaları yapabilirsiniz? Ya O (n) her kova alanı yinelemek gerekiyor, yoksa yukarı ... 1,2,3,4 her olmadığını 5000'e var aramak zorunda. (Örnek tuşları ondalık sayılar olabilir ne için 0 ile 5000 arasındaki tuşları hakkında? Sonsuz kümesidir)

Cevap 11/11/2013 saat 01:05
kaynak kullanıcı

oy
0

Bir cep telefonu tasarlarken bir karma tablo bir sırasız veri yapısıdır, veri depolama için mümkün olduğu kadar çok veriyi tutmak istiyorum. Bir karma tablosu sırasız veri yapısıdır - herhangi bir belirli bir sırayla unsurlarını tutmaz anlamına gelmektedir. Bir cep telefonu adres defteri bir karma tablo kullanırsanız kesinlikle alfabetik sırada değerleri görüntülemek gerekir, çünkü Yani, o zaman değerlerini sıralamak için ek bellek gerekir - bu sonuçta bir adres defteridir. Yani, bir karma tablo kullanarak aksi depolama alanı olarak kullanılacak olurdu unsurları sıralamak için bellek ayırmak zorunda. Ama ikili arama ağacı cep telefonunda hafıza veya işlem süresi sıralama kayıtları atık gerek olacaktır, sıralanmış bir veri bir ikili arama ağacı zaten sıralanır structure.Because olduğunu. Daha önce de belirttiğimiz gibi, bir ikili ağaç üzerinde bir arama veya bir ekleme yapan bir karma tablo ile yapıyor daha yavaştır ama bir cep telefonu adres defteri neredeyse 5000'den fazla girdilerine sahip asla. Girişlerin böyle küçük bir numara ile bir ikili arama ağacı O (log (n)) kesinlikle yeterince hızlı olacaktır. Yani, bütün bu bilgiler göz önüne alındığında, bir ikili arama ağacı, bir karma tablo daha iyi bir seçimdir çünkü sen, bu senaryoda kullanmalıdır veri yapısıdır.

Cevap 26/12/2013 saat 17:40
kaynak kullanıcı

oy
0

Hash Tabloları indeksleme için iyi değildir. Eğer bir aralık için arama yaparken BSTS iyidir. Çoğu veritabanı indeksleri B + ağaç yerine Hash Tabloları kullanılmasının nedeni budur sebebidir

Cevap 05/04/2015 saat 17:34
kaynak kullanıcı

oy
4

Gönderen Kodlama Röportajı Cracking, 6th Edition

Biz dengeli bir ikili arama ağacı (BST) ile karma tablosunu uygulayabilirsiniz. Bu bize bir O (log n) verir süresini arama. artık büyük bir dizi tahsis çünkü Bunun avantajı, potansiyel olarak, daha az yer kullanıyor. Biz de bazen yararlı olabilir sırayla anahtarlar, yineleyebilirsiniz.

Cevap 29/05/2016 saat 18:47
kaynak kullanıcı

oy
-1

Sınıflar HashSet ve Tablo sırasız koleksiyonları bulunmaktadır. Bu arayüzden açık değildir (ve başka türlü olabilir) ama hash tabloları AVL ağaçları kullanarak uygulanmıştır. Bu karma kod bir dizi (daha az çarpışma) arasında modülo azaltılabilir anlamına gelir ve aynı zamanda yapılması gereken bir dizinin bir rehashing (pürüzsüz performans) olduğu anlamına gelir. Ağaçların gelince değil tam karşılaştırıcısı - onlar sırasız koleksiyonları olması yalnızca bir işlev ve hashCode işlevi eşittir tedarik anlamına gelir. Tamamen karşılaştırılabilir veya sadece eşitlik karşılaştırılabilir olup olmadığını - Bir karma tablo Tablo <K, T> ya bir ikili ağaç Ağacı <K, T> sınıfı K bağlıdır kullanıp Yani.

Dize gibi - veri türü karşılaştırılabilir karşılaştırılabilir ve eşitlik hem durumlar vardır. Bu HashSet <String> ve Set <String> hem mümkün olduğu anlamına gelir. dizeleri karma sette aramalar dizeleri sıralı bir sette aramalarına göre yaklaşık 10 kat daha hızlı olma eğilimindedir. karşılaştırıcı pahalı ise o zaman ağaçların Hashtables oranla yavaşlatmak. karşılaştırıcı (tamsayılar ve yüzen için benzeri), hızlı ise, ağaçlar karma tabloları daha hızlı çalışacaktır.

Cevap 19/08/2017 saat 03:24
kaynak kullanıcı

oy
0

Bir HashMap bir dizi birleştirici dizidir. Yani, giriş değerleri sizin dizisi kovalar içine toplanmış olur. Açık bir adresleme şeması, bir kovaya bir işaretçi var ve kova serbest boşluklar olduğu yerde bir kovaya yeni bir değer katmak her seferinde, öğrenmek. Eğer kova başında başlayacak bu- yapmak ve gösterici her seferinde artırır ve işgal olmadığını test etmek birkaç yolu vardır. Bu sondalama doğrusal olarak adlandırılır. Ardından, aşağı geri bir boş alan arıyor her seferinde ikiye katlamak veya kepçenin başında ve arasındaki farkı ikiye eklenti gibi bir ikili arama yapabilirsiniz. Bu sondalama kuadratik denir. TAMAM. Şimdi hem bu yöntemlerin sorunların ele kova sonraki kovalar taşar, o zaman to- gerektiğidir

  1. Çift her kovalar boyutu-malloc (N kovalar) Gerekli zaman fonksiyonu-/ karma değiştirin: malloc uygulanmasına bağlıdır
  2. Transferi / yeni kovalar verilerine önceki kovalar her veri kopyalama. Bu K bütün verileri temsil eden bir O (N) bir işlemdir

TAMAM. Eğer bir LinkedList kullanırsanız ama orada böyle bir sorun doğru olması gerekmez mi? Evet, bağlantılı listelerde, bu sorun yok. Her kova düşünüldüğünde bağlantılı liste ile başlar ve bir kova içinde 100 elemanlarını varsa zaman to- alacak LinkedList dolayısıyla List.add (Eleman E) sonuna ulaşmak için bu 100 elemanlarını çapraz gerektirir etmek

  1. Tüm uygulamalarda olduğu gibi bir biriktirici- Normal için eleman Hash
  2. söz konusu biriktirici- O (K) operasyonda son öğe bulmak için zaman ayırın.

LinkedList uygulamasının avantajı açık adresleme uygulama örneğinde olduğu gibi bütün kova bellek ayırma işlemini ve O (N) aktarma / kopyasına gerek kalmamasıdır.

Yani, O (K) işlemi en aza indirmek için bir yol onun değer üzerinde size dayanan kendi pozisyonunda eleman eklemek de O'dur (log (N)) ve işlemlerini bulmak nerede İkili Arama Ağacı o kadar uygulanmasını dönüştürülmesidir. Bir BST katma özelliği sıralanmış geliyor olmasıdır!

Cevap 20/08/2017 saat 23:24
kaynak kullanıcı

oy
0

İkili arama ağaçları tuşlarının üzerinde tanımlı bazı toplam sipariş (tuşlar benzerdir) varsa ve sipariş bilgilerini korumak istiyorsanız sözlüğü uygulamak için iyi bir seçimdir.

BST sipariş bilgilerini koruduğu gibi, (verimli) karma tabloları kullanarak yapılamaz dört ek dinamik set operasyonları sağlar. Bu işlemler şunlardır:

  1. Maksimum
  2. minimum
  3. halef
  4. öncel

Her TSİ işlemi gibi tüm bu işlemler O (H) zaman karmaşıklığı sahiptir. Ayrıca kayıtlı tüm tuşlar böylece sadece-sırayla ağaç geçerek anahtarların sıralanmış diziyi almak için sağlayarak BST sıralanır kalır.

Özetle, istediğiniz tüm işlemler, insert performansında (çoğu zaman) silin ve karma tablo rakipsiz sonra kaldırmak ise. Ama herhangi bir veya bir BST, tercihen bir kendini dengeleyen BST kullanmalıdır yukarıda listelenen tüm işlemleri istiyorum.

Cevap 19/05/2018 saat 16:46
kaynak kullanıcı

oy
0

Dize anahtarları ile kullanıldığında İkili arama ağaçları daha hızlı olabilir. Özellikle dizeleri uzun zaman.

az / daha hangi karşılaştırmaları kullanılarak İkili arama ağaçları dizeleri hızlı (bunlar eşit olmadığında). bir dize bulunmazsa Yani bir BST çabuk cevap verebilir. Bu bulduğunu zaman yalnızca bir tam bir karşılaştırma yapmak gerekir.

Bir karma tablosunda. Sen dize karma hesaplamak gerekir ve bu karma hesaplamak için en az bir kez tüm bayt geçmesi gerektiği anlamına gelir. Sonra tekrar, bir girdi bulunduğunda.

Cevap 13/10/2018 saat 11:32
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more