Я знаю, что я немного опоздал, но я нашел это через Google, и кто-то другой мог сделать то же самое, поэтому я опубликую свой ответ: очевидное решение - a) impossible
, на что также указал Джон Скит ( и кстати есть много доказательств по всему интернету). Я не подвергаю сомнению невозможность сжать случайные данные, просто чтобы быть ясным с самого начала; Я понял теорию, которая стоит за ней, и, если вы спросите меня, я доверяю математике. : D
Но, если нам позволят мыслить в поперечном направлении , мы можем определенно воспользоваться тем, что вопрос не является четко определенным, то есть он не дает строгого определения «алгоритма сжатия». "и свойств, которые он должен иметь (но для уменьшения некоторых файлов без расширения кого-либо еще).
Кроме того, он не накладывает каких-либо условий на файлы, подлежащие сжатию, единственное, что его интересует, - это "сделать некоторые файлы меньше, а файлов больше нет" .
Тем не менее, теперь у нас есть как минимум два способа показать, что на самом деле такой алгоритм существует:
Мы можем использовать имя файла для хранения некоторой информации о файле (или даже всего файла, если файловая система позволяет это, уменьшая таким образом каждый файл до 0 бит).
Можно просто решить оставить нетронутым каждый файл, кроме одного, уменьшив его до 0 бит и переименовав его с заранее заданным именем.
Я согласен, что это может считаться мошенничеством, но опять же, в начальном вопросе нет никаких ограничений, и этот алгоритм будет эффективно достигать цели (поскольку никто не переименовывает файл, поэтому это будет очень плохой выбор дизайна, кроме бессмысленно).
Мы можем ограничить количество файлов, подлежащих сжатию, скажем, по крайней мере до X
битов. Еще раз, тривиальным решением было бы оставить каждый файл без изменений, кроме одного, который мы можем уменьшить, чтобы он соответствовал файлу, размер которого меньше X
бит.
Теперь у нас есть алгоритм, который, цитируя дословно, делает некоторые файлы меньше, а файлов больше нет; однако он выполняет ограничение на все возможные входные данные (т. е. не может обрабатывать все файлы).
Тем, кто утверждает, что это не имеет никакого практического применения, я говорю, что согласен с вами ... но эй, это теория, и это была просто теоретическая диссертация. ;)
Очевидно, что если бы мне пришлось пройти тест и ответить на этот вопрос, я бы поставил жирный крестик на a)
, а затем просто продолжил, не слишком задумываясь об этом.
Тем не менее, вполне возможно показать, что, поскольку естественный язык по своей сути неоднозначен и вопрос формально не выражен, каждый из других возможных ответов не обязательно является неправильным: ставить правильные условия и в конечном итоге более четко указывать, что имеется в виду. с помощью определенных концепций мы можем по закону быть в состоянии достичь цели любого из других перечисленных вариантов, совершая какие-то хитрости и заставляя программу достичь желаемого поведения.