根据我的理解,在完成二进制搜索时,您将从中间值开始,并在其上完成除法和征服算法,直到找到正确的值。
然而,当我查看二进制搜索树时,我理解这是以初始节点为中间值的相同方式完成的,但是我已经看到了以第一个节点为第一个值的未排序列表的示例数组。
哪种方法正确?
由于
答案 0 :(得分:0)
通常,您从中间节点开始,然后检查左右两半。
划分和征服算法通过将原始问题分解为较小尺寸的子问题来递归地解决问题。问题将会减少,直到它足够小,无法以直接的方式解决。
二元搜索树的情况下,算法采用中间节点,然后递归地解决左右子问题。
BinarySearch(Array arr, value)
return BinarySearchAux(arr, value, 0, arr.length)
BinarySearch(Array arr, value, start, end)
if start >= end
return value == arr[start]
mid = floor((end - start) / 2)
if value == arr[mid]
return true
return
BinarySearchAux(arr, value, start, mid-1) ||
BinarySearchAux(arr, value, mid+1, end)