骇客king 发表于 2015-11-2 13:10:49

插值查找问题

mid = low + (key - a) / (a - a) * (high - low)

我想问一下,这个位置:(key - a) / (a - a) * (high - low)中的(key - a) / (a - a) 应该是永远为0哦的吧,那不是等于mid = low ,也不会算出来一个值啊,也就是说,没有算出来百分比啊。

请问这是为什么啊,这不是等于顺序查找了吗?

ryxcaixia 发表于 2015-11-2 13:10:50

抛开编程 看下面的数学推论
假设
(key - a) / (a - a)≡ 0

-> (key - a)≡ 0
-> key ≡ a
key是楼主你想在这个有序数列里(插值)查找的值
除非楼主你每次查找的永远都是这个有序数列第一个元素
否则(key - a) / (a - a) ≠ 0

ryxcaixia 发表于 2015-11-2 13:39:34

本帖最后由 ryxcaixia 于 2015-11-2 13:40 编辑

插值查找 比折半查找不同的地方就是 在于分界点mid的选取

骇客king 发表于 2015-11-2 14:15:44

我指的是在这个程序中(key - a) / (a - a) 永远等于0 ,要把(key - a) / (a - a) * (high - low)中的(high - low)提到最前边,,这样就能永远保证值不为0了。在程序中定义的是int型,得小数后都省略了,直接取0了。你说的那个数学问题,我再看看,一下没看明白~

鱼C工作室.YCGZS 发表于 2015-11-24 17:15:17

感谢分享

莫欺少年穷 发表于 2015-12-23 20:28:20

千亩计者 发表于 2016-8-16 23:23:19

(key - a) / (a - a) ≠ 0

zndownload 发表于 2017-1-1 14:44:02

电机控制有用到!
页: [1]
查看完整版本: 插值查找问题