Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 14. 08. 2013 17:46

isaak
Zelenáč
Příspěvky: 3
Škola: MFF UK
Pozice: doktorand
Reputace:   
 

Brání gödel a nerozhodnutelnost ideání kompresi dat a nebo ne?

Ahoj,

zajímalo by mě, zda existuje nějaký efektivní algoritmus, který dokazatelně dobře bezztrátově komprimuje libovolná data. Mám však ale poněkud specifické požadavky na to, co považuji za dobrou kompresi.

Neformálně řečeno chci aby existovala nějaká konstanta K, tak aby zkomprimovaný soubor měl velikost maximálně K krát větší než tolik kolik obsahoval původní vstupní soubor skutečné informace. Teď ale ještě musím vysvětlit co to znamená "množství skutečné informace".

Opět to spíše řeknu neformálně miliarda náhodných bajtů z alternaivního rozložení s 50%ní pravděpodobností jednotlivých stran obsahuje informace celkem miliardu bajtů.
Když budou pravděpodobnosti jednotlivých stran jiné než 50% bude ve stejně dlouhém souboru informace méně. (Viz. pojem informační entropie http://cs.wikipedia.org/wiki/Entropie#I … D_entropie)

Zkomprimovat nuly a jedničky z alternativního rozložení je ale nuda, stejně tak komprese textu dle četnosti písmen, dvojic písmen či n-tic písmen.
To vše jsou jen nějaké konkrétní způsoby jak zkomprimovat některé často používané druhy dat. Věřím, že na takovýchto způsobech pro obvyklé typy dat jsou založeny všechny v praxi používané kompresní programy.

Já bych si přál ale znát efektivní algoritmus, který dokáže nejen počítat četnosti bitů nebo bajtů, ale který dokáže rozpoznat obecně JAKÉKOLI pravidelnosti ve vstupním souboru a v případě, že bude vstupní soubor dostatečně velký, tak aby program všech těchto vlastností dokázal využít.

Tady je neefektivní algortmus, který jsem vymyslel:

opakuj pro každý turingův stroj od jednodušších ke složitějším
    spusť turingův stroj (s prázdným vstupem)
    if (turingův stroj skončí a na pásku zapíše stejnou posloupnost jako ta kterou mám zkompresovat) then
        return nějaká reprezentace turingova stroje

Tento algoritmus má všechny požadované vlastnosti kromě efektivity. Vím, že to nemám dobře zformalizované, ale je vidět, že tento algoritmus je komprimuje lépe a nebo alespoň stejně dobře jako všechny ostatní kompresní algoritmy (až na konstantu).

Existuje něco podobného efektivního? (Slovem efektivní nemyslím ani tak nějakou rychlost nebo asymptitickou složitost ale spíše se obávám, že tohle zavání vyčíslitelností, kterou neumím a že vůbec nebude existovat žádný algoritmus, pro turingův stroj nebo existující počítače.)

Je nějaký důvod proč by tímto způsobem ideální a zároveň efektivní komprese nemohla existovat? Kde mám hledat odpověď? Jaký to je vůbec obor? Nebo podle jakých klíčových slov hledat články?

Offline

 

#2 15. 08. 2013 21:30

check_drummer
Příspěvky: 4892
Reputace:   105 
 

Re: Brání gödel a nerozhodnutelnost ideání kompresi dat a nebo ne?

↑ isaak:
Ahoj, jsi si jistý, že Tvůj algoritus zafunguje? Nevidím, proč by měla taková konstanta k existovat. Co když bude Turingův stroj o mnoho větší než řetězec, který nakonec vypíše?


"Máte úhel beta." "No to nemám."

Offline

 

#3 16. 08. 2013 09:35

isaak
Zelenáč
Příspěvky: 3
Škola: MFF UK
Pozice: doktorand
Reputace:   
 

Re: Brání gödel a nerozhodnutelnost ideání kompresi dat a nebo ne?

Možná toto záleží na tom, jaká formalizace a jaké zakódování turingova stroje se zvolí. Když se ale budou používat turingovy stroje s jednou pomocnou páskou, tak si jsem jistý, že bude dokonce existovat aditivní konstanta k' tž zakódování turingova troje (včetně pomocné pásky) bude nejvýše o k' větší než posloupnost ke kompresi.

Potřebný turingův stroj bude mít takovýto program:
1. Pokud nejsi na konci přepiš znak z pomocné pásky na výstupní pásku
2. Opakuj

Takovýto turingův stroj zabírá konstantní velikost při libovolném zakódování. Projistotu zvolíme takové zakódování, aby z posloupnosti znaků, která stroj kóduje tak, aby bylo poznat, kde tento kód končí. Délku si označíme k'.

Díky tomu, že máme kódování, které umí rozlišit konec kódu turingova stroje můžeme turingův stroj spolu s obsahem pomocné pásky reprezentovat jen tak, že obsah pomocné pásky připojíme beze změny za kód turingova stroje.

Do pomocné pásky se umístí posloupnost ke kompresi. Jelikož stroj opisuje pomocnou pásku na výstup, tak je to stroj který chceme a navíc jeho délka je odpovídá délce posloupnosti ke kompresi + k'.

V případě, že budeme kódovat jen neprázdné posloupnosti tedy existuje i multiplikativní konstanta k, tak aby byla podmínka splněna.

Jinak si mě málem dostal právě na této prázdné posloupnosti. To bych jedině musel dodefinovat, že prázdný archiv znamená, že i vstupní soubor pro kompresi byl prázdný.

Jinak, ale pokud se mě ptáš, jestli na té podmínce trvám, tak odpověď je ne. Zajímají mě i slabší komprese s podobně zajímavými vlastnostmi.

Offline

 

#4 17. 08. 2013 11:25

check_drummer
Příspěvky: 4892
Reputace:   105 
 

Re: Brání gödel a nerozhodnutelnost ideání kompresi dat a nebo ne?

↑ isaak:
Ještě je potřeba vyřešit problém a to jak co nejlépe zakódovat Turingův stroj - ale na to by se dal rekurentně použít tentýž postup. :-))
Nejsem si jist, zda budeš dosahovat vždy lepších výsledků než běžné komprimační algoritmy - pokud nebudeš mít vyřešeno zakódování Turingova stroje.


