网页版几何画板开发笔记(八) 三角数索引

问题: 设有非负整数a,b 满足条件 a < b, 求一种算法, 根据唯一的 a,b 可计算出一个唯一索引 i.

原始问题是: 在几何推理系统中, 为每个点如 A,B 都有一个从 0 开始的整数索引 a,b, 又有两点
唯一确定一个线段L, 求为L设计一个整数的索引 i, 使得满足根据 a,b 可唯一计算出 i.

当前我使用的算法是 i = b*(b-1)/2 + a. 下面说明这个算法是满足条件的.

我们将 a做x轴, b 做y 轴, 可将 a,b 的可能组合排列为:

b\a   0  1  2  3  4  5
1      0  -  -   -  -   -
2      1  2  -  -  -   -
3      3  4  5  -  -  -
4      6  7  8  9  -  -
5     10 11 12 13 14 -
6     15 ... (略)

按照这种方法排列, 可为每一对(a,b) 唯一对应一个排列的顺序, 这个顺序就是我们需要的
索引 i . 公式如上给出的 i= b*(b-1)/2+a.

由于 b*(b-1)/2 构成的数字队列被称为三角数(似乎我记得是某数学书上这么叫的), 所以
我就把这个 i 叫做三角数索引, 也许名不副实吧...

这个问题的反过来问题是, 如果已知 i, 求对应的 a,b. 下面试着求解.

设sqrt(2*i)=j
设a=0, 则i_min=b*(b-1)/2, 此时有 b^2=2*i+b, 故有b=sqrt(j^2+b) > j
设 a=b-1 (这是a的最大值, 因a<b), 则 i_max=(b+2)(b-1)/2,
  故有 b < j+1.

联合有 j < b < j+1; 故对 j 取整数, 则b要么是[j], 要么是 [j]+1.


你可能感兴趣的:(网页版几何画板开发笔记(八) 三角数索引)