0

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

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

我需要计算所有值limit在此序列中出现的次数,这可能g(x) > f(x) > x始终保持不变。该算法很简单:从一个用 初始化的集合开始,我用anda替换一个元素,除非它们比.xf(x)g(x)limit

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

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

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

4

0 回答 0