Metainformationen zur Seite
  •  

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
informatik:algorithmisch:python:binaerbaeume [2024/07/20 14:08] – [Grundbegriffe] technikinformatik:algorithmisch:python:binaerbaeume [2024/07/21 07:33] (aktuell) – [Kanten und Gewicht] technik
Zeile 23: Zeile 23:
 </file> </file>
  
-Ein Binärbaum besitzt immer zwei Blattknoten an einem übergeordneten Knoten. Bei einem vollständigen Binarbaum sind zum alle Ebenen komplett ausgefüllt: +Normalerweise trägt ein Knoten nicht nur Information darüber, welche anderen Knoten mit ihm verbunden sind, sondern speichert zusätzlich Daten. Das werden wir weiter unten bei den Gewichten von Kanten noch in einer Anwendung sehen
-{{ :informatik:algorithmisch:python:binary_full-tree.png?direct&400 |}} +
  
- +==== Spezialfall Binärbäume ====
  
 +Ein Binärbaum besitzt immer zwei Blattknoten an einem übergeordneten Knoten. Bei einem vollständigen Binärbaum sind zum alle Ebenen komplett ausgefüllt:
 +{{ :informatik:algorithmisch:python:binary_full-tree.png?direct&400 |}}
  
 +Alle denkbaren Bäume (mit z.B. mehr Blättern pro Knoten) lassen sich durch Umhängen von Knoten zu einem Binärbaum umformen, der jedoch dann nicht immer vollständig ist. 
 +{{ :informatik:algorithmisch:python:binary_transformation.png?direct&600 |}}
 +
 +==== Kanten und Gewicht ====
 +Eine Kante kann ein Gewicht bekommen, das z.B. angibt, wie wahrscheinlich es ist, dass Daten, die in einem Baum gespeichert sind, aufeinander folgen.
 +{{ :informatik:algorithmisch:python:tree_data_weight.png?direct&400 |}}
 +Auf diese Weise könnte in einem Sprachmodell hinterlegt sein, wie wahrscheinlich es ist, welches Wort auf den Satzanfang "Es" folgt. Hier einmal ein Beispielimplementierung für den letzten Baum. Die Knoten werden als zusätzliche Erweiterung in einer Liste **nodes[]** organisiert, damit man bei der Implementierung besser durch den Baum "scannen" (Fachwort: **traversieren**) kann. . 
 +
 +<file python treedataweighted.py>
 +class Node:
 +    def __init__(self, data) -> None:
 +        self.left = None
 +        self.right = None
 +        self.leftweight = 0
 +        self.rightweight = 0
 +        self.data = data
 +
 +# Liste für die Knoten des Baumes anlegen
 +nodes[]
 +
 +# Knoten anlegen
 +nodes[0] = Node("Es")
 +nodes[1] = Node("war")
 +nodes[2] = Node("kam")
 +
 +# Knoten verbinden
 +nodes[0].left = nodes[1]
 +nodes[0].right = nodes[2]
 +
 +# Gewichte der Kanten setzen
 +nodes[0].leftweight = 8
 +nodes[0].rightweight = 5
 +</file>
 ==== Ein kleines Sprachmodell ==== ==== Ein kleines Sprachmodell ====
 Hier sehr ihr ein Beispiel für ein "Sprachmodell", welches Märchenanfänge generiert und von all dem Gebrauch macht, was wir bisher über Binärbäume besprochen haben. Alle wesentlichen Aktionen, die in großen Sprachmodellen stattfinden, lassen sich hier erleben, z.B. dass immer Interaktion mit Menschen notwendig sind, um ein Sprachmodell zu optimieren.  Hier sehr ihr ein Beispiel für ein "Sprachmodell", welches Märchenanfänge generiert und von all dem Gebrauch macht, was wir bisher über Binärbäume besprochen haben. Alle wesentlichen Aktionen, die in großen Sprachmodellen stattfinden, lassen sich hier erleben, z.B. dass immer Interaktion mit Menschen notwendig sind, um ein Sprachmodell zu optimieren.