日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 二分搜索获得大于目标数的第一位_程序员数据结构算法编程,二分查找搜索算法的原理与应用介绍!...

發布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 二分搜索获得大于目标数的第一位_程序员数据结构算法编程,二分查找搜索算法的原理与应用介绍!...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。