Başlangıçta boş bir B + ağacına anahtarlarla kayıt nasıl girilir?


11

Kayıtları anahtarları sırayla (1, 2, 3, 4, 5) sırasıyla başlangıçtaki boş bir B + –sipariş m = 3'e girme sonucunu gösterin. Taşma durumunda düğümü bölün ve yeniden dağıtmayın Komşuların anahtarları. Daha az yükseklikte bir ağaca sahip olmak için anahtarlarla kayıtları farklı bir sırayla girmek mümkün müdür?

Gönderen Dinamik Ağaç Yapısı Kuruluşları, s.50: İlişkisel DBMS Internals bölüm 5

Ben bu konuda iyi değilim ama solda ve sağda> yapmaya çalıştım:

1,2 eklenene kadar:

resim açıklamasını buraya girin

Sonra düğümü bölmek ve komşulara anahtarları dağıtmak değil kadarıyla (son-düğüm olarak anlıyorum) sadece 2 ile hücrenin sağına yerleştirdim:

resim açıklamasını buraya girin

5 eklerken de aynısını yapmaya devam ettim:

resim açıklamasını buraya girin

Ama bu oldukça garip, hiç böyle boş düğümler görmedim ... Ve bazı çok temel B-ağaç özelliklerine saygı gösterip göstermediğini bilmiyorum:

  • bir anahtar boş değilse ve anahtarı "işaretçi" olarak anlayamadıkça, her düğümde en fazla (m-1) ve en az (⌈ (m / 2) ⌉-1) tuşları bulunur.

İlk deneme: siparişteki hata belirsiz bir ağaç ortaya çıkardı

Başlangıçta bir "düzenin" ne olduğunu yanlış anladım (düğüm başına maksimum çocuk sayısı). Bu yüzden bir düğümün üç boşluğu olabileceğini düşündüm (ve bu nedenle 4 çocuk. 4. sıradan bir ağaç oluşturduğumu düşünüyorum:

1,2,3 eklenene kadar:

resim açıklamasını buraya girin

Düğümü bölmek ve anahtarları komşulara (çelişkili gibi görünüyor) yeniden dağıtmamak için 4'ün eklenmesi, 3'ten sonra sağ yaprak üzerinde 1,2,3 ve 4,5'e izin verirdim:

4 ve 5'i ekledikten sonra 3 numaralı B ağacı

Yanıtlar:


6

Sayfa oluşturma işleminizi baş aşağı yaptığınızı düşünüyorum. Bir düğüm böler zaman daha fazla düğüm yaratmaz aşağı (sizin terminolojideki oğul düğümleri) hiyerarşi. Bunun yerine köke doğru daha yukarı doğru oluşturur . Kitabın dediği gibi

Büyümenin ağacın üstünde olduğunu ve bu, her zaman tüm yaprakların aynı seviyede olmasını ve her düğümün kökten farklı olmasını sağlayan önemli özellikleri sağlamak için bir B ağacının kendisinin karakteristik özelliğine dikkat edin. % 50 dolu.

(Vurgu.)

Bağlantılı e-kitaptan:

Tanım 5.1 AB --- m (m ≥ 3) ağacı ... her düğüm en fazla m - 1 anahtarı içerir

Egzersiz m = 3 içindir, bu nedenle düğüm başına en fazla 2 anahtar.

İlk iki anahtar kolaydır - ilk sayfaya girerler:

A:[1,2]

ASCII sanatını kullanacağım. Her sayfayı oluşturuldukları sırayla etiketleyeceğim ve sayfadaki tuşları / işaretçileri göstereceğim. Yani k1 ve k2 anahtar değerlerini içeren P sayfası olacaktır P:[k1,k2].

Şimdi anahtar 3 geliyor. Bölüm 5.2.1 ... Yerleştirmeye göre, ilk görev aramaktır. Bu, anahtar 3'ün sahip olduğumuz tek sayfa olan A sayfasında olması gerektiğini belirler. Ayrıca "[bu düğüm] doluysa, iki düğüme bölünecektir.” Sayfa dolu olduğundan bölünmesi gerekiyor. Şimdi sahibiz

A:[1,2]    B:[3, ]

Ama bu bir ağaç değil! Kitabın dediği gibi:

[yeni düğüm], .. işaretçisi [ mevcut düğümün] baba düğümüne .. yerleştirilir, bu düğümdeki [yani baba düğüm] ekleme işlemini tekrarlar. Bu bölme ve yukarı taşıma işlemi gerektiğinde köke kadar devam edebilir ve bu bölünmesi gerekiyorsa, yeni bir kök düğüm oluşturulur.

(İşleme gösterme konusundaki vurgum, ağacı yapraklara doğru değil, köküne doğru sürdürüyor.)

Bu yüzden, yeni sayfanın (B) geçerli sayfanın (A) babasına bir işaretçi koymalıyız. Yeni bir kök düğüm olmalıdır:

      C:[2,3]
      /     \
A:[1,2]    B:[3, ]

Bir çocuk (oğul) düğümde en yüksek değere işaret eden yaprak olmayan sayfalarda işaretçiler var. Bağlantılı metniniz bunu farklı yapabilir, ancak sonuç eşdeğer olur.

Anahtar değeri 4 gelir; algoritmanın ardından hangi sayfada olması gerektiğini araştırıyoruz. Sayfa B olmalıdır. Bu nedenle, bu sayfayı ve C sayfasındaki işaretçiyi güncelleyelim:

      C:[2,4]
      /     \
A:[1,2]    B:[3,4]

Sonra anahtar 5'i ekliyoruz. B sayfasına gitmeli ama dolu. Bu nedenle

      C:[2,4]
      /     \
A:[1,2]    B:[3,4]   D:[5, ]

Baba düğümünü güncellemeliyiz. O da dolu, böylece böler:

      C:[2,4]    E:[5, ]
      /     \         \
A:[1,2]    B:[3,4]   D:[5, ]

Bölme çoğalır ve yeni bir kök düğüm oluşur:

            F:[4,5]
            /     \
      C:[2,4]    E:[5, ]
      /     \         \
A:[1,2]    B:[3,4]   D:[5, ]

Yukarı doğru büyüyerek ağaç her dalda aynı derinliği korur. Bu, öngörülebilir performans için önemlidir. (Bazıları B-Tree'deki B'nin bu nedenle "dengeli" anlamına geldiğini söylüyor.)


İkinci bölüm ise - "Daha az yükseklikte bir ağaca sahip olmak için kayıtları anahtarlarla farklı bir sırada girmek mümkün mü?" Düğüm başına 5 anahtar ve iki anahtar ile tüm değerleri tutmak için en az 3 yaprak düğümüne ve ağacı oluşturmak için 3 yüksekliğe ihtiyacımız var. Bu yüzden benim düzenlemem verilen veri, dizi ve algoritma için en uygunudur.

Kitap kullandığım şeye göre çok farklı bir işaretçi düzenlemesi ve farklı bir sayfa bölme düzenlemesi kullanıyor. Bu önemli olacak ve kısmen dolu sayfalara yol açacaktır. 42. sayfada "Veri Yükleme" adlı bir bölümün, tuş dizisi yüklenerek daha dolgun sayfalara nasıl ulaşılabileceğini gösteren bir önsezi benim kümemi destekler. Bununla birlikte, umarım size yeterli sayıda işaretçi verdim ve kitabın işaretçi yapısını kendiniz için kullanabileceksiniz.


Ben geldim bu interaktif simülasyon B-ağacı yetişir nasıl.

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.