1. 程式人生 > 其它 >資料結構學習筆記(六)——查詢

資料結構學習筆記(六)——查詢

技術標籤:學習筆記c++讀書筆記資料結構c++

查詢

文章目錄

一.查詢的基本概念

查詢演算法的評價標準
關鍵字的平均比較次數,也稱平均搜尋長度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
    若k > R[mid].key,則low=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; //表中不存在待查元素 }