北京做网站哪家强职业培训机构
news/
2025/10/2 10:37:01/
文章来源:
北京做网站哪家强,职业培训机构,晋中网站设计,锕锕锕锕锕锕锕好湿免费网址元二分搜索#xff08;Steven Skiena 在《算法设计手册》第 134 页中也称为单边二分搜索#xff09;是二分搜索的一种修改形式#xff0c;它以增量方式构建数组中目标值的索引。与普通二分搜索一样#xff0c;元二分搜索需要 O(log n) 时间。 元二分搜索#xff0c;也称为… 元二分搜索Steven Skiena 在《算法设计手册》第 134 页中也称为单边二分搜索是二分搜索的一种修改形式它以增量方式构建数组中目标值的索引。与普通二分搜索一样元二分搜索需要 O(log n) 时间。 元二分搜索也称为单边二分搜索是二分搜索算法的一种变体用于搜索有序列表或元素数组。该算法旨在减少在列表中搜索给定元素所需的比较次数。 元二分搜索背后的基本思想是从包含整个数组的大小为 n 的初始区间开始。然后该算法像二分搜索一样计算中间元素并将其与目标元素进行比较。如果找到目标元素则搜索终止。如果中间元素大于目标元素则算法将新区间设置为前一个区间的左半部分如果中间元素小于目标元素则将新区间设置为前一个区间的右半部分间隔。但是与二分搜索不同元二分搜索不会对循环的每次迭代执行比较。 相反该算法使用启发式方法来确定下一个间隔的大小。它计算中间元素的值与目标元素的值之间的差值并将差值除以预定常数通常为2。然后将该结果用作新区间的大小。该算法将继续进行直到找到目标元素或确定它不在列表中。 元二分搜索相对于二分搜索的优势在于它在某些情况下可以执行更少的比较特别是当目标元素接近列表开头时。缺点是在其他情况下该算法可能比二分查找执行更多的比较特别是当目标元素接近列表末尾时。因此当列表的排序方式与目标元素的分布一致时元二分搜索是最有效的。
这是元二分搜索的伪代码 function meta_binary_search(A, target): n length(A) interval_size n while interval_size 0: index min(n - 1, interval_size / 2) mid A[index] if mid target: return index elif mid target: interval_size (n - index) / 2 else: interval_size index / 2 return -1
例子 Input: [-10, -5, 4, 6, 8, 10, 11], key_to_search 10 Output: 5
Input: [-2, 10, 100, 250, 32315], key_to_search -2 Output: 0
确切的实现有所不同但基本算法有两个部分 1、计算出存储最大数组索引需要多少位。 2、通过确定索引中的每个位应设置为 1 还是 0增量构造数组中目标值的索引。方法 1、在变量 lg 中存储表示最大数组索引的位数。 2、使用 lg 在 for 循环中开始搜索。 3、如果找到该元素则返回 pos。 4、否则在 for 循环中增量构造索引以达到目标值。 5、如果找到元素则返回 pos否则返回 -1。 下面是上述方法的实现
// Javascript implementation of above approach // Function to show the working of Meta binary search function bsearch(A, key_to_search) { let n A.length; // Set number of bits to represent largest array index let lg parseInt(Math.log(n-1) / Math.log(2)) 1; //while ((1 lg) n - 1) //lg 1; let pos 0; for (let i lg ; i 0; i--) { if (A[pos] key_to_search) return pos; // Incrementally construct the // index of the target value let new_pos pos | (1 i); // find the element in one // direction and update position if ((new_pos n) (A[new_pos] key_to_search)) pos new_pos; } // if element found return pos otherwise -1 return ((A[pos] key_to_search) ? pos : -1); } // Driver code let A [ -2, 10, 100, 250, 32315 ]; document.write(bsearch(A, 10));
输出 1
时间复杂度 O(log n)其中 n 是给定数组的大小辅助空间 O(1) 因为我们没有使用任何额外空间
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924800.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!