利用将资料切一半的方式来做搜寻,举例来说,如果要从数字1–100猜终极密码,如果采用线性搜寻法就是一个一个问?是1吗?是2吗?…依序猜下去,很不幸的数字刚好是99就需要猜99次,但如果用二分搜寻法就会是先判断数字是否大於50 ,如果是的话那是否大於75 ,依此类推每次都用对半砍的方式缩小范围,最後只需要猜七次就能猜出终极密码。
每次都将搜寻范围缩减1/2
使用二分搜寻法的前提必须是先排序过
假设目前有个阵列:[10, 21, 34, 50, 66,79, 82, 97],要找出阵列中是否有79这个数字,有的话就回传79在哪个index
这边运用到双指针的概念来解题(left, right),关於双指针的说明可以参考这篇文章, 这里可以先想像有两个指针会不断往中间靠拢,进而缩短搜寻区间。
实作的概念为:
先在阵列取一个中间数的index,公式为 Math.floor((left+right)/2),0+7除以2无条件舍去後拿到3,这边用middle标示为中间数。
上方黄色小字为index2
这时拿目标数79去跟中间数50比较,目标数79比较大,代表中间数的左边那堆数字都不可能是我们要找的答案(都太小了),所以我们要调整一下搜寻范围,将left指针移动到middle+1的位置。
为甚麽要middle+1?因为已经知道middle不是答案,搜寻范围就可以排除middle了
用js实作二分搜寻法
<<: Day-15 消逝於旧时代的 SEGA 最终梦想、复活於新电视的 DreamCast
在新增仪表板窗格前,我们先新增一张工作表,名称为「app总数」,我们选择栏位「F1」,度量选择「计数...
经过一天的休息,我们又再度回到了物理模拟的世界~ 我们在这次的chapter要来介绍的是弹力、张力、...
好的,讲解完 Requests 套件的基本介绍後,终於要进入真实情况的爬虫应用拉! 但我们一步一步来...
几乎每个 CompTIA Network+ 专家都在努力获得 CompTIA N10-007 认证考...
昨天介绍了Vuex是什麽,也知道了它的流程,今天当然也要来实作一下Vuex啦~这个实作会沿用第26天...