繁体   English   中英

二叉树的最优填充顺序

[英]Optimal filling order for binary tree

我有一个问题,我需要存储常量键i(还有整数,在[1; M]的某个范围内)的变化数据值v_i(整数)。 我需要能够快速绘制一个由值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,从而sum(i = 1 ... k)<r,sum(i = 1 ... k +1)> r;需要O(M)时间)。

我现在遇到的问题是如何优化树节点在内存中的放置,以最大程度地减少缓存丢失。 由于所有键都是已知的并且保持不变,因此本质上这就是我应该为树节点分配内存的顺序。

谢谢!!

除了预排序,后排序,有序填充之类的东西外,我认为二叉树没有最佳的填充顺序了吗? 您的问题不是在问一般的缓存如何工作吗? 不幸的是,我本人并不知道,也许更简单的哈希数组在您的情况下会更有效?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM