二分哪些事兒

2021-06-26 14:44:36 字數 1346 閱讀 9362

二分作為一種方法,或者說是一種思想,是很常用的,也是很好用的,所以介於我的二分能裡比較弱,今天我就來總結整理一些知識,供大家分享。

說明:本文章參考於——

一.可能出現的一些問題

1.邊界錯誤造成的問題

二分查詢演算法的邊界,一般來說分兩種情況,一種是左閉右開區間,類似於[left, right),一種是左閉右閉區間,類似於[left, right].需要注意的是, 迴圈體外的初始化條件,與迴圈體內的迭代步驟, 都必須遵守一致的區間規則,也就是說,如果迴圈體初始化時,是以左閉右開區間為邊界的,那麼迴圈體內部的迭代也應該如此.如果兩者不一致,會造成程式的錯誤。如果兩者同時都寫錯的話,可能會造成死迴圈。

2.溢位

假如,left與right之和超過了所在型別的表示範圍的話,那麼middle就不會得到正確的值.

二.**實現

#include #include #include using namespace std;

int a[10];

int lowserach(int b,int x,int y,int v)//注意求比其小的一項應減 1

return x;

}int upserach(int b,int x,int y,int v)

}int bi_search(int a,int n,int b)//返回等於b的第乙個

else if(a[mid]>b)

high = mid -1;

else

low = mid +1;

} return last;

}int bi_search1(int a,int n,int b)//大於b的第乙個數

else if (a[mid]<=b)

}return last;

}int bi_search2(int a,int n,int b)//小於b的第乙個數

} return last;

}int main()

{ freopen("1.txt","r",stdin);//1 3 5 5 5 8 8 9

for(int i=1;i<=8;i++)

cin>>a[i];

int pos1,pos2;

pos1=upper_bound(a+1,a+9,7)-a;

pos2=lower_bound(a+1,a+9,7)-a;//注意求比其小的一項應減 1

cout<

當然我們也可以用algori

thm庫中的二分函式:

pos=upper_bound(a,a+n,pos)-a;

pos=lower_bound(a,a+n,pos)-a;//注意求比其小的一項應減 1

1128 二分 二分查詢

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述nettle最近在玩 艦 因此nettle收集了很多很多的船 這裡我們假設nettle氪了很多金,開了無數個船位 去除掉重複的船之後,還剩下n 1 n 1,000,000 種不同的船。每一艘船有乙個稀有值,任意兩艘船的稀有...

二分(二分答案 二分搜尋)與單調性

經典二分搜尋是二分空間範圍。二分答案又叫二分猜值,是二分解的值空間。其實可以統一,普通的二分搜尋也是二分答案值域 下標空間,也是猜值。二分必須滿足單調性,最直觀的,二分搜尋只能在有序陣列上進行。單調性體現在,下標和元素值是單調的,也就是 if j i 有 a j a i 一般二分答案解決的問題是最優...

二分 整數二分和浮點數二分

一定是單調的才可以二分。找中間點 判斷是否滿足check函式 此函式需要自己根據題意調整,假設紅色區域為滿足check函式,說明mid在紅色區域內,此時要在mid到r之間找,l mid,否則r mid 1。由於此時l mid 所以中間點應為 l r 1 2 中間點mid l r 2 mid l r ...