Datakompression (består af processerne datakomprimering og datadekomprimering) er metoder man anvender indenfor computerteknologi til at få datamængder til at fylde mindre i perioder. Man kan komprimere enkelte filer såvel som hele samlinger af filer. Man "pakker filer", som det hedder i visse kredse. Man kan også på en gang komprimere indholdet af al data på et eller flere datalager-enheder (fx harddiske). Datalager-kapacitet er en konkurrenceparameter, så industrien er generelt interesseret i at data fylder så lidt som muligt. På trods af at målet er at få data til at fylde mindre, kan man i sjældne tilfælde risikere at få det modsatte resultat. Komprimering optager således megen interesse indenfor såvel datalogien som industrien.
Hvordan komprimeres data
Det meste data som produceres, indeholder dublerende – redundant – information. Simple eksempler:
En tekstfil gentager bogstaverne i alfabetet adskillige gange.
I de fleste tekster forekommer de samme ord mange gange.
Et billedfil gentager rigtig mange gange farveværdier for alle pixels, som udgør en ensartet farveflade.
Komprimeringsprocessen finder (noget af) denne redundans, fjerner eller udskifter den med data om hvor meget den pågældende datamængde er dubleret. Komprimeringsprogrammer arbejder med forskellige metoder, kaldet algoritmer. Nogle algoritmer komprimerer hurtigere, andre er bedre til at håndtere større datamængder, andre igen opnår større kompression af data osv. Overordnet skelnes mellem to kategorier af kompression:
Tabsfri kompression – alle data bevares og kan genskabes. Her kan der fx være tale om forskellige former for tekst-data, dokumenter o.l., hvor de oprindelige data skal kunne retableres 100% korrekt fra de komprimerede data. I denne kategori er også komprimerede sikkerhedskopier, som gerne skal kunne retableres fuldt ud.
IKKE-tabsfri kompression – der forekommer et vist svind af data under processen, så data ikke fuldt kan genskabes ved dekomprimering. Denne form vælges typisk ved fx komprimering af billeder, hvor man kan acceptere et vist kvalitetstab, mod til gengæld at opnå højere grad af komprimering. Man er, med komprimeringsprogrammets valgmulighed for komprimeringsgrad, i stand til at vælge, hvor "hårdt" man vil reducere data.
Tabsfri kompression
Tabsfri datakompression er en betegnelse for, at data komprimeres med en algoritme, som sikrer, at alle data retableres 100% – uden tab – ved dekomprimering. Man kan til gengæld forvente, at data fylder mere.
En af de kendteste algoritmer er Lempel-Ziv-Welch (LZW) fra 1978 og offentliggjort igen i 1984, komprimerer effektivt uanset anvendt ordgrænse, tegnsæt eller ordstørrelse.
Nogle programmer kan håndtere kataloger med filer og underkataloger til vilkårlig dybde, andre mange inputfiler, mens andre kun kan pakke en enkelt fil.
7-Zip – open source, åben arkitektur der kan kan anvende mange kompressionsalgoritmer og formater. Anvender også den forbedrede LZ77-algoritme LZMA.
Primært Linux-programmer
bzip2 – er fra 1996 og er i snit en bedre kompression end compress og gzip. Kompressionsprocessen er lidt langsommere end gzip, men komprimerer data mærkbart bedre.
compress – gammelt program fra ca. 1983. Bruger LZ78 som igen anvender LZW.
Ikke-tabsfri kompression
Ikke-tabsfri datakompression er en betegnelse for, at data komprimeres med datatab. Datatabet resulterer i, at det dekomprimerede arkiv eller fil, vil være forskellig fra originalen.
Ikke-tabsfri datakompressionsalgoritmer anvendes især på lyd, rå scannet tekst, illustrationer, billeder og video. Langt de fleste af disse data anvender som hovedalgoritme, en optimeret algoritmeudgave af diskret Fourier-transformation; kaldet fast fourier transformation (FFT). En nyere og bedre algoritme til at komprimere anvender diskret Wavelet-transformation – faktisk fast wavelet-transformation (FWT).