Greedy-Algorithmus: wie Huffman-Komprimierung zu erreichen, mit dem Greedy-Algorithmus Codierung?

Greedy-Algorithmus: wie Huffman-Komprimierung zu erreichen, mit dem Greedy-Algorithmus Codierung?

Greedy-Algorithmus (Greedy-Algorithmus) Es gibt viele klassische Anwendungen, Huffman-Kodierung, Prim und Kruskal minimalen Spanning-Tree-Algorithmus sowie Single-Source kürzesten Weg Algorithmus Dijkstra, wie die Greedy-Algorithmus zu verwenden, effiziente Datenkomprimierung Daten zu erreichen Codierung Speicherplatz zu sparen?

Wie der „Greedy-Algorithmus“ zu verstehen?

Angenommen, wir einen Rucksack haben kann 100kg Artikel halten, wird die folgenden fünf Arten von Bohnen, und die Gesamtmenge des Gesamtwerts der einzelnen verschiedener Bohnen, um den Gesamtwert der Waren geladen Rucksack maximal zu machen, wie zu wählen und wie viel davon geladen?

Artikel Die Gesamtmenge (kg) Der Gesamtwert der (Yuan)
Sojabohne 100 100
grüne Bohnen 30 90
rote Bohnen 60 120
schwarze Bohnen 20 80
grüne Bohnen 50 75

Nur den Preis pro Artikel zu berechnen, angeordnet in absteigender Reihenfolge nach dem Einheitspreis zu installieren, schwarze Bohnen, Mungobohnen, rote Bohnen, Erbsen, Sojabohnen. So ist die schwarzen Bohnen 20 kg, 30 kg grüne Bohnen, rote Bohnen 50 kg, ist diese Idee ein Greedy-Algorithmus

  • Wenn Sie solche Probleme sehen, wenn der Greedy-Algorithmus denken: eine Reihe von Daten, wir die Grenzen und Erwartungen definieren, in der Hoffnung, die Anzahl der Daten zu wählen, während des Grenzwert zu erfüllen, erwartet, dass der Maximalwert. Wert nicht mehr als die Gewichtsgrenze 100kg ist der Gesamtwert der Erwartungen ist die größte
  • Versuchen Sie es mit dem Greedy-Algorithmus zu nehmen zu lösen: jede Auswahl unter den gegenwärtigen Umständen im Fall des Grenzwerts gleich den Betrag des Beitrags, der größten Beitrag zu den Erwartungswertdaten. Gerade innerhalb vom Rest der Bohnen ist, wählen Sie den höchsten Preis, dh das gleiche Gewicht, den größten Beitrag zum Wert der Bohnen
  • Die Ergebnisse geben einige Beispiele, um zu sehen, ob der Greedy-Algorithmus optimal produziert.

In einer der Zeichnung rechts, ausgehend vom Scheitelpunkt S, dem kürzesten Weg zum Scheitelpunkt T der (das Gewicht der Kanten und einem Minimalwert) finden, ist der Algorithmus gierigen Lösungen: jedesmal, wenn eine Auswahl auf der rechten Seite mit den aktuellen minimalen Kantenscheitelpunkte verbunden ist bis Sie den Scheitelpunkt finden. Aber nicht der kürzeste Weg, weil der Greedy-Algorithmus funktioniert nicht vor der Wahl ist die Wahl der letzteren, so dass auch der erste Schritt bei der Auswahl der besten Züge (kürzeste Seite) beeinflussen können das globale Optimum verfehlt Ergebnis

Greedy-Algorithmus Ist-Analyse

1. Nach Süßigkeiten

M und n Süßigkeiten Kinder, wenn m <n, nur auf einen Teil der Kind Süßigkeiten, Bonbons Größe jeden Bereich zugeordnet wird, die Größe der m Süßigkeiten sind s1, s2, s3 ...... sm, jede Vertiefung die Nachfrage nach Kindergröße Süßigkeiten ist nicht das gleiche, nur die Größe der Süßigkeit ist größer als die Nachfrage nach Kindergröße Süßigkeiten, wenn Kinder treffen können unter der Annahme, dass die Nachfrage nach Süßigkeiten n Kindern Größen sind g1, g2 ...... gn

