Revision history for LZW


Revision [18895]

Last edited on 2014-03-28 00:45:46 by ToBo
Additions:
http://einstein.informatik.uni-oldenburg.de/rechnernetze/seite8.htm


Revision [18893]

Edited on 2014-03-28 00:28:48 by ToBo
Additions:
LZW steht für Lampel-Ziv-Welch und ist ein 1984 entwickeltes Kopressionsverfahren, das u.a. in Kompressionsprogrammen zip, gzip, bzip und Bildformaten gif, tiff Verwndung fand.
http://www.youtube.com/watch?v=dLvvGXwKUGw
Deletions:
LZW steht für Lampel-Ziv-Welch und ist ein 1984 entwickeltes Kopressionsverfahren, das u.a. in Kompressionsprogrammen zip, gzip, bzip und Bildformaten gif, tiff verwndung fand.


Revision [13414]

Edited on 2012-04-06 21:30:59 by ToBo
Additions:
Literatur zum LZW
- SkriptRoth2008, S. 18
- SkriptCarl, S. 85
- Karrenberg2005
Deletions:
SkriptRoth2008, S. 18 und SkriptCarl, S. 85


Revision [13412]

Edited on 2012-04-06 21:28:58 by ToBo
Additions:
=====LZW=====
LZW steht für Lampel-Ziv-Welch und ist ein 1984 entwickeltes Kopressionsverfahren, das u.a. in Kompressionsprogrammen zip, gzip, bzip und Bildformaten gif, tiff verwndung fand.
SkriptRoth2008, S. 18 und SkriptCarl, S. 85
Beispielprogramm für die Komprimierung in [[C]] für die Kodierung von Dateien
%%(c)
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include <mpi.h>
/**
* LZW-Algorithmus
* @author Andreas Tobola
* @since Januar 2009
* Implementierung anhand der Anleitung aus dem
* Skript 'Informationstheorie und Codierung' auf S. 85
*/

char w[32000][100]; // Wörterbuch
unsigned short dicsize = 0;

void dicinsert(char p[])
{
memcpy(w[dicsize], p, 100);
dicsize++;
}

unsigned short dicsearch(char p[])
{
unsigned short i;
for (i=0; i<dicsize; i++)
{
if (strcmp(p, w[i]) == 0)
return (i+1);
}
return 0;
}
void dicprint()
{
unsigned short i;
for (i=0; i<dicsize; i++)
{
printf("%d -> %s \n",i+1, w[i]);
}
}

int main(int argc, char** argv)
{
FILE *fd;
char i; // Input character
char pi; // Previous input character
char p[100]; // Pharse
unsigned short k = 0;
unsigned short ldi; // last dic index
unsigned long iBytes = 0;
unsigned long oBytes = 0;

fd = fopen(argv[1], "rb");
if (fd == 0)
{
printf("Can not open file %s", argv[1]);
return 1;
}

// Wörterbuch mit Alphabet initialisieren
while ((i = fgetc(fd)) != EOF)
{
i = pi - i;

p[0]=i;
p[1]=0;

if (dicsearch(p)==0)
dicinsert(p);

pi = i;
}

rewind(fd);
// Folgen suchen und ind das Wörterbuch hinzufügen

while ((i = fgetc(fd)) != EOF)
{
unsigned short di; // last dic index

i = pi - i;

iBytes++; // Count input bytes

p[k]=i;
p[k+1]=0;

//printf("%c ... '%s' ",i,p);

di = dicsearch(p);

if (di==0)
{
//printf("\t %2d \t dic. entry: '%s'", ldi, p);
dicinsert(p);
p[0] = p[k]; // Nächste Folge beginnt mit dem letzten Zeichen der aktuellen Folge.
p[1] = 0;
k=0;
ldi = dicsearch(p);
oBytes++; //count output bytes

}
else
{
ldi = di;
}

k++;

//puts(" ");

pi = i;


}


//printf(" ... '%s'\t %d (last code)\n", p, ldi);
oBytes++;
printf("Input: %d\n", iBytes);
printf("Output: %d\n", oBytes);
printf("Compr. ratio: %.1f %\n", ((float)oBytes)/((float)iBytes)*100);
printf("Dictonary: %d entries\n", dicsize);

//dicprint();
return 0;
}
%%
Test
%%
./lzw2 Testdatei
Input: 832
Output: 607
Compr. ratio: 73.0 %
Dictonary: 808 entries
%%
Deletions:
=====Titel=====


Revision [13411]

The oldest known version of this page was created on 2012-04-06 21:25:20 by ToBo
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki