2010-07-16 10 views
1

Il s'agit d'une question théorique, alors attendez-vous à ce que de nombreux détails ne soient pas calculables en pratique ou même en théorie.ensembles possibles de manipulations de code préservant la sortie

Disons que j'ai une chaîne s que je veux compresser. Le résultat devrait être un binaire auto-extractible (peut être x86 asm mais peut aussi être un autre langage hypothétique Turing-complete low-level) qui produit s.

Maintenant, nous pouvons facilement parcourir tous les binaires/programmes possibles, classés par taille. Soit B_s être la sous-liste de ces binaires qui sortent s (bien sûr B_s est uncomputable).

Comme chaque ensemble d'entiers positifs doit avoir un minimum, il doit y avoir un plus petit programme b_min_s dans B_s

De s, je peux aussi construire un programme canonique b_cano_s qui sort juste s de manière triviale. C'est à dire. la taille de b_cano_s sera en O(#s) - si nous pensons à ELF avec des segments de données, nous aurons même #b_cano_s ~ #s.

Y at-il un ensemble A d'opérations possibles sur les binaires qui:

1. Préserve la sortie.

2a. Compte tenu b_cano_s, nous pouvons arriver en quelque sorte par des opérations de A au b_min_s.

(2b. Compte tenu b_cano_s, nous pouvons arriver à tous les programmes B_s.)

pour toutes les chaînes possibles s.

Les conditions 1 + 2a sont plus faibles que les conditions 1 + 2b. Peut-être, s'il y a un tel ensemble A, nous aurons automatiquement les deux, cependant. (Est-ce le cas?)

Existe-t-il un tel ensemble A? Je pensais à des opérations évidentes, comme chercher des chaînes répétées et raccourcir cela. Ou certaines des autres méthodes de compression courantes. Cependant, ce n'est probablement pas suffisant pour arriver à tous les programmes B_s et mon intention ne dit pas nécessairement non plus à b_min_s pour la même raison.

S'il existe, pouvons-nous l'exprimer, c'est-à-dire s'il est calculable?

Répondre

0

Vous devez lier votre previous questions associé.

2a. Comme indiqué, vous ne pouvez pas déterminer b_min_s, car cela entraîne un paradoxe. Par conséquent, je ne pense pas que vous puissiez prouver que les opérations dans A sont suffisantes pour s'y réduire.

2b. Vous pouvez forcer la force brute B_s, mais il s'agit d'un ensemble infini et la procédure est sans fin. Toutefois, pour chaque programme dans B_s, vous pouvez calculer une manipulation de b_cano_s à B_s. Cependant, cela n'implique pas que ces opérations possibles seront significatives. Il semble que des opérations telles que "supprimer des caractères dans cette gamme", "insérer un caractère à cette position" soient admissibles.