Automat: Abstraktes Modell zur Prüfung v Zeichenketten (Mealy

Werbung
1 2 4 8 16 32 64 128 254 512 1024 0,5 0,125 0,0635
10=A 11=B 12=C 13=D 14=E 15=F
Notwendige Stellen für Z in B: n= logB (Z)
logB(Z)= log Z /log B
4bit=eine Hex-Stelle 3bit=eine Oktalstelle
Binär: Subtraktion = Addition mit 2erKomplement und invertieren des MSB
GKZ 32bit: 1bit VZ, 8bit Exponent, 23bit Mantisse (führende 1 nicht aufschreiben!)
Umrechnung GK . Dezimalzahl
1. Dezimalzahl als Festkommazahl binär berechnen (die Anzahl der
Nachkommastellen ist immer beschränkt !)
2. Das Komma solange nach links oder rechts verschieben, bis die
Festkommazahl mit „1,“ beginnt.
Bei jedem Verschieben um eine Stelle den Exponenten anpassen
3. Den Exponenten in die Charakteristik umrechnen
4. Die Charakteristik als Binärzahl darstellen
5. Die einzelnen Binärzahlen zu einer Gleitkommazahl zusammensetzen
(Daslinke Bit ist das Vorzeichen!)
Gleitkommazahlen - Rechnen
. Addition / Subtraktion
1. Exponent anpassen . Auswirkung auf die Mantisse beachten!
2. Operation auf die Mantissen ausführen
3. Normalisieren der Ergebnis-Mantisse . Auswirkung auf Exponent!
. Multiplikation / Division
1. Exponenten addieren/subtrahieren, Offset berücksichtigen
2. Operation auf die Mantissen ausführen
3. Normalisieren der Ergebnis-Mantisse . Auswirkung auf Exponent!
. Die Operation auf die Mantisse ist annähernd gleich zum Rechnen mit
Ganzzahlen
Bool'sch Algebra
„und, konjunkt“: a ^ b, a*b
„oder, disjunkt“: a v b, a + b
bei n Variablen 2^2^n mögliche Verknüpfungen
DNF: ( * * *) + ( * * *) +( * * *) Terme mit f=1 aus Wertetabelle
a + (b · c) = (a + b) · (a + c) Distributiv
a · a = a a + a = a Idempotenz
KNF: (+ + +) * (+ + +) * (+ + +) Terme mit f=0 aus Wertetabelle, Variablen negieren
-a · a = 0 -a + a = 1 Komplementäre
a·(a+b) = a a+(a · b) = a Absorbtion
In jedem Term müssen alle Variablen vorkommen!
___ _ _
___ _ _
KV-Diagramm aus DNF!!!!
a+b=a*b
a*b =a+b
Automat: Abstraktes Modell zur Prüfung v Zeichenketten (Mealy Zeichenausgabe bei Zustandsübergang/Morre Ausgabe im
Zustand)
endlicher Automat: endliches Eingabealphabet
Determinissmus: Eindeutigkeit der Zustandsübergänge
Kellerautomat: EA mi Keller Speicher
Turingmaschiene: Modell zur Beurteilung der Berechenbarkeit -->EA mit Schreib/Lesespeicher
Die Grammatik G einer Sprache L ist definiert durch:
. Die endliche, nicht-leere Menge
– der Terminalzeichen T (Alphabet) (rechts von ::=)
– der Nicht-Terminale N (grammatische Begriffe)
– Der Produktionsregeln (Grammatikregeln)
. Sowie das Satzelement S, ein bestimmtes Element aus N
Die Vereinigungsmenge aus N und T nennt man Vokabular V
Die Definition wird meistens als Quadrupel angegeben:
G(L) = ( T, N, S, P)
Eine Grammatik besteht minimal aus der Produktionsregel
– S --> ε (ε ist das leere Element)
Chomsky-Hierarchie
Typ 3: reguläre Grammatik
Typ 2: kontextfreie Grammatik
Typ 1: kontextsensitive Grammatik
Typ 0: Grammatik
kontextfreie Gramatik (Typ 2)
erlaubte Ausdrücke auf der linken Seite:
ein Nichtterminal. S ::=
erlaubte Ausdrücke auf der rechten Seite:
das leere Element ::= å oder beliebige
Kombinationen von Terminalen und
Nichtterminalen
Zur Prüfung dieses Types ist ein
Kellerautomat erforderlich.
Zur Vereinfachung der Lesbarkeit sind gebräuchlich:
1. Zuweisungsoperator „-->“ wird ersetzt durch „::=“
2. Einschluß der Nichtterminale in <spitze Klammern>
3. Zusammenfassung von Zuweisungen mit identischer „linker
Seite“ mit der „|“ Schreibweise.
Kurzschreibweisen für Wiederholungen:
[] 0 oder 1 mal (optional)
{} beliebig oft (auch 0 mal)
() dienen der Zusammenfassung, keine Bedeutung
Eine reguläre Grammatik ist den meisten Einschränkungen
unterworfen:erlaubte Ausdrücke auf der linken Seite:
ein Nichtterminal. S ::=
erlaubte Ausdrücke auf der rechten Seite:
das leere Element ::= å oder mind. ein Terminal ::= a oder mind. ein Terminal
gefolgt von einem Nichtterminal. ::= abcA ( bzw. ::= Aabc)
Eine reguläre Gr. ist mit einem endlichen Automaten prüfbar.
Bubblesort:
While Liste nicht sortiert
Beginne am Listenanfang
Do
If Name alphabetisch hinter Nachfolger
Then vertausche Name mit Nachfolger
Nimm nächsten Namen
While nicht Ende der Liste
Komplexität: n²
Radixsort:
- Stapel für jedes mögliche Zeichen (d. Wortes)
- Lese jedes Zeichen der Wörter von rechts und lege die
Wörter auf die entsprechenden
Stapel
- Vereinige alle Stapel (FIFO)
- Gesamtstapel auch FIFO!
Komplexität: O((m+1)*k) (m Zeichenvorrat, k Anzahl
Stellen)
Divide and Conquer: (Mergesort)
teile Liste
sortiere die Teillisten
vereinige die teillisten
rekursiv
Binärbaum:
neues Element vor Wurzel-->links einfügen
neues Element nach Wurzel -->rechts einfügen
iterativ
iterativ
Heapsort:
- Basierend auf binärem Baum
- alle inneren Knoten bis auf maximal einen haben
zwei Söhne / Töchter
- alle Knoten mit weniger als 2 Kindern befinden sich
auf dem grössten beiden Leveln
- Blätter auf den grössten Leveln sind von Links nach
rechts aufgefüllt
- Heap-Eigenschaft: fast vollständig binärer Baum,
jeder Knoten ist nummeriert
- die in einem Knoten gespeicherte Zahl ist grösser
als die in seinen Kindern
gespeicherte Zahl
3 Grundoperationen:
Reheap, Create-Heap, Delete Max
EV Elementenvorrat (Anzahl der möglich Wörter)
O rdnungssatistik
EV = Bs (B: Anzahl der möglichen Zeichen, S: Anzahl der Stellen)
Median aus 4: Vergleiche
Kodierung: Abbildung von Alphabet 1 auf Alphabet 2
Binärer Codebaum:
Entscheidungsgehalt: EG = ld EV = ld Bs = s * ld B
Entscheidungsredundanz: ER = EG2 – EG1 = ld (EV2 / EV1) (EV2 binär, EV1nicht binär)
Informationsgehalt: G = ld 1 / p = - ld p entspricht mittlere Stellenanzahl
Mittlere Codewortlänge sm: sm = Summe über alle Zeichen (p(i) * s(i)) [bit / Symbol]
minimal mittlerer Informationsgehalt = Entropie H
H = Summe über all Zeichen (p(i) * ld 1 / p(i))
Informationsredundanz IR: (Überschuss an Daten)
IR = sm – H
Zeichenerkennung:
Kompressionsfaktor = unkompr. Datenmenge / kompr. Datenmenge
Huffman-Codierung:
-rekursiver Aufbau eines binären Codebaumes
- Tabelle mit Wahrscheinlichkeiten für das Auftreten aller Symbole des Alphabets
- Sortieren nach Wahrscheinlichkeit
- Zusammenfassen der beiden Symbole mit d. kleinsten Wahrscheinlichkeiten zu einem Teilbaum aus zwei Blättern, die durch 0
(rechts) und 1(links) unterschieden werden.
- Dieses neue Symbol wird in einer Tabelle eingetragen und mit der neuen Wahrscheinlichkeit neu einsortiert
- Dekodierung: Von Anfang an den Codebaum für jedes Zeichen durchlaufen. Kommt man an einem Blatt an hat man ein weiteres
Zeichen
- Huffmann-Codierung produziert einen optimale Codierung (L=H) wenn die Symbolwahrscheinlichkeit negative Potenzen von 2 sind
- Nachteil wenn Anzahl der Symbole sehr groß
- Nachteil wenn Symbolwahrscheinlichkeiten sich ändern
- Huffman-Codierung ist ein rein sequentieller Prozess
struct element
{
char name[50];
struct element *next;
struct element *prev;
};
Einfügen doppeltverk. Liste (Liste ist leer)
new->next = NULL;
new->prev = NULL;
*last = new;
*top = new;
Zeiger
int *ptr
ptr: Speicheraddresse
*ptr: Speicherinhalt
zwischen zwei (tmp aktuelle Position)
tmp->prev->next = new;
new->next = tmp;
new->prev = tmp->prev;
tmp->prev = new;
Variable:
& variable: Speicherad
variable: Inhalt
Short 16bit
Int, long 32bit
float 32bit
double 64bit
char 8bit
unsigned** VZ-los
Array: Arrayname.Feldname
Liste: zeiger->Feldname
temp = (struct element *) malloc( sizeof(struct
element) );
strcpy(ptr->name, variable);
Am Anfang
new->next = tmp
new->prev = NULL;
tmp->prev = new;
*top = new;
Am Ende
latest->next = new;
new->next = NULL;
new->prev = latest;
*last = new;
Herunterladen