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.1.tar.gz (14.9 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.1-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for dbis_btree-1.1.1.tar.gz
Algorithm Hash digest
SHA256 1a0e5ca444307095fe48113772916af656b669fd8fc2ab59d6c9366e46655521
MD5 7d7cc9ae78d17bb5102242ef18c41905
BLAKE2b-256 621884a8ab89781b8858902aa2ba8d8392f75c50b9bef9ff37d5c8d61e5c7a17

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for dbis_btree-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9f466796ca5d7c370dd4fcc9f18807a9fbded012c9d37e3f9085d430c43c8be8
MD5 dce9c311dbcfca5814dd0b4c8946f840
BLAKE2b-256 9a571cabd43fefa70ade27296fd17d12adceaf995d6056c49145345b571d2362

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