我在接受采访时被问到二进制搜索的两个先决条件。我告诉他们数组应该按升序排序,但我不知道二进制搜索的第二个前提条件是什么?
任何人都可以告诉我二进制搜索的第二个前提条件吗?
答案 0 :(得分:3)
数据数组应进行排序,并按右侧顺序排序。即:当二进制搜索采用降序排列时,如果按升序排序 - 它将不起作用。
一些澄清,因为似乎人们忘记了他们的算法101.
前提是一个条件,如果不满足,则不需要算法来提供正确的结果。
随机访问不是二进制搜索算法的前提条件,因为它可以并且应该返回正确的答案,即使随机访问不可用(二进制搜索树依赖于此)。
小于运算符当然不必定义,因为它是特定于语言的实现细节。但它接近事实。
数据结构必须对除线性以外的任何搜索进行排序(weak-ordered)。
数据结构必须按照二进制搜索算法假设的相同顺序进行排序。正如我所提到的,如果数据按升序排序,就像OP所说的那样,并不意味着二进制搜索将提供正确的结果,例如,如果搜索是按降序构建的。有许多命令,升序,降序,词典等等。
使用二进制搜索功能时,必须确保输入已排序,并按照您要使用的顺序排序。如果不符合这两项要求 - 您无需提供正确的结果。
答案 1 :(得分:2)
二元搜索here的前提条件有很好的破坏:
必须根据排序按升序对数组进行排序 由搜索功能中的比较使用。
作者只指定一个先决条件,但我希望你可以将其分解为彼此相关的2个条件......
答案 2 :(得分:1)
也许你需要随机访问二进制搜索才能有效。或者至少数组应该可以多次迭代。
答案 3 :(得分:1)
元素需要在排序数组中,所以我猜他们的意思是
1)元素在一个数组中(或任何支持索引访问的数据结构)。
2)根据比较功能对存储进行排序。
答案 4 :(得分:0)
元素必须具有小于运算符的定义。
答案 5 :(得分:0)
这意味着
必须对Arrray进行排序
使用的排序算法