插值查找的公式是:mid = low + (high - low)*(k - arr[low]) / (arr[high] - arr[low])。這時我就有幾個疑惑了:
第一:
(k - arr[low]) / (arr[high] - arr[low])是兩個int型別的數相除,得出來的的結果不幾乎都是0么,哪來的比例?
第二:
(arr[high] - arr[low]),萬一arr[high] 與arr[low]相等,那結果豈不是0,那不就變成了除以0這樣的錯誤了么。
以上的疑問都是我除錯的時候發現的問題,是我理解錯了,還是這個演算法本身就不給力,望各位大佬指點
uj5u.com熱心網友回復:
拉格朗日插值,如果你學過拉格朗日的話,就應該知道“拉格朗日”本來就是一上一下過零uj5u.com熱心網友回復:
哦,仔細瞅瞅,這個是牛頓插值uj5u.com熱心網友回復:
嘛,第一個疑問是我理解錯了,但是第二個疑問是確實存在的,一旦陣列里面出現重復數就出現除0錯誤了
uj5u.com熱心網友回復:
額,牛頓插值算的是斜率,點是(x,y)不是high,low。點a和點b,只要點a不等于點b,哪怕就是一根平行于x軸 或平行于y軸的都沒關系
斜率為0有關系么,(1,0)(3,0)不能插(2,0)么
uj5u.com熱心網友回復:
兄弟,插值查找的前提是陣列是排序好的,而且最好情況是均勻排序。所以第二個問題,最小數和最大數之差為 0,意思是整個陣列存的都是同一個數?還有就是演算法是可以自己優化的,你可以處理一下這種情況,但如果真的有這種情況,那豈不是根本不需要查找了,直接就能得出結果,復雜度直接 O(1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/56886.html
標籤:C#
上一篇:如何直接修改.net pe檔案中的某個方法的IL位元組碼,不需要重新編譯
下一篇:CLR20r3 求助
