Neden İkili arama ağaçları?

oy
6

Ben ikili arama ağacı okuyordu ve neden hiç BST gerekiyor düşünüyordum? Tüm işler olarak bildiğim kadarıyla da basit sıralı diziler kullanılarak elde olabilir. Eg için - n elemanlara sahip bir BST inşa etmek amacıyla, ihtiyaç n*O(log n)zamanı ie O(nlog n)ve arama zamanı O(log n). Ama bu şey de diziyi kullanarak elde edilebilir. Biz sıralanmış dizisi (gerektirir olabilir O(nlog n)o da zaman) ve arama zamanını O(log n)ikili arama algo yani. Öyleyse neden hiç başka bir veri yapısını ihtiyacım var? Onları çok özel kılmak BST başka bir amaçla kullanılması / uygulama var mı?

--Ravi

Oluştur 14/10/2010 saat 16:28
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
4

Nasıl sıralanmış yerleştirme süresi hakkında?

Cevap 14/10/2010 saat 16:30
kaynak kullanıcı

oy
1

Grafik programda sayfa onlar tamamen sığacak bir ikili ağacı (tipik olarak bir octree) en küçük seviyeye ekleyebilirsiniz (her boyutta bir aralık temsil ve sadece bir nokta yani) nesne genişletilmiş varsa.

Ve liste halinde O (n) rastgele yerleştirme zaman SortedList ağaç / pre-hesaplamak yoksa engelleyici yavaş olabilir. Öte yandan ağaçta Ekleme zamanı sadece O (log (n)) 'dir.

Cevap 14/10/2010 saat 16:36
kaynak kullanıcı

oy
9

Diziler bir kez yazma bahsediyorsak, etkileşimlerin birçok kez türünü okumak mükemmeldir. aşağı takas, ekleme olsun zaman, ve silme hangi BST gerçekten bir diziye kıyasla parlamaya başlar. onlar düğüm tabanlı yerine bellek bitişik yığın dayalı olduğundan beri, koleksiyonuna veya koleksiyonunun dışarı ya unsurunu hareketli maliyeti hala koleksiyonun sıralı yapısını sürdürme hızlı ederken olduğunu.

Eğer diziler karşı bağlantılı listeler arasında yerleştirme farkı olduğu gibi düşünün. Bu bir basitleştirme ama yukarıda not ettik avantajın bir yönünü vurgular.

Cevap 14/10/2010 saat 16:53
kaynak kullanıcı

oy
7

Bir milyon elemanlı bir dizi var düşünün.

Sen konumda 5 de bir öğe eklemek istiyorum.

Yani dizinin sonunda ve daha sonra sıralama takın.

adlı dizi dolu diyelim; Bu 1,000,000 * 6 = 6.000.000 işlemleri, O (nlog n) bulunuyor.

Eğer dengeli bir ağaç olduğunu varsayalım.

Yani O (log n), artı dengeleme için biraz = 6 + biraz o 10 operasyonları diyoruz.

Yani, sadece dizi sıralama 6.000.000 op harcadım. Daha sonra istediğiniz bulmak o öğeyi. Ne yaparsın? ikili arama - O (log n) - olduğu tam olarak size ağacında ararken yapacağız Ne ile aynı!

Şimdi -another- eleman tahsis etmek istiyorum düşünün.

Kişisel dizi dolu! ne yaparsın? n ekstra öğelerle dizi yeniden tahsis ve çok memcpy? Eğer gerçekten 4mbytes memcpy istiyor?

Bir ağacında, sadece başka öğesi ekleyin ...

Cevap 16/10/2010 saat 10:14
kaynak kullanıcı

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