diff --git a/P3/main.py b/P3/main.py index 548822f..c2df937 100644 --- a/P3/main.py +++ b/P3/main.py @@ -3,7 +3,7 @@ import math ELEMENTS = [] INTERVALLS = [] -N = 32 # länge eines Codeworts +N = 8 # länge eines Codeworts class Element: @@ -19,10 +19,10 @@ class Element: def find_element(list, target_it): - for element in list: + for i, element in enumerate(list): if element.id == target_it: - return element - return None + return i, element + return None, None def read_text_file(): @@ -39,34 +39,33 @@ def Z_statistik(message): m = len(message) - elements = [] + global ELEMENTS for char in message: - entry = find_element(elements, char) + i, entry = find_element(ELEMENTS, char) if entry is not None: entry.count += 1 else: - elements.append(Element(char)) + ELEMENTS.append(Element(char)) - return calculate(elements, m, message) + calculate(m, message) -def calculate(elements, m, message): +def calculate(m, message): + global ELEMENTS h = 0 - for element in elements: + for element in ELEMENTS: element.p_x_i = element.count / m element.I_x_i = -1 * math.log2(element.p_x_i) h += element.p_x_i * element.I_x_i # Ausgabe - elements.sort(key=lambda element: element.count, reverse=True) + ELEMENTS.sort(key=lambda element: element.count, reverse=True) """for element in elements: print(f"{element.count:3.0f} | {element.p_x_i:10.7f} | {element.I_x_i:10.7f} | »{element.id}«") print("Entropie = " + h.__str__() + "\n\n")""" - return elements - # --- Aus P1 --- @@ -79,7 +78,7 @@ def charToBin(): def calcBitCount(block): p = 1 for char in block: - element = find_element(ELEMENTS, char) + i, element = find_element(ELEMENTS, char) p *= element.p_x_i N = round(-math.log(p), 0) @@ -108,17 +107,56 @@ def createBlocks(message): block.append(char) else: blocks.append(block) - block = [] + block = [char] + + blocks.append(block) + # TODO EOF Symbol setzen und auf Länge des Blocks dabei achten return blocks + def createCodeWord(block): + intervalls = [] - intervall = [] - for char in block: - # zeichen für zeichen durch das aktuelle arbeitsintervall wandern und nach jedem Schritt eine Neuberechnung im neuen Teilintervall vornehmen + i, element = find_element(ELEMENTS, block[0]) + print(element.id) + + if i == 0: + low = 0 + else: + low = INTERVALLS[i - 1] + high = INTERVALLS[i] + range = high - low + + # Normierung + for i, element in enumerate(ELEMENTS): + new_high = low + range * element.p_x_i + intervalls.append((low, new_high)) + low = new_high + + print(intervalls) + for char in block[1:]: + i, element = find_element(ELEMENTS, char) + print(element.id) + + low, high = intervalls[i] + + range = high - low + + intervalls = [] + + for i, element in enumerate(ELEMENTS): + new_high = low + range * element.p_x_i + intervalls.append((low, new_high)) + low = new_high + + print(intervalls) + + low, x = intervalls[0] + x, high = intervalls[-1] + print(f"[{low}, {high})") def AC_Encoder(): @@ -130,16 +168,16 @@ def AC_Encoder(): l_bin = l * 8 - ELEMENTS = Z_statistik(message) - charToBin() + Z_statistik(message) + # charToBin() # unnötig, da nur das Codewort in binär umgewandelt werden muss calcIntervalls() + # INTERVALLS = [0.1, 0.8, 1] blocks = createBlocks(message) + print(INTERVALLS) - - - print(blocks) + createCodeWord(blocks[0]) AC_Encoder() diff --git a/P3/text.txt b/P3/text.txt index cf762bd..9748b0f 100644 --- a/P3/text.txt +++ b/P3/text.txt @@ -1 +1 @@ -Die Geschichte Korsikas im Altertum ist, obwohl die Insel nie als wohlhabend galt, von Kämpfen um die Vorherrschaft durch fremde Mächte geprägt. Eine erste Besiedlung der Insel ist für das 8. Jahrtausend v. Chr. nachgewiesen. Die Nachfolger der neolithischen Kulturen konnten ihre Traditionen zwar noch bis weit in die römische Herrschaftszeit aufrechterhalten, doch interessierten sich bereits vor den Römern Etrusker, Phönizier und Karthager, Griechen und nach ihnen Vandalen, Byzantiner und Sarazenen für die Insel. Für die größeren Reiche hatte Korsika vor allem als Stützpunkt im Mittelmeer strategische Bedeutung. Im 6. Jahrhundert v. Chr. begann unter dem Einfluss der Karthager eine Verstädterung auf der Insel. Konnte der Versuch einer griechischen Kolonisation noch im selben Jahrhundert mit dem zentralen Element der Gründung der Stadt Alalia zunächst von den Karthagern verhindert werden, übernahmen zu Beginn des folgenden Jahrhundert die Etrusker die Kolonialisierung. Im 4. Jahrhundert v. Chr. gab es einen letzten griechischen Versuch, die Insel zu gräzisieren, doch scheiterten sie erneut. Von nun an rückte die Insel immer mehr ins Blickfeld Roms, das schon gegen Ende des 5. Jahrhunderts v. Chr. mit der Gründung einer eigenen Kolonie zunächst gescheitert war. Dennoch geriet Korsika immer mehr in die römische Einflusssphäre und ab 259 v. Chr. wurde sie schließlich erobert. Nach Sicilia wurde Korsika im Verbund mit Sardinien die zweite römische Provinz, Sardinia et Corsica. Einzig während der Bürgerkriege passierten auf Korsika einige Dinge, die auch von überregionaler Bedeutung waren. So war die Insel längere Zeit im Machtbereich und eine Operationsbasis von Sextus Pompeius. Mit dem Beginn der Kaiserzeit wurde Sardinia et Corsica eine senatorische Provinz, was ihre relative Bedeutungslosigkeit aufzeigt. Keine Legionen waren hier stationiert, äußere Feinde drohten nicht und auch die Versorgung der Stadt Rom hing nicht von der Insel ab. Selbst die Reformen des Diokletian gegen Ende des 3. Jahrhunderts änderten nichts am korsischen Status. Erst im frühen 5. Jahrhundert eroberte mit den Westgoten erstmals eine fremde Macht seit mehr als 650 Jahren die Insel. Nachdem auch die Vandalen und Ostgoten kurzzeitig die Insel übernommen hatte, konnten in den 530er Jahren die Oströmer (Byzantiner) sie zurückgewinnen. 40 Jahre später besetzten die Langobarden strategisch wichtige Küstengebiete, das Innere blieb jedoch byzantinisch. Mittlerweile hatte sich die Kirche als der eigentliche Rückhalt der Bevölkerung etabliert. Bis weit ins Frühmittelalter war Korsika nun Spielball äußerer Mächte. \ No newline at end of file +SWISS \ No newline at end of file