二分查詢與拉格朗日差值查詢

2021-07-25 08:25:19 字數 933 閱讀 4701

一、我們先寫乙個主方法:

二分查詢時間複雜度

假使總共有n個元素,那麼二分後每次查詢的區間大小就是n,n/2,n/4,…,n/2^k(接下來操作元素的剩餘個數),其中k就是迴圈的次數。

最壞的情況是k次二分之後,每個區間的大小為1,找到想要的元素

令n/2^k=1,

可得k=log2n,(是以2為底,n的對數),所以時間複雜度可以表示o()=o(logn).

public static void main(string args) 

system.out.println("數字在"+binsearchx(myint,1019)+"之後");

//1024 2^10

}

二、二分查詢如下:

public static int binsearch(int arr,int findnum)

else if(findnum< arr[mid])

mid=(max+min)/2;

if(max三、拉格朗日差值查詢

public static int binsearchx(int arr,int findnum)

else if(findnum< arr[mid])

mid=(max+min)/2;

if(max小結:拉格朗日差值查詢是基於二分查詢的基礎上,僅僅是在對於中值mid的賦值的處理上產生了差異

二分查詢:

int mid=min+ (max-min)*(1/2);

拉格朗日中值查詢:

int mid =    (int) (min+ (max-min)*( (findnum-arr[min])*1.0/(arr[max]- arr[min]  )  ));
但後者大大提高了查詢效率,僅一次就能實現要查詢的資料。

拉格朗日差值

拉格朗日插值法,給出 n 1 個點對,可以 o n 2 求出乙個 n 次多項式的值 我們當前有 n 1 個點對,x i,y i 代表 f x i y i 給出 k 求 f k 公式為 sum limits ny i prod limits frac 帶入 x i 則 y i prod limits ...

總結 拉格朗日差值

傳送門 拉格朗日差值其實很簡單,而且證明也很明顯。雖然聯賽不一定會考這個東西,但是還是要寫一下總結。大致的公式就是 sum ny i prod n frac j i 證明也不難,然後如果x是連續的話可以字首字尾積一下。include include define ll long long const...

二分查詢法與拉格朗日插值查詢法

define crt secure no warnings include include define n 1024 void search1 int a n int num 二分法插值查詢 else if num a zhong else if flag 1 void search2 int a...