0

令 A = {a1, a2, . . . , an} 是一组完全有序的不同项目,使得 ai<aj iff i < j。假设在对 A 中项目的 m 长序列访问中,ai 被访问 q(i)≥1 次。我想要一个算法来找到一个二叉搜索树 T,其中每个项目 ai 驻留在 T 的一个叶子中,这样如果我们使用 T 服务访问,每次从根到相应的叶子,服务所需的总时间整个序列被最小化。该算法确实必须构造一棵最小化总访问时间的树。

我认为频率的最大堆是一种选择,但我不确定它是否是最好的。

我对这个问题的解决方案是:首先对数组 A 进行降序排序,然后从排序后的数组中创建一个二叉搜索树(A[0] 作为根,left[i]=2*i,right[i]=2*( i+1))。

我的解决方案是最优的吗?

4

1 回答 1

0

特设我会说这个问题相当于构造一棵霍夫曼树

更新

不,不是,因为霍夫曼树没有考虑并保留顺序。但这似乎至少相当相关。

于 2014-05-10T14:03:08.520 回答