EXCLE LOOKUP二分法改怎么求解
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/08 12:41:31
EXCLE LOOKUP二分法改怎么求解
=LOOKUP(1,{1;0;6;5;3},{1;2;3;4;5}) 按照二分法解释他从第三位开始寻找10就停止寻找返回应该是2,为什么结果返回是1
=LOOKUP(1,{-1;0;6;5;3},{1;2;3;4;5}) 第一位改成-1 他就是显示2了
=LOOKUP(0,{1;0;1;0;0},{1;2;3;4;5})
这样他返回N/A
这是为什么
=LOOKUP(1,{1;0;6;5;3},{1;2;3;4;5}) 按照二分法解释他从第三位开始寻找10就停止寻找返回应该是2,为什么结果返回是1
=LOOKUP(1,{-1;0;6;5;3},{1;2;3;4;5}) 第一位改成-1 他就是显示2了
=LOOKUP(0,{1;0;1;0;0},{1;2;3;4;5})
这样他返回N/A
这是为什么
1、lookup中需比较的数据在查找的数组中进行查找时,是按索引从第一个数组数据开始比较的.如果在比较时查找到相同数据时,则在返回数组中返回对应索引位的数据.
因此:
=LOOKUP(1,{1;0;6;5;3},{1;2;3;4;5})
查找值是“1”,而查找的数组中,第一个数据也是“1”.所以,返回值则是对应索引位中的“1”.
2、如果在比较时未匹配到相同的数据前,查找到一个比需要查找值大的数据,则在查找数组中返回该数据索引位前的一个索引所对应的数据.
=LOOKUP(1,{-1;0;6;5;3},{1;2;3;4;5})
查找值是“1”,而查找的数组中,第一个数据是“-1”,当前查找值大于该值;比较下一个数据“0”,查找值仍然大于该值;比较下一个数据“6”,查找值小于该值,则返回该值前一个数据“0”所在索引对应的返回值“2”.
3、比较方式同第2步.
=LOOKUP(0,{1;0;1;0;0},{1;2;3;4;5})
查找值是“0”,而查找的数组中,第一个数据是“1”,查找值小于该值,则返回该值前一个数据.但由于比较的“1”是该数组中的第一个数据,没有前一个索引的对应值可以返回.因此,excel返回了无匹配数据的报错信息“#N/A”.
再问: =LOOKUP(1,{1;0;1;5;3},{1;2;3;4;5}) 这个返回的是3,LOOKUP,匹配并不是从第一个开始,是从中值开始的
再答: 额。。。刚知道,这个是二分法查找的。不过也对,这样效率高多了。 去查过,找到原因了。 在=LOOKUP(0,{1;0;1;0;0},{1;2;3;4;5})中,由于是二分法,比较值为int((查找数+1)/2)。即,需要查找数据数量+1后一半的整数部分。 则首先比较的是数组中5个数据的中间位,即第3个数据“1”。由于,查找值“0”小于比较值,则继续在剩下的前2个数据中进程查找。而根据比较值为int((查找数+1)/2)的定义,需要查找值为第1个数据“1”。由于,查找值“0”仍然小于比较值,且无剩余比较数据,因此此时返回了“#N/A”。 同理,在=LOOKUP(1,{1;0;1;5;3},{1;2;3;4;5}) 中,首先比较的仍然为第3为数据“1”,但此时查找值“1”等于该值。因此,需要在剩下的第4、5位数据中继续进行比较,所以返回了“3”。 但需要注意的是,在查找值等于当前的比较值时,lookup函数仍然会继续用查找值与下一个比较值进行比较,直到比较值与查找值不同时,返回最后一个符合条件的索引。 如: =LOOKUP(1,{1;0;1;1;3},{1;2;3;4;5}) 返回值为“4” =LOOKUP(1,{1;0;1;0;3},{1;2;3;4;5}) 返回值为“3” =LOOKUP(1,{1;0;1;1;1},{1;2;3;4;5}) 返回值为“5” =LOOKUP(1,{1;0;1;0;1},{1;2;3;4;5}) 返回值为“3”
因此:
=LOOKUP(1,{1;0;6;5;3},{1;2;3;4;5})
查找值是“1”,而查找的数组中,第一个数据也是“1”.所以,返回值则是对应索引位中的“1”.
2、如果在比较时未匹配到相同的数据前,查找到一个比需要查找值大的数据,则在查找数组中返回该数据索引位前的一个索引所对应的数据.
=LOOKUP(1,{-1;0;6;5;3},{1;2;3;4;5})
查找值是“1”,而查找的数组中,第一个数据是“-1”,当前查找值大于该值;比较下一个数据“0”,查找值仍然大于该值;比较下一个数据“6”,查找值小于该值,则返回该值前一个数据“0”所在索引对应的返回值“2”.
3、比较方式同第2步.
=LOOKUP(0,{1;0;1;0;0},{1;2;3;4;5})
查找值是“0”,而查找的数组中,第一个数据是“1”,查找值小于该值,则返回该值前一个数据.但由于比较的“1”是该数组中的第一个数据,没有前一个索引的对应值可以返回.因此,excel返回了无匹配数据的报错信息“#N/A”.
再问: =LOOKUP(1,{1;0;1;5;3},{1;2;3;4;5}) 这个返回的是3,LOOKUP,匹配并不是从第一个开始,是从中值开始的
再答: 额。。。刚知道,这个是二分法查找的。不过也对,这样效率高多了。 去查过,找到原因了。 在=LOOKUP(0,{1;0;1;0;0},{1;2;3;4;5})中,由于是二分法,比较值为int((查找数+1)/2)。即,需要查找数据数量+1后一半的整数部分。 则首先比较的是数组中5个数据的中间位,即第3个数据“1”。由于,查找值“0”小于比较值,则继续在剩下的前2个数据中进程查找。而根据比较值为int((查找数+1)/2)的定义,需要查找值为第1个数据“1”。由于,查找值“0”仍然小于比较值,且无剩余比较数据,因此此时返回了“#N/A”。 同理,在=LOOKUP(1,{1;0;1;5;3},{1;2;3;4;5}) 中,首先比较的仍然为第3为数据“1”,但此时查找值“1”等于该值。因此,需要在剩下的第4、5位数据中继续进行比较,所以返回了“3”。 但需要注意的是,在查找值等于当前的比较值时,lookup函数仍然会继续用查找值与下一个比较值进行比较,直到比较值与查找值不同时,返回最后一个符合条件的索引。 如: =LOOKUP(1,{1;0;1;1;3},{1;2;3;4;5}) 返回值为“4” =LOOKUP(1,{1;0;1;0;3},{1;2;3;4;5}) 返回值为“3” =LOOKUP(1,{1;0;1;1;1},{1;2;3;4;5}) 返回值为“5” =LOOKUP(1,{1;0;1;0;1},{1;2;3;4;5}) 返回值为“3”