RWTH Aachen Computer Science i5/dbis assets for Lecture Datenbanken und Informationssysteme
Project description
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()
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()
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dbis_btree-1.1.0.tar.gz.
File metadata
- Download URL: dbis_btree-1.1.0.tar.gz
- Upload date:
- Size: 14.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17174d59189acde0452c8d905add47c8497df0bfb731ecdfc58779e349942e42
|
|
| MD5 |
f77ba8e7b523aad0c5ca39ddd78e146b
|
|
| BLAKE2b-256 |
ed19bbe8f9f5615cc8cc714495bd31990a7a61b94afb3d90b2d89a15867bb0f5
|
File details
Details for the file dbis_btree-1.1.0-py3-none-any.whl.
File metadata
- Download URL: dbis_btree-1.1.0-py3-none-any.whl
- Upload date:
- Size: 11.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98ce9dbfa8a7f3cf4eca6b468b642d98946dc79c3040682ae5d3428cd75cc7b4
|
|
| MD5 |
2910d08eb55697ce86be1462d3ddaa3f
|
|
| BLAKE2b-256 |
47f46727757eb899c75db8d0258a43b980a3360366ee930da0f7024f32e7a5c7
|