Как бы вы сжали 256-байтовую строку, состоящую только из «F» и «G»?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как бы вы сжали 256-байтовую строку, состоящую только из «F» и «G»?

Сообщение Anonymous »

Теоретически, насколько можно сжать эту 256-байтовую строку, содержащую только «F» и «G»?

FGFFFFFFGFFFFGGGGGGGGGGGGGFFFFFGGGGGGGGGGGGFFGFGGGFFFGGGGGGGGFFFFFFFFFFFFFFFFFFFFFGGGGGGFFFGFGGFGFFFFGFFGFGGFFFGFGGFGFFFGFGGGGFGGGGGGGGGFFFFFFFFGGGGGGGFFFFFGFFGGGGGGGFFFGGGFFGGGGGGFFGGGGGGGGGFFGFFGFGFFGFFGFFFFGGGGFGGFGGGFFFGGGFFFGGGFFGGFFGGGGFFGFGGFFFGFGGF

Хотя я не вижу реального применения, интригует тот факт, что алгоритмы сжатия, такие как gz, bzip2 и deflate, имеют в этом случае недостаток.
Ну, у меня есть ответ и код C# для демонстрации:

using System;

public class Program
{
public static void Main()
{
string testCase = "FGFFFFFFGFFFFGGGGGGGGGGGGGFFFFFGGGGGGGGGGGGFFGFGGGFFFGGGGGGGGFFFFFFFFFFFFFFFFFFFFFGGGGGGFFFGFGGFGFFFFGFFGFGGFFFGFGGFGFFFGFGGGGFGGGGGGGGGFFFFFFFFGGGGGGGFFFFFGFFGGGGGGGFFFGGGFFGGGGGGFFGGGGGGGGGFFGFFGFGFFGFFGFFFFGGGGFGGFGGGFFFGGGFFFGGGFFGGFFGGGGFFGFGGFFFGFGGF";
uint[] G = new uint[8]; // 256 bit

for (int i = 0; i < testCase.Length; i++)
G[(i / 32)] += (uint)(((testCase & 1)) (i % 32)) | 70);

Console.WriteLine(testCase);
Console.WriteLine(gTestCase);

if (testCase == gTestCase)
Console.WriteLine("OK.");
}
}


Это может звучать глупо, но относительно того, как я могу улучшить алгоритм, чтобы это 256-битное десятичное число можно было дополнительно сжать, у меня есть следующая идея:

(Примечание: ниже представлены разные темы для обсуждения, но они связаны с дальнейшим сжатием 256 байт)

Из моего понимания реализации Microsoft Decimal,


96-бит + 96-бит = 128-битный десятичный код.


Это означает, что 192-байтовая строка, содержащая любые два различных символа, может быть закодирована как 128-битное число вместо 192-битного числа. Верно?

Мои вопросы:

  • Может ли Я делаю то же самое с 256-байтовыми строками?

    (путем разделения каждого из них на пару двух чисел перед добавлением этих двух в виде десятичного числа короче 256-битного числа) )?
  • Как расшифровать вышеупомянутое 128-битное десятичное число обратно в пару двух 96-битных чисел, сохраняя при этом размер сжатых данных менее 192 бит?


Извините за мой предыдущий довольно расплывчатый вопрос.

Следующий код покажет, как сложить два 96-символьных кода. «Двоичные» строки как 128-символьные двоичные файлы строка.

public static string AddBinary(string a, string b) // 96-char binary strings
{
int[] x = { 0, 0, 0 };
int[] y = { 0, 0, 0 };

string c = String.Empty;

for (int z = 0; z < a.Length; z++)
x[(z / 32)] |= ((byte)(a[a.Length - z - 1]) & 1) (z % 32)) | 48);

return c.Contains("1") ? c.TrimStart('0') : "0";
}


Подробнее здесь: https://stackoverflow.com/questions/593 ... ly-f-and-g
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»