问题: 设有非负整数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.