continue; } } if (minNode1 != null && minNode2 != null) { if (huffman[i].weight <= minNode1.weight) { //将min1临时转存给min2 minNode2 = minNode1; minNode1 = huffman[i];
//记录在数组中的下标 minIndex2 = minIndex1; minIndex1 = i; } else { if (huffman[i].weight < minNode2.weight) { minNode2 = huffman[i];
minIndex2 = i; } } } } } } #endregion
3:对哈夫曼树进行编码操作,形成一套“模板”,效果跟ASC模板一样,不过一个是不等长,一个是等长。
复制代码 代码如下: #region 赫夫曼编码 /// <summary> /// 赫夫曼编码 /// </summary> /// <param></param> /// <param></param> /// <param></param> public string[] HuffmanCoding(HuffmanTree[] huffman, int leafNum) { int current = 0;
int parent = 0;
string[] huffmanCode = new string[leafNum];
//四个叶子节点的循环 for (int i = 0; i < leafNum; i++) { //单个字符的编码串 string codeTemp = string.Empty;
current = i;
//第一次获取最左节点 parent = huffman[current].parent;
while (parent != 0) { //如果父节点的左子树等于当前节点就标记为0 if (current == huffman[parent].left) codeTemp += "0"; else codeTemp += "1";
(编辑:焦作站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|