Skip to main content

RWTH Aachen Computer Science i5/dbis assets for Lecture Datenbanken und Informationssysteme

Project description

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dbis_btree-1.1.2.tar.gz (15.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dbis_btree-1.1.2-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file dbis_btree-1.1.2.tar.gz.

File metadata

  • Download URL: dbis_btree-1.1.2.tar.gz
  • Upload date:
  • Size: 15.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for dbis_btree-1.1.2.tar.gz
Algorithm Hash digest
SHA256 0ad74f00cc895655737f9d70630c9e474338a6daabdede86091bff9136733b18
MD5 75f85b6849eeeca9436886f74b960037
BLAKE2b-256 57714ada735c371f3cc06d9d3817913938d08f6c5a819c72f05ae9d7e16204c8

See more details on using hashes here.

File details

Details for the file dbis_btree-1.1.2-py3-none-any.whl.

File metadata

  • Download URL: dbis_btree-1.1.2-py3-none-any.whl
  • Upload date:
  • Size: 11.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for dbis_btree-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2158235cf6a07cba0410aebe5b3bbfe89a61f8ca735bc466f6d36894ecbd40f8
MD5 9f613fd134f35640c8c7d69275a4ffa0
BLAKE2b-256 5832a4510c7b55527970246519a37ef85ee87330341edeeae23449dc0e75a220

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page