導航:首頁 > 源碼編譯 > 什麼是二分演算法

什麼是二分演算法

發布時間:2023-01-02 02:13:19

1. 二分搜索演算法

二分搜索 是一種在有序數組中查找某一特定元素的搜索演算法。這種搜索演算法每一次比較都使搜索范圍縮小一半。

最壞時間復雜度:O(log n)
最優時間復雜度:O(1)
平均時間復雜度:O(log n)
最壞空間復雜度:迭代: O(1) 遞歸:O(log n)

2. 什麼叫java中的二分查找法

1、演算法概念。

二分查找演算法也稱為折半搜索、二分搜索,是一種在有序數組中查找某一特定元素的搜索演算法。請注意這種演算法是建立在有序數組基礎上的。

2、演算法思想。

①搜素過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜素過程結束;

②如果某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。

③如果在某一步驟數組為空,則代表找不到。

這種搜索演算法每一次比較都使搜索范圍縮小一半。

3、實現思路。

①找出位於數組中間的值,並存放在一個變數中(為了下面的說明,變數暫時命名為temp);

②需要找到的key和temp進行比較;

③如果key值大於temp,則把數組中間位置作為下一次計算的起點;重復① ②。

④如果key值小於temp,則把數組中間位置作為下一次計算的終點;重復① ② ③。

⑤如果key值等於temp,則返回數組下標,完成查找。

4、實現代碼。

/**
*description:二分查找。
*@paramarray需要查找的有序數組
*@paramfrom起始下標
*@paramto終止下標
*@paramkey需要查找的關鍵字
*@return
*/
publicstatic<EextendsComparable<E>>intbinarySearch(E[]array,intfrom,intto,Ekey)throwsException{
if(from<0||to<0){
("paramsfrom&lengthmustlargerthan0.");
}
if(from<=to){
intmiddle=(from>>>1)+(to>>>1);//右移即除2
Etemp=array[middle];
if(temp.compareTo(key)>0){
to=middle-1;
}elseif(temp.compareTo(key)<0){
from=middle+1;
}else{
returnmiddle;
}
}
returnbinarySearch(array,from,to,key);
}

3. 二分搜索演算法是利用什麼實現的演算法

二分搜索演算法是利用刪減實現的演算法。

二分搜索的搜索過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結束;如果某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。如果在某一步驟數組為空,則代表找不到。

二分搜索演算法的應用

二分搜索是一種在有序數組中查找某一特定元素的搜索演算法,這種搜索演算法每一次比較都使搜索范圍縮小一半。不過,因為有序數組的順序性,將二分搜索演算法擴展到能適用大致匹配並不是很重要。

舉例來說,二分搜索演算法可以用來計算一個賦值的排名(或稱秩,比它更小的元素的數量)、前趨(下一個最小元素)、後繼(下一個最大元素)以及最近鄰。搜索兩個值之間的元素數目的范圍查詢可以藉由兩個排名查詢(又稱秩查詢)來運行。

假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查找關鍵字比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查找關鍵字,則進一步查找前一子表,否則進一步查找後一子表。

重復以上過程,直到找到滿足條件的記錄,使查找成功,或直到子表不存在為止,此時查找不成功。

4. 二分法原理是什麼

二分法的原理:用傳統的方法 要找到一個數字,需要for循環一個一個遍歷,這種寫法,如果在1000個數字中,找一個數組,需要遍歷1000次,非常的消耗資源

所以提出了另一種方法 二分法,先對數組進行排序,找出中間的數,和查找的數進行對比;

二分法作用:常用於數據查找的方法; 前端的數組搜索;

案例:

var arr=[2,26,36,45,67,89,12,46,53,42];
//二分查找的前提,一定要從小到大排序;
arr.sort(function(a,b){
return a-b;
})
//最小的數的索引 , 最大的書的索引;
var startindex=0;endindex=arr.length;
var findnum=prompt();
var middleindex=Math.floor((startindex+endindex)/2);
while(startindex!==middleindex&&endindex!==middleindex){
console.log(1);
if(arr[middleindex]>findnum){
endindex=middleindex;
}
else if(arr[middleindex]<findnum){
startindex=middleindex;
}
else if(arr[middleindex]==findnum){
break; //這里很重要,不然的話會一直遍歷下去,因為是while循環 ,不加的話,很可能死機
}
middleindex=Math.floor((startindex+endindex)/2);
}
if(arr[middleindex]==findnum){
document.write("找到了");
}
else{
document.write("沒找到");
}

5. 二分查找演算法

二分查找演算法,該演算法要求線性表必須採用順序存儲結構,而且表中元素按關鍵字有序排列。如果一個序列是無序的或者是鏈表,那麼該序列就不能使用二分查找。

二分查找演算法原理:若待查序列為空,則返回-1,並退出演算法;若待查序列不為空,則將它的中間元素與目標數值進行比較,判斷是否相等;若相等,則返回中間元素索引,並退出演算法;此時已查找成功。若不相等,則比較中間元素與目標數值的大小。

二分查找的一個技巧是:不要出現else,而是把所有情況用else,if寫清楚,這樣可以清楚地展現所有細節。本文都會使用else,if,旨在講清楚,讀者理解後可自行簡化。

6. 高中數學必修3演算法初步中二分法是什麼意思

