Skip to main content

DBIS Informatik 5 - Informationssysteme und Datenbank

dbis-btree

Python-Tool zur Visualisierung von B-Bäumen und B+-Bäumen, entwickelt vom Lehrstuhl i5/DBIS der RWTH Aachen für die Vorlesung Datenbanken und Informationssysteme.

Im DBIS-Image des JupyterHub der RWTH ist dieses Package bereits vorinstalliert. Für eine lokale Installation:

pip install dbis-btree
# in Jupyter Notebooks:
!pip install dbis-btree

Inhaltsverzeichnis


B-Baum (BTree)

Import

from dbis_btree.BBaum import BTree

Initialisierung

Erzeugen Sie eine neue Instanz der Klasse BTree mit dem gewünschten M-Wert:

M = 4
bbaum = BTree(M)
bbaum.draw()

Knoten hinzufügen

add_node(name, elements)
Parameter Typ Beschreibung
name str | int Eindeutiger Name des Knotens
elements list Liste der im Knoten gespeicherten Werte

Der erste hinzugefügte Knoten wird automatisch als Wurzelknoten behandelt. Wird ein bereits vorhandener Name verwendet, wirft die Methode einen AssertionError.

bbaum = BTree(4)

bbaum.add_node("A", [10, 20])
bbaum.add_node("B", [1, 2])

bbaum.draw()

B-Baum Beispiel 1

Kanten hinzufügen

add_edge(parent, child, n_child)

Fügt eine Kante vom parent-Knoten zum child-Knoten ein. n_child bestimmt, an welcher Zeigerposition im Elternknoten die Kante eingehängt wird (1-basiert).

Parameter Typ Beschreibung
parent str | int Name des Elternknotens
child str | int Name des Kindknotens
n_child int Zeigerposition im Elternknoten (ab 1)
bbaum = BTree(4)

bbaum.add_node("A", [10, 20])
bbaum.add_node("B", [1, 2])

bbaum.add_edge("A", "B", 1)  # B hängt am 1. Zeiger von A

bbaum.draw()

B-Baum Beispiel 2

Weitere Methoden

Methode Beschreibung
getNode(name) Gibt den Knoten mit diesem Namen zurück, oder None falls nicht vorhanden.
getRootNode() Gibt den Wurzelknoten zurück, oder None falls kein eindeutiger Wurzelknoten existiert.
deleteNode(name) Entfernt den Knoten aus dem Baum. Gibt eine Warnung aus, falls der Knoten nicht existiert.
valueIsInBbaum(value) Gibt True zurück, falls der Wert in einem Knoten des Baums gespeichert ist.
isLeafNode(node) Gibt True zurück, falls der Knoten ein Blattknoten ist (keine Kinder).
getSibling(node, getLeft) Gibt den linken (True) oder rechten (False) Geschwisterknoten zurück.
get_leaf_nodes() Gibt eine Liste aller Blattknoten zurück.

Copy-Text generieren

Mit generate_copy_text() kann der aktuelle Zustand des Baums als ausführbaren Python-Code exportiert werden. Das ist nützlich, um einen Zwischenstand weiterzugeben oder in eine neue Zelle zu kopieren.

print(bbaum.generate_copy_text())
# Ausgabe:
# b = BTree(4)
# b.add_node('A', [10, 20])
# b.add_node('B', [1, 2])
# b.add_edge('A', 'B', 1)

B+-Baum (BplusTree)

Import

from dbis_btree.BBaum import BplusTree

Unterschiede zum B-Baum

BplusTree erweitert BTree und ergänzt die Visualisierung um die charakteristischen Eigenschaften eines B+-Baums (Verkettung der Blattknoten).

Die gesamte API (Knoten, Kanten, Hilfsmethoden, Copy-Text) ist identisch mit BTree.

Verwendung

from dbis_btree.BBaum import BplusTree

bp = BplusTree(4)

# Innere Knoten
bp.add_node("Root", [20])
bp.add_node("Inner1", [10])
bp.add_node("Inner2", [30])

# Blattknoten
bp.add_node("L1", [1, 5])
bp.add_node("L2", [10, 15])
bp.add_node("L3", [20, 25])
bp.add_node("L4", [30, 35])

# Struktur aufbauen
bp.add_edge("Root", "Inner1", 1)
bp.add_edge("Root", "Inner2", 2)
bp.add_edge("Inner1", "L1", 1)
bp.add_edge("Inner1", "L2", 2)
bp.add_edge("Inner2", "L3", 1)
bp.add_edge("Inner2", "L4", 2)

bp.draw()

Die Blattknoten L1 -> L2 -> L3 -> L4 werden automatisch mit gestrichelten Kanten verbunden.

generate_copy_text() funktioniert auch für BplusTree und gibt den korrekten Klassennamen aus:

print(bp.generate_copy_text())
# b = BplusTree(4)
# ...

Häufige Fehler

Warning: node A, port f6 unrecognized

Der Parameter n_child in add_edge ist ungültig. Ein Knoten mit M=4 hat die Zeigerpositionen 1 bis 5. Eine Position außerhalb dieses Bereichs führt zu dieser Warnung.

AssertionError: Bitte nutze einen anderen Namen für diese Node.

Es wurde versucht, einen Knoten mit einem bereits vorhandenen Namen hinzuzufügen. Jeder Knoten benötigt einen eindeutigen Namen.

UserWarning: Node ID: X does not exist.

deleteNode wurde mit einem Namen aufgerufen, der im Baum nicht vorhanden ist.

Metadata

Release files for dbis-btree 1.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dbis-btree 1.1.2
File Size Uploaded
dbis_btree-1.1.2.tar.gz 15.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dbis-btree 1.1.2
File Interpreter ABI Platform
dbis_btree-1.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 27.0 kB

Release files / dbis_btree-1.1.2.tar.gz

Download URL dbis_btree-1.1.2.tar.gz
Size 15.5 kB
Tags Source
SHA-256 checksum
How to use checksums
0ad74f00cc895655737f9d70630c9e474338a6daabdede86091bff9136733b18
BLAKE2b-256 checksum
How to use checksums
57714ada735c371f3cc06d9d3817913938d08f6c5a819c72f05ae9d7e16204c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.13

Release files / dbis_btree-1.1.2-py3-none-any.whl

Download URL dbis_btree-1.1.2-py3-none-any.whl
Size 11.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2158235cf6a07cba0410aebe5b3bbfe89a61f8ca735bc466f6d36894ecbd40f8
BLAKE2b-256 checksum
How to use checksums
5832a4510c7b55527970246519a37ef85ee87330341edeeae23449dc0e75a220
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.13

Release history Release notifications | RSS feed

This release

1.1.2 This release

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.0

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page