Saboteur, я же не говорю, что можно сжать любую случайную последовательность. Я утверждаю, что любая случайная последовательность не обязательно является несжимаемой. Существуют алгоритмы, последовательности и случайности, которые можно сжать нестандартными способами.
Тот факт, что автор не задал ограничения ещё вовсе не значит, что:
а) последовательность очень длинная или наоборот очень короткая,
б) последовательность действительно случайная, а не псевдослучайная,
в) последовательность имеет равномерный закон распределения,
г) неизвестна природа ГСЧ.
Та же логика относится и к алфавиту. Между прочим, демагогию разводите вы и ваши друзья, переводя стрелки с вопроса и ответов на гадание на кофейной гуще и разнообразные теоретические рассуждения.
Роман, а если он будет много короче? В любой последовательности можно найти закономерность, просто это потребует какого-то количества ресурсов вычислительной системы. А эффективность определяется энтропией и ограничениями по ресурсам.
Кстати, не забывайте и про распределение. А то формулировка "может сжать, а может и нет - 50 на 50" некорректна. Это как взять случайный инструмент и попытаться забить им гвозди. Да, конечно,
если мы возьмём случайные данные и прогоним их через случайный алгоритм, то получим случайный результат. Вот так новость!
Robur, да, так и есть. Я же написал про архиватор бабушкина. Вопрос только во времени кодирования. Если вам не известна исходная последовательность, то вам придётся запрограммировать все возможные алгоритмы.
Роман, нет, я просто предостерегаю автора поверить вам. Один частный пример может опровергнуть всю теорию. А вот утверждать такие большие вещи - это действительно уг.
Saboteur, так а вы прочитайте ответы. Люди утверждают, что сжать невозможно. Вот вам несколько примеров, что это очень даже возможно.
А насчёт топикстартера- случайная последовательность не бывает дискретными цифрами,если только это не квантовый генератор. Также любой алфавит можно перевести в любой другой алфавит с точностью до количества символов. Кроме того, не забывайте, что он не указал и минимальную длину последовательности. Поэтому мой пример все ещё актуален.
Space Purr, просто условный переход выполняется быстрее чем сопоставление с образцом. Поэтому с теоретической точки зрения можно сэкономить несколько тактов. Но это всё несущественно.
Однако, когда ветвлений много, оверхед уже даёт условный переход (т.к. условие проверяется каждый раз). Вот тут про это написано: https://stackoverflow.com/a/395965
Существует огромное количество фишек. Например, вместо массива структур лучше использовать структуры массивов; вместо структур лучше создавать классы, если они большие; вместо switch лучше использовать if... Просто используйте профайлер и всё, не надо запоминать выигрывать лишние 100 мс или 100 кб.
Adamos, существует даже несколько алгоритмов. Например, можно просто попросить пользователя ввести склонения. Или можно обучить нейросеть на клиентской базе. Или можно просто учесть множество правил и нюансов.