"Máte úhel beta." "No to nemám."

Offline

 

#5 18. 08. 2013 16:13

isaak
Zelenáč
Příspěvky: 3
Škola: MFF UK
Pozice: doktorand
Reputace:   
 

Re: Brání gödel a nerozhodnutelnost ideání kompresi dat a nebo ne?

Nevím, proč by mělo mít zakódování turingova stroje nějakou roli? Navíc už není třeba kód turingova stroje nijak kompresovat. Jsem spokojený s kódováním pomocí všeho daného vedle sebe, odděleného nějakým oddělovačem. Případně překódované do nul a jedniček, když to má být pro počítač.

Hlavní kouzlo a krása této komprese, kterou hledám, je komprese věcí, které mají nějaký vnitřní systém.

Třeba:

3.14159

a další miliardy cifer by má ideální komprese měla dokázat zkomprimovat na minimum. Nejprve by poznala, že se jedná o číslo PI (tzn. vymyslela program pro  libovolně přesnou aproximaci čísla PI) a pak jen uložila kolik cifer má být na výstupu.

Na tom multiplikativní konstantě říkající, jestli to bude 1kB nebo 1GB mi nezáleží. Jde o tu schopnost poznání systému a pravidelností v čemkoli.

Jinak číslo PI je zajímavé tím, že všechny jeho cifry se v limitě vyskytují stejně často a zdají se být náhodné. Proto si s tím běžné komprese moc neporadí.

Offline

 

#6 18. 08. 2013 19:30

check_drummer
Příspěvky: 4892
Reputace:   105 
 

Re: Brání gödel a nerozhodnutelnost ideání kompresi dat a nebo ne?

↑ isaak:
Pokud Ti nejde o konstantu K, tak pak ano - ale myslel, jsem o to Ti právě jde - aby byla co nejmenší. Potom tedy mohu na výstup poslat vše co mám na vstupu a dosáhnu K=1. Rovněž si myslím, že lepší komprese než K=1 - v průměru za všechny možné řetězce na vstupu - stejně nedosáhnu, takže je to z tohoto poheldu optimální algoritmus. :-)


"Máte úhel beta." "No to nemám."

Offline

 

#7 20. 08. 2013 09:26

isaak1
Zelenáč
Příspěvky: 1
Škola: MFF UK
Pozice: doktorand
Reputace:   
 

Re: Brání gödel a nerozhodnutelnost ideání kompresi dat a nebo ne?

Neporozuměl jsi vůči čemu konstantu K měřím!!!

Cituji původní dotaz: 'existovala nějaká konstanta K, tak aby zkomprimovaný soubor měl velikost maximálně K krát větší než tolik kolik obsahoval původní vstupní soubor skutečné informace. Teď ale ještě musím vysvětlit co to znamená "množství skutečné informace".'

Množství skutečné informace může splívá s velikostí vstupního souboru, pouze pokud by vstupní soubor obsahoval náhodný bordel.

Ale například pokud bych si ukládal mnoho cifer z čísla PI, tak té skutečné informace je méně než kolik bajtů zabírá nezkomprimovaný zápis.

Konkrétně se dá vstupní posloupnost popsat dvěma fakty:
1. je to číslo PI a je ve formátu textového souboru uloženo v desítkové soustavě. (+ něco technického o tom, že číslice nula je v textovém souboru dnešních počítačů znak s asci kódem 48)
Toto zabírá velikost, která se vejde do další nezajímavé konstanty, třeba c.

2. kolik jeho cifer je třeba uložit
Pokud by bylo potřeba uložit n cifer. Tak tato informace zabírá O(log n) místa.

Tedy chci, aby zkomprimovaný soubor měl velikost maximálně K krát větší než c + log n.

Offline

 

#8 21. 08. 2013 19:52 — Editoval check_drummer (22. 08. 2013 01:33)

check_drummer
Příspěvky: 4892
Reputace:   105 
 

Re: Brání gödel a nerozhodnutelnost ideání kompresi dat a nebo ne?

↑ isaak1:
Nevím, jak chceš definovat množství skutečné informace. Uvedl jsi jen příklad s číslem pi. Co další čísla? $e$, $\pi^2$, $e^{\pi}$? To bys musel mít nějakou množinu známých výrazů, které pak zakóduješ tak, že jde o "číslice mezi n-tým a m-tým místem výrazu v". Ale ta množina výrazů musí být nějaká rozumná, asi nejlépe konečná.

Ve svém prvním příspěvku se odvoláváš na entropii, ale nejsem jist zda příklad s pi a entropie nejsou dvě odlišné věci. Dokonce bych řekl, že posloupnost číslic pi bude z hlediska entropie náhodná a tedy nekomprimovatelná. Tedy je nutné nejprve definovat to množství skutečné informace.
Ale je pravda, že pi půjde asi vygenerovat nějakým algoritmem, jehož zápis by mohl být i podstatně kratší než vlastní vygenerovaná posloupnost.


"Máte úhel beta." "No to nemám."

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson