Paradoxer om datakomprimering

Paradoxer om datakomprimering Oppgave med datakomprimering i sin enkleste form kan referere til tall og deres betegnelser. Tall kan betegnes med numeriske ord («elleve» for tallet 11), matematiske uttrykk («to opphÞyd i tjue» for 1048576), strengeuttrykk («fem niere» for 99999), egennavn («dyrets tall» for 666, «Äret Turing dÞde» for 1954), eller vilkÄrlige kombinasjoner av dem. Enhver betegnelse som samtalepartneren kan entydig identifisere hvilket tall som menes, er gyldig. Det er Äpenbart at det er mer effektivt Ä informere samtalepartneren om «faktoriell Ätte» enn den tilsvarende betegnelsen «fÞrti tusen tre hundre og tyve». Her oppstÄr det et logisk spÞrsmÄl: hva er den korteste betegnelsen for et gitt tall?

Filosofen Bertrand Russell publiserte i 1908 «Berry-paradokset», som tar opp spÞrsmÄlet om tallbetegnelser fra den motsatte siden: hva er det minste tallet som ikke kan betegnes med Ätti bokstaver?
Et slikt tall mÄ eksistere: av Ätti russiske bokstaver og mellomrom kan man lage totalt 3480 betegnelser, noe som betyr at man ikke kan betegne mer enn 3480 tall med bruk av Ätti bokstaver. Dermed er det umulig Ä betegne et tall som ikke er stÞrre enn 3480.

Dermed vil dette tallet ha betegnelsen «det minste tallet som ikke kan betegnes med Ätti bokstaver», som inneholder bare 78 bokstaver! PÄ den ene siden mÄ dette tallet eksistere; pÄ den andre siden, hvis dette tallet eksisterer, sÄ samsvarer ikke betegnelsen med det. Et paradoks!

Den enkleste mÄten Ä avfeie dette paradokset pÄ, er Ä referere til uformelle verbale betegnelser. Man kan si at hvis bare en spesifikk sett med uttrykk var tillatt i betegnelser, sÄ «det minste tallet som ikke kan betegnes med Ätti bokstaver» ville det ikke vÊrt en gyldig betegnelse, mens prakiske nyttige betegnelser som «faktoriell Ätte» ville forbli gyldige.

Finnes det formelle mÄter Ä beskrive sekvensen (algoritmen) av handlinger pÄ tall? Ja, og i overflod - de kalles programmeringssprÄk. La oss bruke programmer (for eksempel i Python) i stedet for verbale betegnelser, som kan skrive ut de nÞdvendige tallene. For eksempel, for fem niere, ville programmet print("9"*5). Vi vil fortsatt vÊre interessert i den korteste programmet for et gitt tall. Lengden pÄ et slikt program kalles Kolmogorov-kompleksitet til tallet; dette er det teoretiske grensepunktet for hvor mye et gitt tall kan komprimeres.

I stedet for Berry-paradokset kan vi nÄ vurdere et lignende: hva er det minste tallet som ikke kan skrives ut med et kilobyte-program?

Vi vil tenke likt som tidligere: det finnes 2561024 kilobyte-tekster, derfor kan kilobyte-programmer skrive ut ikke mer enn 2561024 tall. Det betyr at et visst tall, som ikke overstiger 2561024, ikke kan bli skrevet ut pÄ denne mÄten.

Men vi skal skrive et Python-program som genererer alle mulige kilobyte-tekster, kjÞrer dem, og hvis de skriver ut et tall, legger det tallet til en oppnÄelig liste. Etter Ä ha sjekket alle 2561024 mulighetene, uansett hvor lang tid det mÄtte ta - programmet leter etter det minste tallet som mangler i listen, og skriver ut dette tallet. Det virker opplagt at et slikt program vil fÄ plass innenfor en kilobyte kode - og det vil skrive ut det tallet som ikke kan skrives ut med et kilobyte-program!

Hva er sÄ fellen nÄ? Den kan ikke lenger forklares ved uformelle betegnelser!

Hvis du er bekymret for at programmet vÄrt vil kreve en astronomisk mengde minne for Ä fungere - en ordliste (eller bitarray) av 2561024 elementer - sÄ kan alt det samme gjÞres uten det: for hvert av de 2561024 tallene, prÞv alle 2561024 mulige programmer en etter en, til en passende program blir funnet. Det er ikke viktig at en slik prÞving vil ta veldig lang tid: etter Ä ha sjekket mindre enn (2561024)2 par av et tall og et program vil det avsluttes, og finne det dyrebare tallet.

Eller vil det ikke avsluttes? For blant alle programmene som vil bli prĂžvd, vil vi mĂžte while True: pass (og dens funksjonelle analoger) - og videre testing av et slikt program vil ikke fĂžre noe sted!

I motsetning til Berry-paradokset, hvor fellen lĂ„ i de uformelle betegnelsene, har vi i dette tilfellet en godt kamuflert omformulering av «stoppproblemet». Saken er at det er umulig Ă„ fastslĂ„ et programs utdata pĂ„ en endelig tid. Spesielt er Kolmogorov-kompleksitet uberegnelig: det finnes ingen algoritme som gjĂžr det mulig Ă„ finne lengden pĂ„ det korteste programmet som skriver ut et gitt tall; dermed finnes det heller ingen lĂžsning for Berry-problemet — Ă„ finne lengden pĂ„ den korteste verbale betegnelsen for et gitt tall.

Kilde: habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster