Действительно простое короткое строковое сжатие

Необходимо всегда переопределять абстрактную функцию.

Таким образом:

  • Абстрактные функции - когда наследник должен обеспечить его собственную реализацию
  • Виртуальный - когда это до наследника для решения
22
задан Peter Mortensen 13 September 2013 в 18:31
поделиться

7 ответов

Моделирование во многом связано с воображаемым миром, поскольку вы создаете классы, которые представляют все аспекты воображаемого Мир. Вам необходимо смоделировать игроков, указать правила игры и динамику игры.

http: //cplus.about. http://code.google.com/apis/ajaxlanguage/documentation/

var text = "¿Dónde está el baño?";
google.language.detect(text, function(result) {
  if (!result.error) {
    var language = 'unknown';
    for (l in google.language.Languages) {
      if (google.language.Languages[l] == result.language) {
        language = l;
        break;
      }
    }
    var container = document.getElementById("detection");
    container.innerHTML = text + " is: " + language + "";
  }
});

И, поскольку вы используете C #, ознакомьтесь с этой статьей о том, как вызывать API из C #. .

ОБНОВЛЕНИЕ: Сжатие или библиотека ZLib, которая проста и невероятно хороша. Поскольку вы будете хранить двоичные данные, сжатый вывод будет прекрасен как есть. Вам нужно будет распаковать его, чтобы использовать как URL.

20
ответ дан 29 November 2019 в 04:57
поделиться

Я бы посоветовал поискать в пространстве имен System.IO.Compression . Есть статья о CodeProject , которая может помочь.

3
ответ дан 29 November 2019 в 04:57
поделиться

Я бы начал с опробования одной из существующих (бесплатных или открытых) zip-библиотек, например http: // www. .icsharpcode.net / OpenSource / SharpZipLib /

Zip должен хорошо работать с текстовыми строками, и я не уверен, стоит ли применять алгоритм сжатия yourserlf ....

0
ответ дан 29 November 2019 в 04:57
поделиться

Какова ваша цель?

  • Более короткий URL? Попробуйте сократить URL-адреса, например http://tinyurl.com/ или http://is.gd/
  • Место для хранения? Проверьте System.IO.Compression. (Или SharpZipLib )
1
ответ дан 29 November 2019 в 04:57
поделиться

Библиотека с открытым исходным кодом SharpZipLib проста в использовании и предоставит вам инструменты сжатия

0
ответ дан 29 November 2019 в 04:57
поделиться

Вы пробовали просто использовать gzip ?

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

0
ответ дан 29 November 2019 в 04:57
поделиться

Как предложено в Принятом ответе , использование сжатия данных не работает для сокращения путей URL, которые уже довольно короткие.

DOTNETZIP имеет класс DeflateSteStream, который обнажает статическую (общую в VB) метод CompressString . Это однострочный способ сжимать строку с использованием Deflate ( RFC 1951 ). Реализация DEFLATE полностью совместима с System.io.compression.deflateStream , но Dotnetzip сжимается лучше. Вот как вы можете использовать его:

string[] orig = {
    "folder1/folder2/page1.aspx",
    "folderBB/folderAA/page2.aspx",
};
public void Run()
{
    foreach (string s in orig)
    {
        System.Console.WriteLine("original    : {0}", s);
        byte[] compressed = DeflateStream.CompressString(s);
        System.Console.WriteLine("compressed  : {0}", ByteArrayToHexString(compressed));
        string uncompressed = DeflateStream.UncompressString(compressed);
        System.Console.WriteLine("uncompressed: {0}\n", uncompressed);
    }
}

Использование этого кода, вот мои результаты теста:

original    : folder1/folder2/page1.aspx
compressed  : 4bcbcf49492d32d44f03d346fa0589e9a9867a89c5051500
uncompressed: folder1/folder2/page1.aspx

original    : folderBB/folderAA/page2.aspx
compressed  : 4bcbcf49492d7272d24f03331c1df50b12d3538df4128b0b2a00
uncompressed: folderBB/folderAA/page2.aspx

Итак, вы можете увидеть «сжатый» байтовый массив, когда он представлен в Hex, дольше, чем оригинал, примерно в 2 раза. Причина в том, что гекс-байт на самом деле 2 ASCII Chars.

Вы можете несколько компенсировать для этого, используя Base-62 вместо базы - 16 (Hex) для представления числа. В этом случае A-Z и A-Z также являются цифрами, давая вам 0-9 (10) + A-Z (+26) + A-Z (+26) = 62 общих цифр. Это значительно сократит выход. Я не пробовал это. еще.


Редактировать
Хорошо, я протестировал кодировщик Base-62. Это сокращает шестигранную строку примерно на половину. Я полагал, что это сократило бы его до 25% (62/16 = ~ 4), но я думаю, что я что-то теряю с дискретизацией. В моих тестах результирующая строка в базе-62 строка составляет примерно той же длины, что и оригинальный URL. Итак, нет, используя сжатие, а затем кодирование базы-62 все еще не очень хороший подход. Вы действительно хотите хеш-ценность.

12
ответ дан 29 November 2019 в 04:57
поделиться
Другие вопросы по тегам:

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