Wie Süßigkeiten verteilen möglich, die größte Anzahl von Kindern gerecht zu werden?

N von dem Kind abstrahiert wird, das Kind einen Teil der Anzahl von Abgabe Süßigkeiten zufriedenstellen zu lassen Kindern (Erwartungswert) maximalen Grenzwert zu extrahieren, ist die Anzahl von Süßigkeiten m

Jedes Mal, von dem Rest der Kinder Größenanforderungen in den Süßigkeiten Minimum zu finden, dann ihm geschickt, um den Rest der Süßigkeiten in seinem Zucker Minimal-, Maximal- Anzahl solcher Programme zu treffen, um die Kinder zu treffen

2. Münzen herausgeben

Angenommen, wir haben 1 ¥, 2 ¥, 5 ¥ 10 ¥ 20 ¥ 50 ¥ 100 ¥, deren Anzahl der Blätter sind c1, c2, c5, c10, c20, c50, c100, verwenden nun das Geld Pay k ¥, wie viele Rechnungen sind zumindest es dauern?

Zum gleichen Beitrag des erwarteten Wertes (die Anzahl der Banknoten), in der Hoffnung der Beitragshöhe zu-Punkt-Multi, können Sie die geringste Anzahl von Rechnungen machen

3. Intervall Abdeckung

Hat n Abschnitte, die Abschnitte auf den Startpunkt und Zielendpunkte sind [l1, r1], [L2, R2], [l3, r3] ...... [ln, rn] einen Teil des n-ten Intervall aus dem Intervall auszuwählen dieser Teil des Bereichs gerecht zu werden disjunkte (der Endpunkt nicht schneiden Kreuzung), die Anzahl der Intervalle bis zu gewählt?

区间:                     [6,8]   [2,4]  [3,5]  [1,5]   [5,9]  [8,10]
不相交区间:      [2,4]   [6,8]  [8,10]

Die Idee ist es, das Problem zu lösen: Es wird angenommen, dass das n am weitesten links liegende Punkt Intervall L min ist, Rmax des äußersten rechten Punktes, das Problem ist äquivalent mehrere disjunkten Intervalle auszuwählen, die von links nach rechts [Lmin, rmax] auf der Abdeckung, von klein dieser n Intervalle zu groß Reihenfolge sortiert nach den Endpunkt starten, jedes Mal einen Punkt mit der linken wählen Sie den vorderen Bereich nicht überlappen, und der rechte Endpunkt so klein wie möglich ist bedeckt, die die verbleibenden unbedeckten erlauben würde, Bereich so groß wie möglich mehr Reichweite platziert werden

Wie Huffman-Kodierung mit dem Greedy-Algorithmus zu erreichen?

Es gibt eine 1000-Zeichen-Datei mit 1 Byte pro Zeichen (1 Byte = 8 Bit), das Speichern von insgesamt 1.000 Zeichen 8000bits muß, gibt es keine mehr Platz sparende Art und Weise ist es zu speichern?

Diese 1000 Zeichen enthält nur sechs verschiedene Zeichen, vorausgesetzt, sie sind a, b, c, d, e, f und 3 Bits (Bit) acht verschiedene Zeichen darstellen können, um Speicherplatz zu reduzieren, die jeweils wir drei Zeichen Bits verwenden, sagte, dass die Notwendigkeit, diese 1000 Zeichen speichern kann nur 3000bits

a(000) , b(001) , c(010) ,d(011) , e(100) , f(101)

