是否有一种记忆效率高的方法来计算此序列的直方图?

时间:2012-10-16 21:16:29

标签: memory-management tree

通过递归地将两个函数应用于某个起始值a来生成二进制数字树,即给定序列

a, f(a), g(a), f(f(a)), g(f(a)), f(g(a)), g(g(a)), ...

我需要计算此序列中出现limit的所有值的次数,这可能始终保持g(x) > f(x) > x。该算法很简单:从使用a初始化的集合开始,我将xf(x)替换为g(x),除非它们大于limit }。

唯一的问题是,即使只使用一个字节作为计数器,我需要的内存大约是我的5倍。

我尝试使用DFS的虚拟内存,但是这个地方非常糟糕,我怀疑这个程序会在今年终止。通过总是替换最小元素来生成数字会导致非常好的局部性,但是(类似于BFS)集合像杂草一样增长,并且内存消耗比以前更糟。

我通过重复整个计算5次来解决问题,而在n次运行时忽略除(n-1)*limit/5n*limit/5之间的所有条目。有更好的解决方案吗?

0 个答案:

没有答案