順序尋找(Sequential Search)

來源:互聯網
上載者:User

標籤:

1、定義

順序尋找又叫線性尋找,是最基本的尋找技術。

2、基本思想

     從表的一端開始(第一個或最後一個記錄),順序掃描線性表,依次將掃描到的結點關鍵宇和給定值K相比較。若當前掃描到的結點關鍵字與K相等,則尋找成功;若掃描結束後,仍未找到關鍵字等於K的結點,則尋找失敗。

3、儲存結構

  順序尋找方法既適用於線性表的順序儲存結構,也適用於線性表的鏈式儲存結構(使用單鏈表作儲存結構時,掃描必須從第一個結點開始)。

        注意:單鏈表為什麼從第一個掃描,而不是最後一個,這與其儲存結構有關,單鏈表名字即表示第一個第一個結點的地址,而不是最後一個結點的地址。

4、順序尋找演算法(1)類型說明
  typedef struct{    KeyType key;    InfoType otherinfo; //此類型依賴於應用   }NodeType;  typedef NodeType SeqList[n+1]; //0號單元用作哨兵
(2)具體演算法
/*順序尋找,參數說明:    a——數組;    n——要尋找的數組個數;    key——要尋找的關鍵字*/int SeqSearch(int *a,int n,int key)//這裡是指標引用{     int i;     for(i=1;i<=n;i++){    //缺陷:每次迴圈都需要對i是否越界,即是否小於等於n做判斷        if(a[i]=key)            return i;    }    return 0;     }

上述操作中,每次迴圈都需要對i是否越界,即是否小於等於n做判斷,我們可以設定一個哨兵,不需要每次i與n作比較,改進方案如下:

/*有哨兵的順序尋找*/int SeqSearch(int *a,int n,int key)//這裡是指標引用{     int i;     a[0]=key;    /*設定a[0]為關鍵字值,我們稱之為“哨兵”,當然也可以設定最後一個元素為“哨兵”*/    int n;    /*迴圈從數組尾部開始*/    while(a[i]!=key)    {        i--;    }    return i;     /*返回0說明尋找失敗*/    }

當然參數也可以如下設定,把元素個數放在資料結構體中定義:

int SeqSearch(Seqlist R,KeyType K){    //在順序表R[1..n]中順序尋找關鍵字為K的結點,   //成功時返回找到的結點位置,失敗時返回0   int i;   R[0].key=K;    //設定哨兵   for(i=n;R[i].key!=K;i--);    //從表後往前找   return i;    //若i為0,表示尋找失敗,否則R[i]是要找的結點}
3、演算法分析

①  演算法中監視哨R[0]的作用

    為了在for迴圈中省去判定防止下標越界的條件i≥1,從而節省比較的時間。

② 成功時的順序尋找的平均尋找長度:

      

    在等機率情況下,pi=1/n(1≤i≤n),故成功的平均尋找長度為

        (n+…+2+1)/n=(n+1)/2

    即尋找成功時的平均比較次數約為表長的一半。

    若K值不在表中,則須進行n+1次比較之後才能確定尋找失敗。

③ 表中各結點的尋找機率並不相等的ASL

【例】在由全校學生的病曆檔案組成的線性表中,體弱多病同學的病曆的尋找機率必然高於健康同學的病曆,由於上式的ASLsq在pn≥pn-1≥…≥p2≥p1時達到最小值。

    若事Crowdsourced Security Testing道表中各結點的尋找機率不相等和它們的分布情況,則應將表中結點按尋找機率由小到大地存放,以便提高順序尋找的效率。

    為了提高尋找效率,對演算法SeqSearch做如下修改:每當尋找成功,就將找到的結點和其後繼(若存在)結點交換。這樣,使得尋找機率大的結點在尋找過程中不斷往後移,便於在以後的尋找中減少比較次數。

④ 順序尋找的優點

    演算法簡單,且對錶的結構無任何要求,無論是用向量還是用鏈表來存放結點,也無論結點之間是否按關鍵字有序,它都同樣適用。

⑤ 順序尋找的缺點

    尋找效率低,因此,當n較大時不宜採用順序尋找。

⑥  適用情況

    對那些尋找少而又經常需要改動的線性表,可採用鏈表作儲存結構,進行順序尋找。

順序尋找(Sequential Search)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.