1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Entwicklung eines Pseudocodes zur Komprimierung von Bildatein

Dieses Thema im Forum "Sonstige Sprachen" wurde erstellt von Movementroboter, 30. Juni 2014.

  1. Movementroboter

    Movementroboter Mitglied

    Hallo Leute,
    wie setze ich die Folgende Aufgabe um ?

    Beispiel: Rohdaten
    QQQQRRRRRRTTTTTTTTTTLLLLLLLLLLMNNNVVVVVVVVVVVAAAAAAAAAAAAA
    Nach der Komprimierung (§ ist das Sonderzeichen,das die Wiederholung einleitet)
    §4Q§6R§10T§11LMNNN§11V§13A

    Ich darf folgende Funktionen und Variablen benutzen
    Bilddaten [ ] : enthält die Daten in Form eines Arrays (Typ Zeichen)
    Bilddaten.GetLength() :liefert die Größe des Arrrays
    Bilddaten[indes] :liefert ein Zeichen an der Stelle index(nullbasiert)
    KomprimierteDaten [ ] :Array für Speicherung der Komprimierung
    KomprimierteDaten.Add(Zeichen) : Fügt dem Array ein zeichen hinzu

    Mein erster Lösungansatz war das ich mir ein Struktogramm erstelle und den dann in Pseudocode umwandel. Wie würdet ihr es machen ? Habt ihr eine Idee wie ich es umsetzen kann ?
     
  2. Spyke

    Spyke Capoeirista Premium-User

    Schwer zu sagen, ich für meinen Teile denke wüsste jetzt schon direkt wie ich vorgehen würde das ich direkt losschreiben würde.

    Obs dann wirklich passt was man sich vorgestellt hat sieht man ja dann meist eh erst wenns vor einem liegt, in vorm vom halt Pseudocode oder richtigem.
     
  3. Movementroboter

    Movementroboter Mitglied

    Hallo Spyke,
    kannst du mir ein Kleinen Ausschnitt aus deinem Code den du dir gedacht hast schreiben ? ich möchte nicht die Komplette-Lösung haben jedoch ein Anfang damit ich weiß wie ich vorgehen muss
     
  4. Parantatatam

    Parantatatam mag Cookies & Kekse

    Welche Zeichen können denn in den Rohdaten vorkommen? Du hast bei Dir schon das schöne Beispiel gezeigt, dass Du vier gleiche Zeichen auf §4Q§ "kürzt", wobei das Ergebnis die gleiche Länge hat wie die Ausgangsdaten. Dies könnte dazuführen, dass Du beispielsweise drei Zeichen auf §3Q§ vergrößerst und somit die Ergebnisdaten auch länger sein können als die Ausgangsdaten.

    Wenn Du nur Buchstaben verwendest, kannst Du auch die Paragraphenzeichen weglassen. Außerdem solltest Du eine Regel einführt, die die Ausgangsdaten erst dann komprimiert, wenn das Ergebnis auch wirklich kürzer ist als das Original.
     
  5. Movementroboter

    Movementroboter Mitglied

    hallo einfach nur crack
    es soll erst ab 4 Zeichen gekürzt werden
    wieso kann ich dann das Paragraphenzeichen weglassen wenn ich nur Buchstaben benutze ?
     
  6. Spyke

    Spyke Capoeirista Premium-User

    Ich würde die Zeichen alle einzeln durchlaufen und zählen solange immer das gleiche zeichen vorkommt.
    Dabei die Position des ersten vorkommens des zeichens merken.

    Ändert sich das Zeichen, ev. schaun, wie @einfach nur crack schon bemerkte, ob sich das komprimieren lohnt.
    In diesem Fall wenn das vorkommen des zeichen öfters als 4 mal in einer reihenfolge auftaucht.

    Dann, wenn kleiner 4 die original zeichen in das komprimierungs array, ansonsten deine komprimierung in das komprimierungs array.
     
  7. Movementroboter

    Movementroboter Mitglied

    HÄ jetzt versteh ich garnix mehr :(
     
  8. Movementroboter

    Movementroboter Mitglied

    so habe jetzt einfach mal ein pseudocode geschrieben aber ich frage mich ob er auch richtig ist :confused:

    SeqChar p = < NächstesEingabezeichen >;
    Char k = NächstesEingabezeichen;
    Wiederhole:
    Falls p & < k > in Tabelle enthalten
    dann p = p & < k >
    sonst trage p & <k> neu in Tabelle ein
    (und erzeuge neuen Index dafür);
    Schreibe Tabellenindex von p auf Ausgabe;
    p = < k >;
    Ende Fallunterscheidung;
    k = NächstesEingabezeichen;
    solange bis Eingabeende
    Schreibe Tabellenindex von p auf Ausgabe;
     
  9. Parantatatam

    Parantatatam mag Cookies & Kekse

    Movementroboter gefällt das.
  10. Movementroboter

    Movementroboter Mitglied

    Kannst du mir vielleicht aus deinem Code ein Pseudocode machen ?
     
    Zuletzt bearbeitet: 30. Juni 2014
  11. ComFreek

    ComFreek Mod | @comfreek Moderator

    Mir scheint, als ob du hier nach einer fertigen Lösung für deine Hausaufgabe suchst.

    einfach nur crack hat dir sogar schon echten Code geschrieben. Diesen in Pseudocode umzuwandeln müsste viel leichter sein als andersherum.
    Folgende Zeile müsstest du in einer weiteren Funktion umschreiben, da du keine regulären Ausdrücke verwenden darfst.
    Code (Javascript):
    1. var groups = string.match( /([A-Z])\1*/g )
    Sie findet alle Reihungen gleicher Buchstaben. Dafür musst du den aktuellen Buchstaben zwischenspeichern und bei jeder Iteration (über dem String) prüfen, ob der nächste Buchstabe noch gleich dem alten Buchstaben ist.
    Hier der Code in JavaScript:
    Code (Javascript):
    1. // str ist ein String
    2. // str[i]: Zeichen i im String str
    3. // []: ein leeres Array
    4. // [x,y,z]: ein Array mit den Werten x, y, z
    5. function blub(str) {
    6.   var curChar, count = 0;
    7.   var sequences = [];
    8.   for (var i = 0; i < str.length; i++) {
    9.     if (i == 0) {
    10.       curChar = str[i];
    11.     }
    12.     if (curChar == str[i]) {
    13.       count++;
    14.     } else {
    15.       sequences.push([curChar, count]);
    16.       count = 1;
    17.       curChar = str[i];
    18.     }
    19.   }
    20.   sequences.push([curChar, count]);
    21.   return sequences;
    22. }
    Jetzt musst du nur noch deine Terminologie benutzen (Bilddaten).
    Eventuell kann du statt der Speicherung der Reihungen auch gleich in das Array für die komprimierten Daten schreiben.
     
    Zuletzt bearbeitet: 30. Juni 2014
    Movementroboter gefällt das.
  12. Movementroboter

    Movementroboter Mitglied

    Wie bekomme ich es hin das die Zeichenfolge so aussieht §4Q§3BAAW§6ANN§7F§2U ?
    Habe mich an dem Code von einfach nur Crack und ComFreek gehalten
     
  13. ComFreek

    ComFreek Mod | @comfreek Moderator

    Mein Code und der von einfach nur crack liefern doch genau das.
    Weißt du, wie du ein '§' vor jeder komprimierten Reihung einfügst? Wenn nicht, dann wundere ich mich, ob du den restlichen Code verstanden hast.
     
    Parantatatam gefällt das.
  14. Parantatatam

    Parantatatam mag Cookies & Kekse

    Hinweis: Ich musste in meinem Quelltext genau sechs Zeichen hinzufügen, wobei zwei Leerzeichen und noch einmal zwei Anführungszeichen waren.
     
  15. Spyke

    Spyke Capoeirista Premium-User

    Mein Vorschlag wäre, programmier das einfach mal richtig aus, und versuch das dann mal als Pseudocode wieder zugeben.

    Im Prinzip würd ich es selbst auch nicht anders machen, im Kopf hab ich den Code schon vor mir, und denn geb ich nur bissel verständlicher/vereinfacht nach außen.
     
Die Seite wird geladen...