資料結構學習筆記(六)——查詢
阿新 • • 發佈:2021-01-18
查詢
文章目錄
一.查詢的基本概念
查詢演算法的評價標準
關鍵字的平均比較次數,也稱平均搜尋長度ASL
n:記錄的個數
pi:查詢第i個記錄的概率 ( 通常認為pi =1/n )
ci:找到第i個記錄所需的比較次數
二.線性表的查詢
1.順序查詢(線性查詢)
應用範圍:
順序表或線性連結串列表示的靜態查詢表
表內元素之間無序
時間複雜度:
- 查詢成功時的平均查詢長度 設表中各記錄查詢概率相等
ASLs(n)=(1+2+ … +n)/n =(n+1)/2 - 查詢不成功時的平均查詢長度 ASLf =n+1
練習:
判斷對錯:n個數存在一維陣列A[1…n]中,在進行順序查詢時,這n個數的排列有序或無序其平均查詢長度ASL不同。
答案 : X
解釋:
查詢概率相等時,ASL相同;
查詢概率不等時,如果從前向後查詢,則按查詢概率由大到小排列的有序表其ASL要比無序表ASL小。
2.折半查詢
- 設表長為n,low、high和mid分別指向待查元素所在區間的上界、下界和中點,k為給定值
- 初始時,令low=1,high=n,mid=[(low+high)/2]
- 讓k與mid指向的記錄比較:
若k==R[mid].key,查詢成功
若k < R[mid].key,則high=mid-1 - 重複上述操作,直至low>high時,查詢失敗
程式碼如下:
//非遞迴演算法
int Search_Bin(SSTable ST,KeyType key){
//若找到,則函式值為該元素在表中的位置,否則為0
low=1;
high=ST.length;
while(low<=high)
{
mid=(low+high)/2;
if(key==ST.R[mid].key) return mid;
else if(key<ST.R[mid] .key) high=mid-1;//前一子表查詢
else low=mid+1; //後一子表查詢
}
return 0; //表中不存在待查元素
}