关于插值查找的一点疑问,感觉这个算法很不严谨

糟糕点师 2019-06-12 02:25:35
插值查找的公式是: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这样的错误了么。
以上的疑问都是我调试的时候发现的问题,是我理解错了,还是这个算法本身就不给力,望各位大佬指点
...全文
155 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
KralLee 2020-03-29
  • 打赏
  • 举报
回复
兄弟,插值查找的前提是数组是排序好的,而且最好情况是均匀排序。所以第二个问题,最小数和最大数之差为 0,意思是整个数组存的都是同一个数? 还有就是算法是可以自己优化的,你可以处理一下这种情况,但如果真的有这种情况,那岂不是根本不需要查找了,直接就能得出结果,复杂度直接 O(1)
wanghui0380 2019-06-12
  • 打赏
  • 举报
回复
额,牛顿插值算的是斜率,点是(x,y)不是high,low。 点a和点b,只要点a不等于点b,哪怕就是一根平行于x轴 或平行于y轴的都没关系 斜率为0有关系么,(1,0)(3,0)不能插(2,0)么
糟糕点师 2019-06-12
  • 打赏
  • 举报
回复
引用 2 楼 wanghui0380 的回复:
哦,仔细瞅瞅,这个是牛顿插值
嘛,第一个疑问是我理解错了,但是第二个疑问是确实存在的,一旦数组里面出现重复数就出现除0错误了
wanghui0380 2019-06-12
  • 打赏
  • 举报
回复
哦,仔细瞅瞅,这个是牛顿插值
wanghui0380 2019-06-12
  • 打赏
  • 举报
回复
拉格朗日插值,如果你学过拉格朗日的话,就应该知道“拉格朗日”本来就是一上一下过零

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