B Ağacı, bir R ağacına kıyasla - Sadece birbirine bağlı bağlantılı listeler değil mi?


10

Bir B Ağacı'na oldukça aşinayım, özellikle veritabanlarını elektrik, klima ve sabit disk alanı ile iyi beslenmiş tutmak zorundayım. Bir çift (ikili [yani ey]?) Bağlantılı listeyle ilişkilendiriyorum.

Bugün öğle yemeğindeki geliştiricilerden biri bir R ağacından bahsetti.

Wikipedia'ya atladım ve okumaya başladım. Daha uzun bir B ağacı gibi korkunç geliyordu. Ne yazık ki, derin bir matematik geçmişine sahip olmamak, bazı iş arkadaşlarımın ne hakkında konuştuğunu anlamayı zorlaştırıyor.

Birinin bir B ağacı ile bir R ağacı arasındaki birkaç farkı açıklığa kavuşturabileceğini umuyordum. Muhtemelen adamlara yine de soracağım, ama soruma cevap vereceklerine dair bir garanti yok. Muhtemelen Tanrı hakkında ne olduğunu bilirler. . .


BTree kesinlikle çift bağlantılı bir liste gibi değildir. Bir ağaç, listelerde olduğu gibi, n ile orantılı olarak günlük (n) işlemlerine erişime izin verir.
Javier

@Javier: Bir b-ağacı indeksinin yaprak düğümleri genellikle indeks düğümlerinin hızlı bir şekilde alınmasını sağlamak için iki kat bağlantılı bir listedir.
Ürdün

1
Tamamen teknik bir soru olarak, bu StackOverflow'a aittir (lütfen orada tekrar göndermeyin, burada kapatmak için yeterli kişi oy verirse otomatikleştirilecektir).
Péter Török

1
Bu konu ile ilgili: Programcılar.SE, programlama ile ilgili kavram soruları içindir. Yığın Taşması, gerçekten yardıma ihtiyacınız olan koda sahip olduğunuz zaman içindir.

2
@Peter Torok: Eski sistem altında, bu bir SO sorusu olurdu. Ama şimdi bu site var.
surfasb

Yanıtlar:


7

Bir R Ağacı, bir b ağacının genelleştirilmesi olarak düşünülebilir. Bir b-ağacının içerdiği tuşların "sınırlı aralığı" üzerinden O (log n) erişimi sağladığı durumlarda, R Ağacı içerdiği tuşların "K boyutlu bölgesi" üzerinden O (log n) erişimi sağlar.

Posta kodlarını ilçe adlarıyla eşleştirmek istiyorsanız, "60000 ile 61000 arasında posta kodlu ilçelerin tümü nedir?" Diye sorabileceğiniz için B-Ağacı kullanabilirsiniz. Bununla birlikte, bir B-Ağacı, yalnızca tek bir boyutta anahtarlarını sipariş ettiğinden, "Chicago'nun 100 mil içindeki ilçelerin tümü nedir?" Bir R-Tree, üst üste gelen sınırlama kutularına göre anahtarlarını parçalara ayırır ve bu nedenle birden çok boyutta sorgulama yapmanız gerektiğinde anahtarları depolamanın doğal bir yoludur.


Benzetmeyi seviyorum.
surfasb

1
Bir benzetmeden daha somut bir örnek, Tam olarak bu dizin algoritmalarının nasıl kullanıldığı.
SingleNegationElimination

6

Listenin nasıl oluşturulduğunu (özellikle, öğelerin nasıl eklendiğini ve kaldırıldığını ve varsa düğümlerin nasıl yeniden dengelendiğini) göz ardı ettiğiniz sürece, ağaç yapılarının çoğu bağlantılı listeye indirgenebilir. Temel olarak bir veri yapısını diğerinden ayıran ekleme / silme / alma algoritmasıdır.

Bir R-Ağacındaki düğümler genellikle belirli bir konumun "yakınında" kayıtları aramak için ihtiyaç duyabileceğiniz için konumları etkili bir şekilde endekslemenizi sağlayan bir sınırlama kutusu içerir. Bir B Ağacındaki elemanlar daha basit bir sıralamaya sahiptir; bir şeyin başka bir öğeden büyük veya ona eşit olup olmadığını doğrudan karşılaştırabilirsiniz. Bir R-Ağacında, her bir girişin amacı sınırlayıcı bir kutuda hangi elemanların bulunduğunu belirlemektir.

Bir B-Ağacı, ikincil bellekteki (sabit disk gibi) veya isteğe bağlı öğeleri verimli bir şekilde aramanıza olanak tanır ve R-Tree, belirli bir noktaya veya sınırlama kutusuna "at" veya "yakın" öğeleri de etkin bir şekilde aramanıza olanak tanır. ikincil bellekte.


R ağacı, eleman sayısı arttıkça ayrımını göstermeye başlıyor gibi görünüyor, değil mi? Yoksa bu biraz fazla mı basitleştirilmiş?
surfasb

Benzer sayıda düğüm verildiğinde, yaprak olmayan düğümlerdeki sınırlama kutusu verilerinin doğrusal maliyeti dışında alan kullanımında belirli bir fark görmeyeceğinizi düşünüyorum. Ancak, sınırlayıcı kutuları bir B-Ağacı'nın geleneksel tanımında verimli bir şekilde temsil edemezsiniz, bu nedenle, bir B-Ağacı'nda uzamsal bilgileri temsil etmeye çalışırsanız kesinlikle çok daha fazla alan kullanırsınız. R-Ağacı uzamsal ilişkiler içindir, B-Ağacı yalnızca tek boyutlu sıralamayı destekler.
11:32

2
@JasonTrue: Aslında, B-Tree indeksleme için sınırlayıcı kutuları doğrusallaştırmanın etkili yolları vardır: en.wikipedia.org/wiki/Geohash . Hashler "verimli" olmasına rağmen, özellikle uygun değildir. Rastgele bir sınırlayıcı kutu sorgusu, 2 boyutlu bir alan için 9 ayrı sorgu alacaktır ve kutu büyük bir eksene (örneğin, Uluslararası Tarih Çizgisi) çakışıyorsa, sorgu sayısı iki katına veya dört katına çıkabilir ve kullanımı çok külfetli hale gelir. Buna rağmen, lineer indekslerin mevcut tek tür olması hala bir seçenektir.
SingleNegationElimination
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.