查詢演算法總結

2021-07-05 08:14:02 字數 2603 閱讀 7818

一、順序查詢

二、二分查詢

int binarysearchrecursion(int arry,int &value,int &start,int &end)

else

}int binarysearchrecursion(int arry,int &len,int &value)

int binarysearch(vector &a, int target) 

int start = 0;

intend = a.size() - 1;

intmid;

while (start + 1

< end) else

if (a[mid] < target) else

if (a[mid] > target)

}if (a[start] == target)

if (a[end] == target)

return -1;

}

//給定乙個排序的整數陣列(公升序)和乙個要查詢的整數target,用o(logn)的時間查詢到target第一次出現的下標(從0開始),如果target不存在於陣列中,返回-1。*/

class solution

int start = 0;

int end = a.size() - 1;

int mid;

while (start + 1

< end) else

if (a[mid] < target) else

if (a[mid] > target)

}if (a[start] == target)

if (a[end] == target)

return -1;}};

三、分塊查詢

#import 

struct indexblock //定義塊的結構

indexblock[4]; //定義結構體陣列

int main(int argc, const

char * argv)

; for (int i = 0; i < 3; i++)

printf("請輸入你要查詢的數:\n");

scanf("%d", &x);

k = blocksearch(x, a);

if (k >= 0)

else

}return0;}

int blocksearch(int x, int a)

if (i >= 3)

j = indexblock[i].start; //j等於塊範圍的起始值

while (j<=indexblock[i].end && a[j]!=x)

if (j > indexblock[i].end)

return j;

四、二叉排序樹查詢

效能:二叉查詢樹樹執行查詢的時間與樹的深度成正比,即log(n)數量級,在最壞的情況下,二叉查詢樹可能退化成線性鍊錶,此時二叉查詢樹的查詢時間為o(n),與順序表一樣

查詢最小值:最左邊的節點

查詢最大值:最右邊的節點

求前驅節點:

求後繼節點:

插入:

刪除b-樹

查詢:從根結點開始,對結點內的關鍵字(有序)序列進行二分查詢,如果命中則結束,否則進入查詢關鍵字所屬範圍的兒子結點;重複,直到所對應的兒子指標為空,或已經是葉子結點

插入:m/2的限制,在插入結點時,如果結點已滿,需要將結點**為兩個各佔m/2的結點

刪除:需將兩個不足m/2的兄弟結點合併

特性:

b+樹

特性:

**:當乙個結點滿時,分配乙個新的結點,並將原結點中1/2的資料複製到新結點,最後在父結點中增加新結點的指標;b+樹的**只影響原結點和父結點,而不會影響兄弟結點,所以它不需要指向兄弟的指標

b*樹

**:當乙個結點滿時,如果它的下乙個兄弟結點未滿,那麼將一部分資料移到兄弟結點中,再在原結點插入關鍵字,最後修改父結點中兄弟結點的關鍵字(因為兄弟結點的關鍵字範圍改變了);如果兄弟也滿了,則在原結點與兄弟結點之間增加新結點,並各複製1/3的資料到新結點,最後在父結點增加新結點的指標。

特性:b*樹分配新結點的概率比b+樹要低,空間使用率更高

平衡二叉搜尋樹

五、雜湊查詢

參考 雜湊查詢 雜湊表 hash

參考 字串 hash演算法

查詢演算法總結

順序查詢演算法 1.演算法描述 順序比較即可。2.平均查詢長度 n 1 2,其中n為表長。3.演算法實現 省略4.優化思想 根據經驗,目前被查到越多的元素,將來可能被查到的可能性也越大。所以可以考慮,每次查詢到乙個元素後,將它和直接前驅交換位置。如果上述的經驗從概率上來講是成立的,則可以加快順序查詢...

查詢演算法總結

順序查詢演算法 1.演算法描述 順序比較即可。2.平均查詢長度 n 1 2,其中n為表長。3.演算法實現 省略4.優化思想 根據經驗,目前被查到越多的元素,將來可能被查到的可能性也越大。所以可以考慮,每次查詢到乙個元素後,將它和直接前驅交換位置。如果上述的經驗從概率上來講是成立的,則可以加快順序查詢...

查詢 演算法總結

順序查詢演算法 1.演算法描述 順序比較即可。2.平均查詢長度 n 1 2,其中n為表長。3.演算法實現 省略4.優化思想 根據經驗,目前被查到越多的元素,將來可能被查到的可能性也越大。所以可以考慮,每次查詢到乙個元素後,將它和直接前驅交換位置。如果上述的經驗從概率上來講是成立的,則可以加快順序查詢...