возможные наборы манипуляций с сохраняющим вывод кодом - PullRequest
1 голос
/ 16 июля 2010

Это теоретический вопрос, поэтому ожидайте, что многие детали здесь не вычисляются на практике или даже в теории.

Допустим, у меня есть строка s, которую я хочу сжать.Результатом должен быть самораспаковывающийся двоичный файл (может быть x86 asm, но также может быть и другой гипотетический язык низкого уровня, полный по Тьюрингу), который выдает s.

Теперь мы можем легко перебрать все возможныедвоичные файлы / программы, упорядоченные по размеру.Пусть B_s будет подсписком этих двоичных файлов, которые выводят s (конечно, B_s не вычислимо).

Поскольку каждый набор натуральных чисел должен иметь минимум, должна быть наименьшая программаb_min_s in B_s

Из s я также могу построить каноническую программу b_cano_s, которая просто выводит s тривиальным способом.Т.е. размер b_cano_s будет в O(#s) - если мы подумаем о ELF с сегментами данных, у нас даже будет #b_cano_s ~ #s.

Есть ли набор A возможных операций над двоичными файлами, которые:

1.Сохранит вывод.

2a.Учитывая b_cano_s, мы можем каким-то образом поступить с помощью операций A в b_min_s.

(2b. Учитывая b_cano_s, мы можем прибыть во все программы в B_s.)

для всех возможных строк s.

Условия 1 + 2a слабее условий 1 + 2b.Может быть, если есть такой набор A, мы автоматически получим оба.(Это так?)

Существует ли такой набор A?Я думал о некоторых очевидных операциях, таких как поиск повторяющихся строк и сокращение этого.Или некоторые другие распространенные методы сжатия.Тем не менее, этого, вероятно, недостаточно для того, чтобы прийти ко всем программам B_s, и мое намерение также не обязательно означает b_min_s по той же причине.

Если она существует, можем ли мы выразить ее, т. Е. Можно ли вычислить

1 Ответ

0 голосов
/ 16 июля 2010

Вы должны связать свои родственные предыдущие вопросы .

2a. Как уже отмечалось, вы не можете определить b_min_s, потому что это приводит к парадоксу. В результате я не думаю, что вы можете доказать, что операции в A достаточны для того, чтобы свести их к минимуму.

2b. Вы можете использовать грубую силу B_s, но это бесконечное множество, и процедура не заканчивается. Однако для каждой программы в B_s вы можете вычислить манипуляции от b_cano_s до B_s. Однако это не означает, что эти возможные операции будут иметь смысл. Кажется, что такие операции, как «удалить символы в этом диапазоне», «вставить символ в этой позиции» квалифицируются.

...