折半查詢/二分法查詢
其中線性表採用的是順序儲存
//c
int binary_search(int *a,int n,int key)
return 0;
}
演算法複雜度分析時間複雜度:o(log(n)) 每次劃分為一半 故 2^x=n 則x=log2(n)
空間複雜度:o(1)
插值查詢
二分法查詢mid=(low+high)/2=low+1/2(high-low)
其中的1/2修改為(key-a[low])/(a[high]-a[low])
mid=low+(key-a[low])/(a[high]-a[low])(high-low)
依據查詢的關鍵字key和查詢表中最大最小關鍵字比較後的查詢方法
表長較大,關鍵字分布比較均勻的查詢表,效果比二分法好
斐波那契查詢
斐波那契數列
採用了**分割點而不是一分為二
斐波那契數列 f=
a為待查詢的陣列,例如:a=
n=10為陣列的長度
假設查詢的key=59
步驟:
1)邊界確定
2)待查陣列按照斐波那契數列擴充
3)迴圈的判斷為low<=high
其中的high為原來的待查陣列長度,為什麼不是擴充後的長度,原因是擴充後的值都是重複原來待查陣列的末尾值,在low>n之前已經找到查詢的值,否則找不到
那麼擴充待查陣列長度的目的是:防止查詢後半部分的數時沒有值
4)查詢過程
待查陣列:元素f(k)-1個,因為已經從原來的n個擴充為f(k)-1個
分割點劃分:
由斐波那契數列的特性:f[k]=f[k-1]+f[k-2],構建如下的劃分
這張圖里的high是擴充的f(k)-1而不是n
//c
/*構造乙個斐波那契陣列*/
void fibonacci(int * f)
else
}return -1;
}
時間複雜度: o(logn)
空間複雜度: o(n) 斐波那契數列的建立
可參考:
斐波那契查詢原理詳解與實現
《大話資料結構》
查詢 有序表查詢
1 折半查詢 折半查詢又稱二分查詢,時間複雜度為 2 插值查詢 插值查詢是另一種有序表查詢演算法,其核心就在於插值公式 3 斐波那契查詢 4 三種有序表查詢演算法比較 三種有序表查詢本質上是分隔點的選擇不同,折半查詢分隔點是 折半查詢進行加法和除法運算 mid low high 2 插值查詢進行複雜...
七大查詢演算法之有序表查詢 斐波那契查詢
比例又稱 分割,是指事物各部分間一定的數學比例關係,即將整體一分為二,較大部分與較小部分之比等於整體與較大部分之比,其比值約為1 0.618或1.618 1。斐波那契查詢也是二分查詢的一種提公升演算法,通過運用 比例的概念在數列中選擇查詢點進行查詢,提高查詢效率。同樣地,斐波那契查詢也屬於一種有序查...
有序表查詢
順序表查詢法,簡單但是不智慧型。1.折半查詢法 binary search 如果線性表在排序是有序的 這種情況下我們才用順序儲存。折半查詢法 int binarysearch int a,int n,int key else return mid return 1 表示失敗 折半查詢法類似於把靜態有...