2009-08-20 7 views
6

Zastanawiam się, czy istnieje algorytm kompresji, w powszechnym użyciu dzisiaj, który zawiera stały punkt, tj. Plik tożsamości.Naprawiono punkt na algorytmie kompresji powszechnie używanym w dzisiejszych czasach

Aby wyjaśnić, nazwijmy C : byte[] -> byte[] funkcją reprezentującą algorytm kompresji. Chcę wiedzieć, czy istnieje (i co to jest, jeśli jest to możliwe do określenia w rozsądnym czasie) plik f takie, że

C(f) = f

Oznacza to, że plik, który podczas ściskania przez odpowiednie, powszechnie znany algorytm kompresji powszechnie używany w dzisiejszych czasach, w wyniku tego powstanie.

Czy znasz takie zjawisko?

Odpowiedz

4
+0

Fajnie! A propos, czy masz kopię artykułu z drugiego linku? Facet powiedział, że go zgubił ... Naprawdę byłbym wdzięczny za przeczytanie tego! Dziękuję za odpowiedź! –

+0

@Bruno Reis: Przepraszam, obawiam się, że nie. –

+0

Schludny. Warto zauważyć, że chociaż dekompresja pierwszego wyniku daje wynik, to kompresja nie działa. Odpowiedź Briana na ten temat oczywiście się rozwija. –

3

Uwaga: Zamiast pedantic odpowiedź.

Istnieje wiele przypadków, w których D (f) = f (D definiowane jako dekompresja). Kompresja nie jest jednak tak precyzyjnie zdefiniowana. W przypadku większości algorytmów kompresji różne implementacje algorytmu kompresji dają różne pliki wyjściowe (o różnych rozmiarach). Rozważ dwa programy, 1 i 2. Aby zapewnić pełną interoperacyjność, konieczne jest, aby D1 (F) było równe D2 (F) dla wszystkich ważnych F. Podobnie, konieczne jest, aby D2 (C2 (f)) == D2 (C1 (F)) == D1 (C1 (F)) == D1 (C2 (F)), dla wszystkich ważnych F. Jednak zupełnie nie jest konieczne, aby C1 (F) == C2 (F), a to w rzeczywistości rzadko walizka.

Jest więc mało prawdopodobne, aby skompresować takie kwerendy, aby uzyskać ten sam plik, chyba że użyje się tego samego programu, który został użyty do jego wygenerowania (co jest mało prawdopodobne, ponieważ takie kwanty są zwykle wykonane ręcznie, z C (F) nigdy nawet nie testowane).

O ile jest możliwe (naprawdę banalne!), Aby wytworzyć program, dla którego C (F) == F dla jakiegoś F, większość ludzi ma tendencję do wskazywania jako quines, lepiej zdefiniowanego przypadku, w którym D (F) == F (od D1 (F) == D2 (F) dla wszystkich poprawnych, zgodnych dekompresji formatu F, zakładając, że F jest prawidłowe).

Są więc prawdopodobne przypadki, w których C (F) == F, ale ogólnie jest to niewłaściwe pytanie, a zamiast tego należy poprosić o przypadki, w których D (F) == F ... które inne osoby odpowiedział na to pytanie.

+0

Brian, masz absolutną rację! Powinienem zadać przeciwne pytanie. Dzięki za odpowiedź! –