通过给定列表进行二进制搜索

时间:2017-10-11 22:41:41

标签: binary-search

。对于下面的每个列表,我必须说明在搜索7 ..

期间它是否可以是一系列值

现在我知道在一些研究中,二进制搜索通常在数字按升序或降序排列时有效,然后继续将列表分成两半,直到找到所需的数字。那么,如果是这样的话,这些列表都不会起作用,因为它们不合规吗?

3 个答案:

答案 0 :(得分:0)

二进制搜索可以在几种不同的情况下应用,例如在树结构上,你总是有两个孩子,你需要选择一个,或者在你要快速查找的数字排序数组的情况下一个数字等。

在您提交的案例中,您确实应该将该数字列表放在已排序的数组中,然后开始二进制搜索。二进制搜索是一个递归函数,从数组的中间索引开始。如果该索引处的数字高于您正在寻找的数字,那么您再次使用该索引的一半来调用该函数,否则如果该索引处的数字较小,则将其递减一半,否则它必须相等且你找到了号码。

这允许数组之间缺少数字,您仍然可以相对快速地扫描数组中的给定数字。但你必须先排序。

希望这是有道理和有帮助的。

答案 1 :(得分:0)

二进制搜索的工作方式是获取最低,最低值和最大值。然后你可以做一个简单的计算来获得中间点。获得中点后,将您要搜索的内容与中点进行比较。如果它大于中点,那么左边移动到中点+ 1.如果它小于中点,则右边变为中点 - 1.所以你所看到的范围根据中点变化比较。然后你重新计算找到新的中点并从那里开始直到找到或找不到你正在寻找的是什么。因此,您会认为二进制搜索不会对提供的列表起作用,除非已排序。但是......确实......

第一个列表的示例:

左边是索引0 右边是索引6 中点将是列表的大小... 7 / 2..3.5真的但通常会被截断...因此索引3是24

如果你要比较你要找的东西,36,和24,它会大于。那么左边将成为中点+ 1,即指数4,新的中点将是指数5.下一个比较将是类似的,36大于25,所以左边将成为中点+ 1,这是列表的末尾,恰好是您要查找的号码。

所以...理论上二元搜索仅适用于排序列表,但由于3个列表中的2个如何放在一起,它恰好起作用。

答案 2 :(得分:0)

  

对于下面的每个列表,我必须说明它是否可以是在搜索36期间检查的一系列值

这并不意味着您提供的列表是执行二进制搜索的列表。这意味着这些列表是来自某些原始(推测排序)列表的检查的值序列。

假设原始列表已正确排序以便二进制搜索可行,则只有第一个列表表示在搜索数字36时检查的有效值序列。

在二进制搜索中,搜索的数据必须按顺序排列,并且每个新值都会在前一个小于搜索值的值和前一个大于搜索值的值之间。

  

92,22,91,24,89,25,36

在第一个列表中,每个值都介于前面的"低于36"价值和前面的"高于36"值。

  

93,20,91,24,92,24,36

第二个列表在92处失败,因为前一个小于36的数字为24,之前的大于36的数字为9192大于91,因此无法获得结果。

  

93,27,34,62,29,39,35,36

第三个列表在29处失败,因为它不在3462之间。 (我在62失败的原始评论是错误的,因为在6234之间93 。)