1. 程式人生 > >關於查詢演算法錯題集錦

關於查詢演算法錯題集錦

1、設串長為n,模式串長為m,則KMP演算法所需的附加空間O(m)

分析:KMP演算法時間複雜度為O(m+n),空間複雜度為O(m).因為KMP演算法涉及到next陣列的儲存,且next陣列是基於模式串長度計算的。

BF演算法(普通匹配演算法):時間複雜度O(m*n);空間複雜度O(1)

KMP演算法:時間複雜度O(m+n);空間複雜度O(n)

2、cin遇到空格符,結束輸入。

3 n個頂點的網,求出權最小的n-1條邊便不可構成其最小生成樹。如果權值最小的n-1條邊構成了環的話,就不能構成最小生成樹。

平衡二叉樹的左右子樹高度之差的絕對值不超過1.

選擇排序包括直接選擇排序和堆排序,都是不穩定的演算法。

4、折半查詢時間複雜度log n,順序查詢是n/2

5、要求一個線性表能較快地查詢,又能適應動態變化的要求,可以採用雜湊查詢方法。

分塊法:把整個線性表分成若干塊進行儲存,若動態變化則可以新增在表的尾部(非順序結構),時間複雜度是O(1),查詢複雜度是O(N); 若每個表內部為順序結構,則可以用二分法將查詢時間複雜度降至O(log n),但同時動態變化複雜度則變成O(n).

分塊查詢,需要分塊的部分之間是有序的,塊內是否有序無所謂。

順序法是挨個查詢,容易實現,查詢時間複雜度是O(n),動態變化時可將儲存值放入線性表尾部,則時間複雜度為O(1)

二分法是基於順序表的一種查詢方法,查詢時間複雜度為O(log n),若是動態變化的情況,移動次數還是O(n)

雜湊法,通過雜湊函式將值轉化成存放該值得目標地址,查詢效能是O(1),對於動態變化要求,可以再進行雜湊,時間複雜度是O(1)

6、序列長度為n,在最壞情況下,時間複雜度為O(log n)的演算法是:二分查詢

分析:

在最壞情況下,順序查詢為O(n);分塊查詢複雜度與分塊規則有關;雜湊查詢時間複雜度是O(1);

7、選擇排序是每輪選一個最小值出來,選擇排序是O(n),所以就用n個排列。

8、深度優先搜尋和前序二叉遍歷都類似圖的深度遍歷,都要藉助棧的資料結構;

廣度優先搜尋要藉助佇列資料結構,類似圖的層序遍歷。

9、線性表採用鏈式儲存時,結點的儲存地址:連續與否均可。

儲存地址可以隨意分配,連結串列中有指標域可以找到下一個連結串列節點的儲存地址。

連續與不連續都可以用指標域連起來。

10、非線性結構的邏輯特徵是一個結點元素可能對應多個直接前驅和多個後繼。(二維陣列、多維陣列、廣義表、樹。圖)

            線性結構指資料元素直接存在“一對一”的線性關係的資料結構。(線性表、棧、佇列、雙佇列、陣列、串)

11、要求能夠進行較快地插入和刪除,則可選範圍內為鏈式儲存和雜湊儲存;

再加上要求儲存結構能反映資料之間的邏輯關係,則只能選擇鏈式儲存。因為雜湊技術的記錄資料間不存在什麼邏輯關係,只和關鍵字有關聯。

12在雙向連結串列儲存結構中,刪除p所指的節點時需要修改指標:

p->next->prior = p->prior; p->prior->next= p->next;