C#에서 LZW 압축 알고리즘을 구현하는 방법
소개:
데이터가 지속적으로 증가함에 따라 데이터 저장 및 전송이 중요한 작업이 되었습니다. LZW(Lempel-Ziv-Welch) 압축 알고리즘은 데이터 크기를 효과적으로 줄일 수 있는 일반적으로 사용되는 무손실 압축 알고리즘입니다. 이 문서에서는 C#에서 LZW 압축 알고리즘을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다.
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(); } }
다음은 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(); } }
위 코드 예제에서는 다음을 사용합니다. LZWCompression
类进行了数据的压缩与解压缩,其中压缩使用了Compress
方法,解压缩使用了Decompress
방법.
결론:
이 문서에서는 C#에서 LZW 압축 알고리즘을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. LZW 압축 알고리즘은 일반적으로 사용되며 데이터 크기를 줄이고 데이터 저장 및 전송 효율성을 향상시키는 데 도움이 되는 효과적인 무손실 압축 알고리즘입니다.
위 내용은 C#에서 LZW 압축 알고리즘을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!