Hallo,
Ich stehe vor einem Problem.
Derzeit arbeiten wir wieder mit Ada95 (Delphi sehr ähnlich) und sollen in einer größeren Aufgabe einen String in einen Huffman-Baum verwandeln. Die "Blätter" jenes Baumes beinhalten jeweils einen Character und die zugehörige Häufigkeit (wie oft das Ding im String vorkommt). Der Baum selbst ist nicht gleichmäßig aufgebaut.
Im AdaCode sieht der Baum wie folgt aus:
Zur Erklärung, was hier passiert. Es wird zunächst ein nutzbarer Pointer erzeugt (siehe Kommentar), um damit den Baum rekursiv aufzubauen (left und right verweisen wieder auf einen solchen baum).
Man könnte es mit einem Objekt in Java vergleichen(!), wobei unser Ansatz hier nicht objektorientiert, sondern imperativ sein soll.
Im Laufe meines Programms werden mehrere HuffmanTrees erzeugt und später zu einem großen HuffmanTree zusammengefügt. Wie das ganze aussieht, ist jetzt hinfällig, da es gut 100 Zeilen Code beansprucht.
Mein Problem ist jetzt, dass ich eine Function schreiben soll, die die Breite eines solches Baumes berechnet... leider habe ich absolut keinen Ansatz
bisher implementierte Funktionen (Ada unterscheidet im gegensatz zu Java noch in Functions und Procedures). Alle hier wurden von mir gestest und funktionieren... wer sie sich sparen will, kann den teil auch überspringen - ist nur für denn fall, dass man eine der funktionen dafür nutzen könnte.
nun stehe ich hier und weiß nicht, wie ich es schaffen sollen, die breite des baumes rekursiv zu bestimmen -.- - kann mir da einer einen Ansatz nenne, wie ich die Breite eines ungleichmäßigen Baumes rausbekomme?
liebe Grüße
Moch
Ich stehe vor einem Problem.
Derzeit arbeiten wir wieder mit Ada95 (Delphi sehr ähnlich) und sollen in einer größeren Aufgabe einen String in einen Huffman-Baum verwandeln. Die "Blätter" jenes Baumes beinhalten jeweils einen Character und die zugehörige Häufigkeit (wie oft das Ding im String vorkommt). Der Baum selbst ist nicht gleichmäßig aufgebaut.
Im AdaCode sieht der Baum wie folgt aus:
Code:
type HuffmanTreeNode;
type HuffmanTree is access HuffmanTreeNode; -- erzeugt einen Pointer
type HuffmanTreeNode is record
Char: Character;
Count: Natural;
Left: HuffmanTree;
Right: HuffmanTree;
end record;
Zur Erklärung, was hier passiert. Es wird zunächst ein nutzbarer Pointer erzeugt (siehe Kommentar), um damit den Baum rekursiv aufzubauen (left und right verweisen wieder auf einen solchen baum).
Man könnte es mit einem Objekt in Java vergleichen(!), wobei unser Ansatz hier nicht objektorientiert, sondern imperativ sein soll.
Im Laufe meines Programms werden mehrere HuffmanTrees erzeugt und später zu einem großen HuffmanTree zusammengefügt. Wie das ganze aussieht, ist jetzt hinfällig, da es gut 100 Zeilen Code beansprucht.
Mein Problem ist jetzt, dass ich eine Function schreiben soll, die die Breite eines solches Baumes berechnet... leider habe ich absolut keinen Ansatz
bisher implementierte Funktionen (Ada unterscheidet im gegensatz zu Java noch in Functions und Procedures). Alle hier wurden von mir gestest und funktionieren... wer sie sich sparen will, kann den teil auch überspringen - ist nur für denn fall, dass man eine der funktionen dafür nutzen könnte.
Code:
--Erzeugt ein Array, das jedem Character eine Häufigkeit zuweist
function countCharFrequency(stringToCount String : String) return Frequency_Array;
--Erzeugt ein Array aus oben beschrieben Blättern
function createLeafArray(freqArray : Frequency_Array) Return Leaf_Array;
--Fügt einen HuffmanTree in eine verkettete Liste ein (arbeitet mit Pointern)
function insert(treeList : HuffmanTreeList; insertTree : HuffmanTree) return HuffmanTreeList;
--Gibt das erste Element einer HuffmanTreeList zurück
function getFirst(treeList : HuffmanTreeList) return HuffmanTree;
--Löscht das erste Element einer solchen Liste (Pointer wird zu null)
function withoutFirst(treeList : HuffmanTreeList) return HuffmanTreeList;
--Vereinigt zwei HuffmanTrees zu einem
function buildTreeOfSubTrees(left: HufmanTree; right: HuffmanTree) return HuffmanTree;
--macht aus einer leaf_array eine Huffmantreelist und daraus einen großen Huffmantree
function createHuffmanTree(leafArray : Leaf_array) return huffmanTree;
--bestimmt die Tiefe eines HuffmanTrees:
function getDepth(huff : huffmantree; counter : integer) return integer;
nun stehe ich hier und weiß nicht, wie ich es schaffen sollen, die breite des baumes rekursiv zu bestimmen -.- - kann mir da einer einen Ansatz nenne, wie ich die Breite eines ungleichmäßigen Baumes rausbekomme?
liebe Grüße
Moch