資料結構29 順序查詢演算法及分析

2021-10-09 15:58:36 字數 1872 閱讀 9441

目錄

一、順序查詢sequential search

二、演算法分析

三、順序查詢:無序表查詢**

如果資料項儲存在如列表這樣的集合中,我們會稱這些資料項具有線性或者順序關係。

在python list中,這些資料項的儲存位置稱為下標,這些下標都是有序的整數。通過下標,我們可以按照順序來訪問和查詢資料項,這種技術稱為「順序查詢」。

要確定列表中是否存在需要查詢的資料項。

首先從列表的第乙個資料項開始,按照下標增長的順序,逐個對比資料項,如果到最後乙個都未發現要查詢的項,那麼查詢失敗。

順序查詢:無序表查詢**

def sequentialsearch(alist, item):

found = false

pos = 0

while pos < len(alist) and not found:

if alist[pos] == item:

found = true

else:

pos += 1

return found

要對查詢演算法進行分析,首先要確定其中的基本計算步驟。回顧前面的知識,基本計算步驟必須要足夠簡單,並且在演算法中反覆執行。在查詢演算法中,這種基本計算步驟就是進行資料項的比對(當前資料項是等於還是不等於查詢資料項,比對的次數決定了演算法複雜度)。

在順序查詢演算法中,為了保證是討論的一般情形,需要嘉定列表中的資料項並沒有按值排列順序,而是隨機放置在列表中的各個位置。

換句話說,資料項在列表各處出現的概率是相等的。

資料項是否在列表中,比對的次數是不一樣的。如果資料項不在列表中,需要比對所有的資料項才能得知,比對的次數是n,如果資料項在列表中,需要比對的次數情況就比較複雜。最好的情況,第一次比對就找到,最壞的情況,要n次比對。

資料項在列表中,比對的一般情形如何?

因為資料項在列表中各個位置出現的概率是相等的,所以平均狀態下,比對的次數是n/2。

所以順序查詢的演算法複雜度是o(n)

這裡我們假定列表中的資料項是無序的,那麼如果資料項排了序,順序查詢演算法的效率又如何呢?

實際的做法是,當資料項存在時,比對過程與無序表完全相同。不同之處在於,如果資料項不存在,比對可以提前結束。

如下圖,查詢資料項50,當看到54時,可以知道後面不可能存在50,可以提前退出查詢。

資料結構 順序(線性)查詢(演算法)

概述 例項 獲取查詢到的第乙個元素的位置 param array 陣列 param value 要查詢的值 return 查詢到,返回index,未查找到返回 1 private static intlinearsearchfirstvalue int array,int value for int...

資料結構及演算法 順序表

順序表是一種簡單的線性結構,邏輯上相鄰的資料在計算機內的儲存位置也是相鄰的,可以快速定位第幾個元素,中間不允許有空值,插入 刪除時需要移動大量元素。順序表的三個要素 結構體定義 define max size 100 struct sqlist define max size 100 typedef...

資料結構 順序查詢

5.小結 include include define initsize 10 初始化陣列長度 define elemtype int 順序查詢表型別定義 順序表 動態分配 typedef struct sstable 函式宣告 void inittable sstable st 1.初始化順序表 ...