Heim > Artikel > Backend-Entwicklung > So implementieren Sie den LZW-Komprimierungsalgorithmus in C#
So implementieren Sie den LZW-Komprimierungsalgorithmus in C#
Einführung:
Mit dem kontinuierlichen Datenwachstum sind Datenspeicherung und -übertragung zu einer wichtigen Aufgabe geworden. Der LZW-Komprimierungsalgorithmus (Lempel-Ziv-Welch) ist ein häufig verwendeter verlustfreier Komprimierungsalgorithmus, der die Datengröße effektiv reduzieren kann. In diesem Artikel wird die Implementierung des LZW-Komprimierungsalgorithmus in C# vorgestellt und spezifische Codebeispiele gegeben.
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(); } }
Das Folgende ist ein Beispiel für die Verwendung des LZW-Komprimierungsalgorithmus:
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(); } }
Im obigen Codebeispiel verwenden wir die LZWCompression
类进行了数据的压缩与解压缩,其中压缩使用了Compress
方法,解压缩使用了Decompress
-Methode.
Fazit:
Dieser Artikel stellt die Implementierung des LZW-Komprimierungsalgorithmus in C# vor und gibt spezifische Codebeispiele. Der LZW-Komprimierungsalgorithmus ist ein häufig verwendeter und effektiver verlustfreier Komprimierungsalgorithmus, der uns dabei helfen kann, die Datengröße zu reduzieren und die Effizienz der Datenspeicherung und -übertragung zu verbessern.
Das obige ist der detaillierte Inhalt vonSo implementieren Sie den LZW-Komprimierungsalgorithmus in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!