網頁版幾何畫板開發筆記(八) 三角數索引

問題: 設有非負整數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.

相關文章
相關標籤/搜索