二分法是一種解方程的方法,是把一個方程轉化成一個函數f(x)=0的形式,然後利用圖像找出方程解的近似值的方法。大致步驟為:
1.把方程轉化成f(x)=0;
2.畫出方程的圖像,找出方程的根所在的大致范圍。通常把方程的根的范圍定在(a,b)這樣的一個整數范圍內,a,b差值越小越好。判定的標准就是函數零點的存在性定理,需要使這個區間兩個端點的函數值符號相反,也就是f(a)f(b)<0.比如,f(x)=4x-7,根的范圍在(1,2)這個區間內,f(1)f(2)=-3<0.
3.由於兩個端點的函數值符號相反,所以在這個開區間內一定存在零點。我們可以把這個區間一分為二,就是得到(a+b)/2的值。然後再利用函數零點的存在性定理,確定零點是在(a,(a+b)/2)這個區間內還是在((a+b)/2,b)這個區間內。只要端點函數值符號不同,那麼零點就在這個區間內。
4.上一步我們把函數的零點的范圍縮小了一半,那麼按照同樣的方法,可以把零點所在的開區間范圍再次縮小一半,以此類推,我們可以把這個過程無窮進行下去。當達到一定程度時,零點所在的范圍已經很小了,小到可以忽略(或者說在精確度范圍以內了)時,就可以把這個最小的區間的兩端的端點值的任意一個近似當做零點,也就是原方程的根。
6.這個無限對半(二分)縮小范圍來「逼」出方程的根的方法就是「二分法」。詳見必修1第三章。

7. 二分排序演算法是什麼 我聽說過快速排序 折半查找 怎麼沒聽說過二分排序 筆試題

其一:
二分排序是用二分法(就是折半查找)查找插入位置,來進行排序的。其實就是插入排序的一種修改。寫一段代碼解釋一下:
void MidInsertSort(int array[],int n)
{
int left,right,num;
int middle,j,i;
for(i = 1;i < n;i++)
{
left = 0;// 准備
right = i-1;
num = array[i];
while( right >= left)// 二分法查找插入位置
{
middle = ( left + right ) / 2; // 指向已排序好的中間位置
if( num < array[middle] )// 即將插入的元素應當在在左區間
right = middle-1;
else // 即將插入的元素應當在右區間
left = middle+1;
}
//每次查找完畢後,left總比right大一,a[left]總是存放第一個比num大的數,因此應從此處開始,每
//個元素右移一位,並將num存入a[left]中,這樣就保證了a[0...i]是排好序的
for( j = i-1;j >= left;j-- )// 後移排序碼大於R[i]的記錄
array[j+1] = array[j];
array[left] = num;// 插入
}
}
以上引自http://blog.sina.com.cn/s/blog_4b9eab320100kl08.html

其二:
如果是「二分歸並排序」,就應該是折半排序。。。

主流的說法就這兩種。

8. 什麼是二分法

二分法(Bisection method) 即一分為二的方法. 設[a,b]為R的閉區間. 逐次二分法就是造出如下的區間序列([an,bn]):a0=a,b0=b,且對任一自然數n,[an+1,bn+1]或者等於[an,cn],或者等於[cn,bn],其中cn表示[an,bn]的中點。

(8)什麼是二分演算法擴展閱讀

典型演算法

演算法:當數據量很大適宜採用該方法。採用二分法查找時,數據需是排好序的。

基本思想:假設數據是按升序排序的,對於給定值key,從序列的中間位置k開始比較,

如果當前位置arr[k]值等於key,則查找成功;

若key小於當前位置值arr[k],則在數列的前半段中查找,arr[low,mid-1];

若key大於當前位置值arr[k],則在數列的後半段中繼續查找arr[mid+1,high],

直到找到為止,時間復雜度:O(log(n))。

9. 二分搜索演算法是利用什麼實現的演算法

二分搜索演算法是利用排除剩餘元素中一半的元素實現的演算法。

在計算機科學中,二分搜索(英語:binary search),也稱折半搜索(英語:half-interval search)、對數搜索(英語:logarithmic search),是一種在有序數組中查找某一特定元素的搜索演算法。

二分搜索演算法原理:

1、如果待查序列為空,那麼就返回-1,並退出演算法;這表示查找不到目標元素。如果待查序列不為空,則將它的中間元素與要查找的目標元素進行匹配,看它們是否相等。如果相等,則返回該中間元素的索引,並退出演算法;此時就查找成功了。如果不相等,就再比較這兩個元素的大小。

2、如果該中間元素大於目標元素,那麼就將當前序列的前半部分作為新的待查序列;這是因為後半部分的所有元素都大於目標元素,它們全都被排除了。

3、如果該中間元素小於目標元素,那麼就將當前序列的後半部分作為新的待查序列;這是因為前半部分的所有元素都小於目標元素,它們全都被排除了。

閱讀全文

與什麼是二分演算法相關的資料

熱點內容
微信怎麼發應用app 瀏覽:776
花生殼dns伺服器地址 瀏覽:648
squad伺服器一般什麼時候人多 瀏覽:479
程序員戰門課 瀏覽:474
config保存伺服器地址 瀏覽:317
預訂網吧座位的app叫什麼 瀏覽:416
香港伺服器主機地址 瀏覽:640
網店美工pdf 瀏覽:447
一堆文件夾怎麼弄出來 瀏覽:743
博途如何編譯硬體 瀏覽:418
fortran程序pdf 瀏覽:504
電池消耗演算法 瀏覽:394
伺服器中斷連接怎麼處理 瀏覽:222
上世紀互聯網不發達程序員很難 瀏覽:841
語音識別android開源 瀏覽:762
地埋式垃圾壓縮中轉站 瀏覽:902
apachehttpdlinux 瀏覽:944
快遞員中通app預付款是什麼 瀏覽:843
java路徑轉義 瀏覽:857
keytool加密演算法 瀏覽:131