Я закончил алгоритм сжатия/декомпрессии Хаффмана. Я использую строку для проверки ввода, например «foo bar» 7x8 = 56 дает мне 10010110111011100 = 17 + - 35% от первоначального размера сжимается обратно.Сохранить сжатый файл/строку huffman
Но теперь я хочу сохранить его как файл, может ли кто-нибудь объяснить мне подход, как это сделать.
При необходимости я могу опубликовать источник моего заявления.
Моя форма просто CODE (Также есть класс cNode для прогулок по дереву)
class cZU
{
private List<cNode> cNodes = new List<cNode>();
public cNode Root { get; set; }
public Dictionary<char, int> Frequencies = new Dictionary<char, int>();
public void mWalktree(string source)
{
for (int i = 0; i < source.Length; i++)
{
if (!Frequencies.ContainsKey(source[i]))
{
Frequencies.Add(source[i], 0);
}
Frequencies[source[i]]++;
}
foreach (KeyValuePair<char, int> symbol in Frequencies)
{
cNodes.Add(new cNode() { Symbol = symbol.Key, Frequency = symbol.Value });
}
while (cNodes.Count > 1)
{
List<cNode> orderedcNodes = cNodes.OrderBy(cNode => cNode.Frequency).ToList<cNode>();
if (orderedcNodes.Count >= 2)
{
// Take first two items
List<cNode> taken = orderedcNodes.Take(2).ToList<cNode>();
// Create a parent cNode by combining the frequencies
cNode parent = new cNode()
{
Symbol = '*',
Frequency = taken[0].Frequency + taken[1].Frequency,
Left = taken[0],
Right = taken[1]
};
cNodes.Remove(taken[0]);
cNodes.Remove(taken[1]);
cNodes.Add(parent);
}
this.Root = cNodes.FirstOrDefault();
}
}
public BitArray Encode(string source)
{
List<bool> encodedSource = new List<bool>();
for (int i = 0; i < source.Length; i++)
{
List<bool> encodedSymbol = this.Root.Traverse(source[i], new List<bool>());
encodedSource.AddRange(encodedSymbol);
}
BitArray bits = new BitArray(encodedSource.ToArray());
return bits;
}
Сейчас я просто делаю это нравится:
string = "foo bar";
ZU.mWalktree(inputstring);
И только вывод кодированный строковый пользователь, но мне нужно сохранить закодированный файл в .txt, и мой вопрос заключается в том, что мне нужно сохранить в этом .txt-файле, чтобы позже декодировать файл.
Надеюсь, что это очистит.
Да, это именно то, что мне нужно, большое спасибо за помощь! – user2519968