【发布时间】:2016-10-05 17:10:22
【问题描述】:
我有两个查找表,如果可能的话,我想用简单的数学来消除它们。
第一个是从数组中的索引到序列 {0} => 1, {1, 2} => 2, {3, 4, 5} => 3, s.t. 的映射。有一个 1、两个 2、三个 3 等等。或者视觉上:
lookup1[N] = {
1,
2, 2,
3, 3, 3,
4, 4, 4, 4,
5, 5, 5, 5, 5,
6, 6, 6, 6, 6, 6,
7, 7, 7, 7, 7, 7, 7,
8, 8, 8, 8, 8, 8, 8, 8,
...
}
第二个是递增序列,第一个序列是(1),第二个是(1, 2),第三个是(1, 2, 3)。这就像一个模数循环,但在每个循环之后都会增加。视觉上:
lookup2[N] = {
1,
1, 2,
1, 2, 3,
1, 2, 3, 4,
1, 2, 3, 4, 5,
1, 2, 3, 4, 5, 6,
1, 2, 3, 4, 5, 6, 7,
1, 2, 3, 4, 5, 6, 7, 8,
1, 2, 3, 4, 5, 6, 7, 8, 9,
...
}
这些需要从索引映射。对于第二次查找,输入 5、4、3 将分别映射到 3、2、1。
是否有任何数学公式可以产生这些模式?我宁愿执行一些指令也不愿进行内存访问。
【问题讨论】: