Comment implémenter l'algorithme de compression LZW en C#
Introduction :
Avec la croissance continue des données, le stockage et la transmission des données sont devenus une tâche importante. L'algorithme de compression LZW (Lempel-Ziv-Welch) est un algorithme de compression sans perte couramment utilisé qui peut réduire efficacement la taille des données. Cet article explique comment implémenter l'algorithme de compression LZW en C# et donne des exemples de code spécifiques.
using System; using System.Collections.Generic; using System.Text; class LZWCompression { public static List<int> Compress(string data) { Dictionary<string, int> dictionary = new Dictionary<string, int>(); List<int> compressedData = new List<int>(); int currentCode = 256; for (int i = 0; i < 256; i++) { dictionary.Add(((char)i).ToString(), i); } string currentString = ""; foreach (char c in data) { string newString = currentString + c; if (dictionary.ContainsKey(newString)) { currentString = newString; } else { compressedData.Add(dictionary[currentString]); dictionary.Add(newString, currentCode); currentCode++; currentString = c.ToString(); } } if (currentString != "") { compressedData.Add(dictionary[currentString]); } return compressedData; } public static string Decompress(List<int> compressedData) { Dictionary<int, string> dictionary = new Dictionary<int, string>(); StringBuilder decompressedData = new StringBuilder(); int currentCode = 256; for (int i = 0; i < 256; i++) { dictionary.Add(i, ((char)i).ToString()); } int previousCode = compressedData[0].Value.ToString(); decompressedData.Append(dictionary[previousCode]); for (int i = 1; i < compressedData.Count; i++) { int currentCode = compressedData[i]; if (dictionary.ContainsKey(currentCode)) { decompressedData.Append(dictionary[currentCode]); string newEntry = dictionary[previousCode] + dictionary[currentCode][0]; dictionary.Add(currentCode, newEntry); previousCode = currentCode; } else { string newEntry = dictionary[previousCode] + dictionary[previousCode][0]; decompressedData.Append(newEntry); dictionary.Add(currentCode, newEntry); previousCode = currentCode; } } return decompressedData.ToString(); } }
Ce qui suit est un exemple d'utilisation de l'algorithme de compression LZW :
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { string originalData = "AAAAABBBBCCCCCDDDDDEE"; Console.WriteLine("原始数据: " + originalData); List<int> compressedData = LZWCompression.Compress(originalData); Console.WriteLine("压缩后的数据: " + string.Join(",", compressedData)); string decompressedData = LZWCompression.Decompress(compressedData); Console.WriteLine("解压缩后的数据: " + decompressedData); Console.ReadLine(); } }
Dans l'exemple de code ci-dessus, nous utilisons la méthode LZWCompression
类进行了数据的压缩与解压缩,其中压缩使用了Compress
方法,解压缩使用了Decompress
.
Conclusion :
Cet article présente comment implémenter l'algorithme de compression LZW en C# et donne des exemples de code spécifiques. L'algorithme de compression LZW est un algorithme de compression sans perte couramment utilisé et efficace qui peut nous aider à réduire la taille des données et à améliorer l'efficacité du stockage et de la transmission des données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!