java 二分搜索获得大于目标数的第一位_程序员数据结构算法编程,二分查找搜索算法的原理与应用介绍!...
本文來講一種搜索算法,即二分搜索算法,通常在面試時也會被問到。
我們先來看一個例子,在圖書館通常是根據查到的編號去找書,可以在書架上按順序一本本地查找,也可以找到一本書不符合預期時,再跳過一大部分書再查找,很顯然,后者的效率高,這也是大部分人使用的方法,這種方法叫做二分搜索查找方法。
二分搜索查找原理
二分搜索查找方法的核心思想是:在查找一次后將下一次搜索查找的空間減少一半,它要求搜索的序列值是單調的。如果序列是單調遞增的,將查找目標值與序列的正中間值進行比較,如果相等則查找成功;如果查找目標值小于序列的正中間值,則下一次的搜索空間為正中間值的前面部分;如果查找目標值大于序列的正中間值,則下一次的搜索空間為正中間值得后面部分。如下圖的數組
假如要查找元素8,那么先將8和數組中間的元素5進行比較,發現8比5大,那么下一次搜索空間為5后面的部分了,繼續將后半部分的中間元素7與8進行比較,發現8比7大,那么下一次的搜索空間為7后面的部分了,再將7后面的中間元素8與8進行比較,發現相等,則查找成功。可以看出二分搜索查找算法的時間復雜度為O(log(n))。代碼實現如下
int binary_search(int a[], int n, int x) { int left = 0; int rigt = n - 1; while(left < rigt) { int mid = (left + rigt) >> 1; if (a[mid] == x) { return x; } else if (a[mid] < x) { left = mid + 1; } else { rigt = mid - 1; } } return -1;}二分搜索查找應用
為了更好地理解二分搜索查找算法,下面來看兩個具體的應用。
1.給定一個正整數n,其中n小于10的8次方,求最小的正整數x,滿足x的x次方為n位數。
先來看一個數x,它的位數怎么表示,很明顯(int)log10(x) + 1就是表示x的位數,所以x的x次方的位數函數f(x)可以表示如下
很明顯,這個函數是一個單調遞增函數,需要求最小的正整數x,滿足f(x)=n,那么x只需要在10的8次方內進行二分查找搜索就好了。
2.給定一個正整數n,其中n小于等于10的18次方,求如下方程的正整數解
因為n最大為10的18次方,很明顯那么x肯定不會超過60,所以x可以從1枚舉到60,當x固定時,等號左邊關于y的函數明顯是一個單調增函數,所以可以用二分搜索查找法來求y了,時間復雜度為O(log(n))。
下一節我將會講三分搜索方法的原理與應用,歡迎大家關注,謝謝。
總結
以上是生活随笔為你收集整理的java 二分搜索获得大于目标数的第一位_程序员数据结构算法编程,二分查找搜索算法的原理与应用介绍!...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql fio测试_Linux下 f
- 下一篇: 利用计算机找出函数关系式,使用 CHOO