14.尋找概論與順序尋找,14尋找概論順序

來源:互聯網
上載者:User

14.尋找概論與順序尋找,14尋找概論順序
一、尋找概論1.尋找即根據給定的某個值,在尋找表中確定一個其關鍵字等於給定值的資料元素(或紀錄)。若表中不存在關鍵字等於給定值的紀錄,則稱尋找不成功,此時尋找的結果可給出一個"空"紀錄或"空"指標。另外,尋找表按照操作方式來分有兩大種:靜態尋找表和動態尋找表。(1)尋找表(Search table):是由同一類型的資料元素(或紀錄)構成的集合;(2)關鍵字(Key):是資料元素中某個資料項目的值,又稱為鍵值,用它可以標誌一個資料元素,也可以標誌一個紀錄的某個資料項目(欄位),又稱關鍵碼;(3)主關鍵字:若此關鍵字可以唯一地標誌一個紀錄,則稱此關鍵字為主關鍵字(Primary Key),主關鍵字所在的資料項目成為主關鍵碼;(4)次關鍵字(Secondary Key):對於那些可以識別多個資料元素(或紀錄)的關鍵字,我們稱為次關鍵字;
2.靜態尋找表(Static Search Table):只作尋找操作的尋找表。它的主要操作有:(1)查詢某個"特定的"資料元素是否在尋找表中;(2)檢索某個"特定的"資料元素和各種屬性。3.動態尋找(Dynamic Search Table)    在尋找過程中同時插入尋找表中不存在的資料元素,或者從尋找表中刪除已經存在的某個資料元素。它的主要操作有:(1)尋找時插入資料元素;(2)尋找時刪除元素資料元素;注釋:為了提供尋找的效率,我們需要專門為尋找操作設定資料結構,即改變資料元素之間的關係(表、樹等結構)。
二、順序表尋找1.定義:順序尋找又稱線性尋找,是最基本的尋找技術,它的尋找過程是:從表中第一個(或者最後一個)紀錄開始,逐個進行紀錄的關鍵字和給定值比較,若某個紀錄的關鍵字和給定值相等,則尋找成功,找到所查的紀錄;如果直到最後一個(或第一個)紀錄,其關鍵字和給定值比較都不等時,則表中沒有所查的紀錄,尋找不成功。2.順序表尋找演算法/*順序尋找:a為數組,n為要尋找的數組個數,key為要尋找的關鍵字*/int  Sequential_Search(int *a,int n,int key){    int i;    for(i=1;i<n;i++)    {            if(a[i]==key)                    return i;    //返回該關鍵字的紀錄位置    }}3.順序表尋找最佳化    由於一般的順序尋找演算法每次迴圈時,都需要對i是否小於等於n作判斷。從某些程式上來說,當總資料量很多的時候,該判斷無疑降低了尋找的效率。我們可以通過在盡頭設定一個"哨兵"的方法,來解決每次i與n作出比較的問題來提高尋找效率。優點:實現簡單,小型資料查詢效率較高。缺點:n很大時,尋找效率很低。/*有哨兵順序尋找*/int Sequential_Search2(int *a,int n,int key){    int i;    a[0]=key;        //設定a[0]為關鍵字值,我們稱之為"哨兵"    i=n;                //迴圈從數組尾部開始    while(a[i]~=key)    {            i--;    }return i;            //返回0則說明尋找失敗}分析:此代碼從尾部開始尋找,如果在a[i]中有key則返回i值,尋找成;否則一定在最終的a[0]處等於key,此時返回的是0,即說明a[1]~a[n]中沒有關鍵字key,尋找失敗。時間複雜度:最好情況為O(1),最壞為O(n);尋找失敗n+1次時間複雜度為O(n);平均尋找次數為(n+1)/2,即平均複雜度為O(n)。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.