Huffman-Kodierung wird nicht nur den Text in wie viele verschiedenen Charakteren untersuchen, sondern auch die Häufigkeit des Auftretens jeden Zeichen zu untersuchen, in Abhängigkeit von der Frequenz, wählen Sie die Codierung unterschiedlicher Länge, wie die Zeichen auf verschiedene Frequenzen kodieren, von verschiedenen Längen zu wählen? Je höher die Häufigkeit des Auftretens der Zeichen mit einem etwas kürzeren, einem etwas längeren kodierend tritt weniger häufig verwendete Zeichen

Dekompressionszeit, jeder Lese aus dem Text 3-Bit-Binärcode, dann können Sie übersetzen, aber Huffman-Kodierung von ungleicher Länge, die jeweils sollte man nehmen, zwei oder drei oder? Um Mehrdeutigkeiten zu vermeiden, erfordert Huffman-Kodierung ein Code ist ein weiterer Code-Präfix nicht zwischen den einzelnen Zeichencodierung geschieht

011  010  100  011  101  001
 d       c         e      d        f      b

Es wird angenommen, dass die Häufigkeit des Auftretens der Zeichen sechs absteigender Reihenfolge sind a, b, c, d, e, f, wir sie aussehen wie diese kodieren, ist eine beliebige Zeichencode nicht ein Präfix eines anderen, Dekompressor wenn wir so lange wie möglich lesen können die binär-String, nach dieser Codierung Kompression extrahieren, benötigen 1000 Zeichen auf nur 2100bits

Charakter Häufigkeit des Auftretens Verschlüsselung Die Gesamtzahl der binären
ein 450 1 450
b 350 01 700
c 90 001 270
d 60 0001 240
e 30 00001 150
f 20 00000 100

Wie es verschiedene Längen codieren, auf verschiedenen Zeichen der Zeichenauftrittshäufigkeit je?

Jedes Zeichen als Knoten gesehen, und kommt in der Frequenz der Prioritätswarteschlange, extrahiert die Minimalfrequenz zwei Knoten A, B aus der Warteschlange, so wird ein neuer Knoten C, die Frequenz wird auf zwei Knoten Frequenzen und und der Knoten C als a, B des Elternknotens, der C in die Prioritätswarteschlange setzen, wird wiederholt, bis es keine Daten in der Warteschlange ist, und schließlich eine Gesamtcharakter bilden. Videos zu jeder Kante sowie einem Gewichtungswert, zu dem linken Tochterknoten zeigen alle Kanten markiert sind, 0, Zahlen auf der rechten Seite eines untergeordneten Knotens beziehen, dann wird der Pfad von der Wurzel zu dem Huffman-Blattknoten ein Blattknoten ist mit dem Zeichen entspricht, Verschlüsselung

p

ka (1)

ZB (01)

einschließlich (001)

xd (0001)

f (00000) e (00001)

1. In einer nicht negativen ganzen Zahlen a, von k Ziffern entfernt, so dass der Rest des digitalen Wertes des Minimums, wie der K-Nummern zu wählen, um es zu entfernen?

Die ganzen Zahlen a, durch eine Reihe von Ziffern, begannen von dem Hoch entfernt werden, entfernt die größer als seine untere Stelle hoher Zahlen: K-Zyklen, welche Mittel von der höchsten Ebene ausgehend, mit einer relativ niedrigen Zahlen, wenn hohen großer Verschiebung Darüber hinaus kleine hoch, rechts um ein Bit zu vergleichen Zykluszeiten K fortsetzen

Zum Beispiel 4556847594546 -> Erster 455647594546 -> Second 45547594546 -> Third 4547594546 -> Vierte 447594546-> Fünfte 44594546

2. n warten persönlichen Service zu sein, aber das Fenster eine andere Länge der Zeit ist jede Person muss gewartet werden, wie die Reihenfolge bedient werden, vereinbaren Sie einen persönlichen insgesamt n kürzeste Wartezeit zu machen?

Die kürzeste Wartezeit beginnt Service

Veröffentlicht 75 Originalarbeiten · erntete Lob 9 · Ansichten 9184

Ich denke du magst

Origin blog.csdn.net/ywangjiyl/article/details/104537624
Empfohlen
Rangfolge