【问题标题】:Huffman algorithm from Cormen来自 Cormen 的霍夫曼算法
【发布时间】:2021-02-21 03:22:40
【问题描述】:

我正在尝试使用multimap<int, NODE*> 编写Huffman coding tree,其中NODE 只是一个经典的树节点。 所以我写了这个方法:

this->CreateMapTree();
int n = (int)tree.size();
pair<int, NODE*> x, y, z;

for (int i = 0; i < n-1; ++i)
{
    x = *tree.begin(); tree.erase(tree.begin());
    y = *tree.begin(); tree.erase(tree.begin());

    z.second = new NODE;

    z.second->left = y.second;
    z.second->right = x.second;
    z.first = x.first + y.first;

    tree.insert(z);
}//after loop there is only one element in the tree


head = tree.begin()->second;

方法CreateMapTree 工作完美,结果我有tree。 我使用了创建 Huffman 树的经典算法(来自 Cormen)。我多次检查此代码,但我找不到我的错误。代码三是错误的,我无法为编码和解码创建正确的字典。

怎么了?

【问题讨论】:

  • 那么,呃,究竟是什么问题?如果您放弃了 CreateMapTreeNODE 的实现,以便可以编译和运行代码 sn-p,那么提供建议可能会更容易。
  • 问题 - 错误的树。程序编译成功
  • 是的,但是有什么问题呢?不是霍夫曼吗?包含垃圾? ..?
  • “代码三错误”是什么意思?你给它什么频率,你期待什么?您正在创建的“字典”有什么不正确的地方?
  • 只是错了,我的不同符号的代码是一样的

标签: c++ algorithm huffman-code


【解决方案1】:

我建议您查看从树中删除 x 和 y 后会发生什么情况。指向它们的指针可能不再有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多