Algorithm 如果哈夫曼树中的成本为2^len,那么最好的编码是什么?

Algorithm 如果哈夫曼树中的成本为2^len,那么最好的编码是什么?,algorithm,huffman-code,Algorithm,Huffman Code,我最近遇到了一个编码问题,它非常类似于:项目越多,我们得到的代码越短 但区别在于:在哈夫曼编码中,一种类型的项目的所有成本都是项目*频繁度的项目代码长度,但在我的要求中,成本是项目*频繁度的项目代码长度 由于武汉的冠状病毒爆发,中国已经延长了春节假期。所以我在业余时间复习了这个需求 我找到了一些关于这个问题的论文,并用python写了一篇文章(用中文,但你可以用谷歌翻译) 本文是:Parker,Jr D S.哈夫曼算法最优性的条件[J]。暹罗计算杂志,1980年,9(3):470-489 简言之

我最近遇到了一个编码问题,它非常类似于:项目越多,我们得到的代码越短

但区别在于:在哈夫曼编码中,一种类型的项目的所有成本都是项目*频繁度的项目代码长度,但在我的要求中,成本是项目*频繁度的项目代码长度


由于武汉的冠状病毒爆发,中国已经延长了春节假期。所以我在业余时间复习了这个需求

我找到了一些关于这个问题的论文,并用python写了一篇文章(用中文,但你可以用谷歌翻译)

本文是:Parker,Jr D S.哈夫曼算法最优性的条件[J]。暹罗计算杂志,1980年,9(3):470-489

简言之,本文讨论了如果父母的体重不是孩子的总和(F(x,y)=x+y)会发生什么。得出结论,如果函数是拟线性的(有一些要求),原始的哈夫曼算法仍然会生成根权重最低的二叉树


在我的例子中,我们需要定义
F(x,y)=2(x+y)
,一切都正常。

考虑到成本在长度上是指数级的,我只需要取频率的对数,然后按照正常方式进行哈夫曼编码。@user3386109一个聪明的想法!但它是否能将总成本降至最低?我认为如果总成本是所有成本的乘积,那么它是有效的。但这里是所有成本的总和。我不明白为什么它是最好的编码。我遗漏了什么吗?@user3386109我将把它作为一个实验解决方案,并将其与哈夫曼代码进行比较。但我不能证明这是最好的。什么是它的长度:编码的长度或它的其他属性(一种类型的一个
项)
?)?@JeffLi是的,这是一个实验性的解决方案。另一种尝试方法是平方根。关键是,如果代码长度的成本是指数级的,那么答案就是保持所有代码长度相同,除非频率上存在巨大差异。因此,在计算代码之前将频率分布展平应该会得到接近最优的结果。