Bästa svaret
Om du med ”bäst” menar komprimeringsförhållande, enligt Stor textkomprimeringsriktmärke det är CMIX. Det enda problemet är att du behöver en dator med 32 GB minne för att köra den. Och sedan tar det fyra dagar att komprimera eller dekomprimera 1 GB text.
Liksom de flesta av de högst rankade programmen använder CMIX förbehandling av ordlista och sammanblandning av PAQ-stil. Förprocessorn ersätter ord med 1 till 3 bitars symboler från en ordlista och utför annan bearbetning såsom att ersätta stora bokstäver med en specialsymbol och motsvarande gemener. Det kan också analysera vanliga prefix och suffix.
En kontextmodell tar ett sammanhang (till exempel de sista n bitarna) och gissar en sannolikhet p att nästa bit blir 0 eller 1. Resultatet matas till en aritmetisk kodare som kodar biten mycket nära Shannon-gränsen för log2 1 / p bitar. Kompressionsförhållandet beror därför helt på hur väl p uppskattas. En sammanhangsblandningsalgoritm ger mycket exakta förutsägelser genom att kombinera förutsägelser för många oberoende modeller. CMIX använder flera hundra modeller, varför det kräver så mycket tid och minne. Anledningen till att det finns så många modeller är att det finns många olika möjliga sammanhang, många sätt att konvertera ett sammanhang till en förutsägelse, många sätt att uppdatera modellen och många sätt att adaptivt kombinera förutsägelser från andra modeller och välja de bästa med en hierarki av blandare. Praktiska sammanhangsblandare kan använda 2 till 20 modeller, vilket offrar viss komprimering för enkelhet och användbarhet.
De bästa kompressorerna kommer nära faktiskt att förstå text. De modellerar språkets lexikala, semantiska och grammatiska struktur. Ordboken är till exempel organiserad genom att gruppera relaterade ord tillsammans, såsom mor med far och måndag med tisdag . Detta resulterar i ordbokskoder som bara skiljer sig åt i låga bitar. Sedan kommer några av kontextmodellerna att släppa de låga bitarna, så att kompressorn kan förutsäga Jag såg min far på måndag efter att ha sett Jag träffade min mamma på tisdag .
De tekniska detaljerna kan vara ganska involverade. Om du är intresserad av att lära dig mer, se Förklarad datakomprimering .
Svar
Förutsatt att du pratar om förlustfri komprimering (texter kan tappas komprimerat med SMS-språk till exempel), det är välkänt att du inte kan komprimera förlustfritt ”någon” binär fil. Med andra ord kommer vissa filer att öka sin storlek. Detta beror på kodarhuvudfiler och grundläggande matematik med omöjliga kopplingar mellan [0, …, N] och [0, …, N-1] eller Dirichlet pigeon-hole-princip (Schubfachprinzip). Se http://en.wikipedia.org/wiki/Pigeonhole\_principle
Som sagt tidigare hänvisar ”bäst” i allmänhet till ett genomsnittligt kompressionsförhållande @ Sam-Jp. Teckenuppsättningen av texter (t ex; ascii 7 eller 8 bitar är viktig) och deras typ är också viktig. ”Bästa komprimering” på rena skrivna textfiler på mänskligt språk fungerar annorlunda på skrivarens postscript, rtf, doc eller till och med pdf-filer som innehåller text, eftersom vissa format redan inkapslar komprimering. Följaktligen beror ”bäst” i kompressionsförhållande på databasens innehåll, homogenitet och typologi för textfiler, vilket ses på engelska textkomprimering ges i @ Igor-Carron-länk: http://www.maximumcompression.com/data/text.php
Speed @ Jonathan-Hseu är också ganska viktigt. Beroende på din applikation (från arkivering till databasinteraktioner @ Daniel-Lemire) fokuserar man antingen på komprimering eller dekompression (vanligtvis komprimera en gång, dekomprimera många) eller båda.
Men andra funktioner kan bedömas som ja, särskilt med tillkomsten av enorma datamängder och olika förvärvssystem: -prestanda för slumpmässig åtkomst eller sökfunktion i komprimerade filer -felresiliens (motstånd mot skadade bitar) -online-kapacitet, dvs att effektivt kunna komprimera dataströmmen som den kommer – komprimering av texter strukturerade inte bara i en rasterordning utan i träd, grafer – låg komplexitet eller energisk effektivitet hos kodaren, eller avkodaren, eller båda – möjlig parallellisering – möjligheten till distribuerad kodning (komprimeringsarbete delas på olika noder i ett nätverk)
Så småningom, även för text, kan man tänka ur den förlustfria rutan. Och vi kommer tillbaka till SMS som citerats tidigare, där betydelsen är viktig, men kanske inte rätt stavning, se t.ex.Kaufman & Klein, halvförlustfri komprimering http://www.computer.org/portal/web/csdl/doi/10.1109/DCC.2004.1281520
Som vanligt löser frågan om ”bäst” att förfina frågan om det faktiska syftet, genom att definiera ytterligare mätvärden för kvalitet och lämplig viktning av dessa mätvärden för att definiera ”ditt” bästa @ Alex-Kamil. Ämnen i följande källor är inspirerande:
* IEEE-transaktioner om informationsteori http://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=18 * IRE-transaktioner om informationsteori http://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=4547527 * Datakomprimeringskonferens sidor.cs.brandeis.edu/~dcc/
Äntligen är jag ingen specialist men amatör inom förlustfri komprimering, jag har nyligen blivit förvånad över prestandan (i kompressionsförhållande) för Deplump (http://www.deplump.com/index.html) på några långa engelska textfiler och några binära filer (jämfört med mina favoriter rar, Bzip2 och 7zip citerade i andra svar). Du kan testa det för korta filer online. För ytterligare information, se F. Wood et al. Sequence Memoizer, 2011 (se http://www.sequencememoizer.com/) eller Franck Woods webbsida http://www.stat.columbia.edu/~fwood/