二叉树的最优填充顺序

时间:2011-04-20 07:54:41

标签: algorithm caching binary-tree

我有一个问题,我需要为常量键i存储变化的数据值v_i(整数)(也是整数,在某些范围内说[1; M])。我需要能够快速绘制由值v_i加权的随机元素,即绘制密钥k的概率应为v_k /(sum(i = 1 ... M)v_i)

我能想出的最好的想法是使用二叉树并将部分和存储在以k为根的子树中的值作为密钥k的值(仍在[1; M]范围内)。然后,每当值发生变化时,我需要更新其节点和树中的所有父节点(由于密钥是固定的,所以需要O(log M)时间,因此二叉树完全平衡)。如上绘制随机元素也需要O(log M)时间(对于树的每个级别,一个比较范围(0,1)中的随机数与左子树,右子树的相对权重,以及节点本身并且比天真算法快得多(取随机数r,迭代通过元素找到最小k,使得和(i = 1 ... k)

我现在的问题是如何优化树节点在内存中的位置,以最大限度地减少缓存未命中。由于所有密钥都是已知的并且保持不变,因此这基本上是我应该为树节点分配内存的顺序。

谢谢!

1 个答案:

答案 0 :(得分:0)

我不认为二进制树的最佳填充顺序除了预订,后订单,有序填充之外?你的问题不是问一般缓存是如何工作的吗?不幸的是我自己也不知道,也许更简单的哈希数组在你的情况下更有效率?