Сжатие ASCII представляет в виде строки в C

1. Использование массива символов:

public String reverseString(String inputString) {
    char[] inputStringArray = inputString.toCharArray();
    String reverseString = "";
    for (int i = inputStringArray.length - 1; i >= 0; i--) {
        reverseString += inputStringArray[i];
    }
    return reverseString;
}

2. Использование StringBuilder:

public String reverseString(String inputString) {
    StringBuilder stringBuilder = new StringBuilder(inputString);
    stringBuilder = stringBuilder.reverse();
    return stringBuilder.toString();
}

ИЛИ

return new StringBuilder(inputString).reverse().toString();
11
задан NickB 8 July 2009 в 10:09
поделиться

5 ответов

ZLib всегда к вашим услугам - у нее очень мало накладных расходов для случаев, когда строка содержит несжимаемые данные, она относительно быстра, бесплатна и может быть легко интегрирована в C и C ++ программы.

14
ответ дан 3 December 2019 в 02:02
поделиться

Я не уверен, что методы сжатия zlib или LZW будут работать хорошо в случае индивидуального сжатия коротких строк размером менее 250 байт. Оба, как правило, требуют создания довольно большого словаря до того, как будет замечен значительный выигрыш от сжатия.

Может быть, простое кодирование Хаффмана с фиксированным деревом кодирования или общее для всех экземпляров строк? Кроме того, вы видели кодировку ZSCII, используемую для сжатия коротких строк на микрокомпьютерах с ограниченным объемом памяти в 80-х?

текст ссылки

4
ответ дан 3 December 2019 в 02:02
поделиться

Zlib определенно ваш друг, но обязательно выполните несколько тестов, чтобы определить среднюю длину строки, при которой сжатие начинает приносить пользу из-за небольших накладных расходов на заголовки сжатия.

Например, вы можете обнаружить, что меньше 20 символов, сжатая строка на самом деле больше, и поэтому сжимаются только более длинные строки.

3
ответ дан 3 December 2019 в 02:02
поделиться

Зачем использовать длину 4 байта, когда длина строки составляет 10–250 байтов, используйте длину 1 байт, которая сэкономит вам 3 байта на одну строку.

Являются ли данные только текстовыми, то есть 0-9 Az или какой-то подмножество ?? если это так, перекодируйте его, чтобы использовать это подмножество и сохранить несколько бит на символ.

Теперь посмотрите http://gnosis.cx/publish/programming/compression_primer.html в Хаффмане раздел кодирования и раздел lempel-zev.

Это должно помочь вам начать работу.

3
ответ дан 3 December 2019 в 02:02
поделиться

Большинство алгоритмов сжатия не очень хорошо работают с короткими строками. Вот несколько алгоритмов сжатия, предназначенных для сжатия коротких текстовых строк на английском языке. Хотя они могут обрабатывать любой произвольный байт в строке открытого текста, такие байты часто делают «сжатые» данные длиннее, чем открытый текст. Поэтому для компрессора рекомендуется хранить «несжимаемые» данные без изменений и устанавливать «буквальный» флаг для таких данных (как предложил Стив Джессоп).

  • «кодировка base 40»: максимальное сжатие 3: 2
  • «Стандартный код Zork для обмена информацией» (ZSCII): максимальное сжатие 3: 2
  • сжатие пары байтов : максимальное сжатие 2: 1
  • статическая таблица Хаффмана, совместно используемая всеми строками (как было предложено cygil).
    • в идеале, сформированный из точных частот символов всех ваших реальных данных.
    • Варикод: максимальное сжатие 2: 1
  • сжатие PalmDoc (сжатие пар байтов + простой вариант LZ77).
10
ответ дан 3 December 2019 в 02:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: