current = parent; parent = huffman[parent].parent; }
huffmanCode[i] = new string(codeTemp.Reverse().ToArray()); } return huffmanCode; } #endregion
4:模板生成好了,我们就要对指定的测试数据进行压缩处理
复制代码 代码如下: #region 对指定字符进行压缩 /// <summary> /// 对指定字符进行压缩 /// </summary> /// <param></param> /// <param></param> /// <param></param> public string Encode(string[] huffmanCode, string[] alphabet, string test) { //返回的0,1代码 string encodeStr = string.Empty;
//对每个字符进行编码 for (int i = 0; i < test.Length; i++) { //在模版里面查找 for (int j = 0; j < alphabet.Length; j++) { if (test[i].ToString() == alphabet[j]) { encodeStr += huffmanCode[j]; } } }
return encodeStr; } #endregion
5: 最后也就是对压缩的数据进行还原操作。
复制代码 代码如下: #region 对指定的二进制进行解压 /// <summary> /// 对指定的二进制进行解压 /// </summary> /// <param></param> /// <param></param> /// <param></param> /// <param></param> /// <returns></returns> public string Decode(HuffmanTree[] huffman, int huffmanNodes, string[] alphabet, string test) { string decodeStr = string.Empty;
//所有要解码的字符 for (int i = 0; i < test.Length; ) { int j = 0; //赫夫曼树结构模板(用于循环的解码单个字符) for (j = huffmanNodes - 1; (huffman[j].left != 0 || huffman[j].right != 0); ) { if (test[i].ToString() == "0") { j = huffman[j].left; } if (test[i].ToString() == "1") { j = huffman[j].right; } i++; } decodeStr += alphabet[j]; } return decodeStr; }
#endregion
最后上一下总的运行代码
复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text;
(编辑:焦作站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|