日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【数据结构-查找】1.通俗易懂讲解 —— 顺序-折半-分块查找

發布時間:2025/3/20 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数据结构-查找】1.通俗易懂讲解 —— 顺序-折半-分块查找 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

平均查找長度是所有查找過程中進行關鍵字的比較次數的平均值

失敗的平均查找長度:圖畫出來,補充為二叉樹,其中補上的層數之和是分子,列表長度 len+1 是分母

順序查找

順序查找主要是用于線性表中的查找。在查找中,待查找數列有 無序數列有序數列 兩種

class Solution{ public:bool unorderSearch(Node* head, int value) {while(head) {if(head->val == value) {return true;}head = head->next;}return false;} };

平均成功查找長度:ASL成功 = n+12\frac{n+1}{2}2n+1?

解釋:如果第一個點找到,就是 1 ;如果第二個點找到,就是 2 ;依次類推,第 n 個點找到,就是 n;一共有 n 種可能,所以 ASL成功 = 1+2+3+……+nn\frac{1+2+3+……+n}{n}n1+2+3++n? = n(n+1)2n\frac{n(n+1)}{2n}2nn(n+1)? = n+12\frac{n+1}{2}2n+1?

無序列表 · 順序查找平均失敗查找長度:ASL失敗 = n+1n+1n+1

解釋:就是在前n個找不到,繼續探索下一個(但下一個是null),因此在n的基礎上還要加1,所以為 ASL失敗 = n+1n+1n+1

有序列表 · 順序查找平均失敗查找長度:ASL失敗 = n2+nn+1\frac{n}{2} + \frac{n}{n+1}2n?+n+1n?

解釋:從以下圖示中可以知道,在相等查找概率 的情況下,到達某個點查找失敗概率為 1n+1\frac{1}{n+1}n+11? (有 n+1 個區間)。而分子則是節點所在層次,亦從下圖矩形位置可以得到,也就是 1+2+……+n+n1+2+……+n+n1+2++n+n 。綜上所述





順序查找的特點:好處是對數據元素的存儲沒有要求,順序存儲或者鏈式存儲都可以;缺點是當n較大時,平均查找長度較大,效率低。

折半查找

僅適用于 有序順序表 。它的基本思想是:首先將給定值 key 與表中中間位置的關鍵字比較,若相等,則查找成功;若不相等,在搜小范圍之后繼續進行同樣查找,如此重復。



bool bisearch(vector<int> &nums, int value) {int start = 0;int end = nums.size();while(start <= end) {int mid = (start + end) / 2;if(nums[i]==value) {return true;} else if (nums[i] < value) {start = mid + 1;} else {end = mid - 1;}}return false; }

平均成功查找長度:ASL成功 = (層數)?(同層節點個數)n\frac{(層數)*(同層節點個數)}{n}n()?()?

平均失敗查找長度:ASL失敗 = (層數)?(同層與該節點子節點情況類似個數)n+1\frac{(層數)*(同層與該節點子節點情況類似個數)}{n+1}n+1()?()?

以如下圖示:



平均成功查找長度:ASL成功 = 1?1+2?2+3?3+4?17\frac{1*1+2*2+3*3+4*1}{7}71?1+2?2+3?3+4?1?= 187\frac{18}{7}718?

平均失敗查找長度:ASL失敗 = 2?1+3?5+4?28\frac{2*1+3*5+4*2}{8}82?1+3?5+4?2?= 258\frac{25}{8}825?

分塊查找

基本思想:將查找表分為若干子塊。塊內的元素可以無序,但塊與塊之間是有序的,第一個塊中最大關鍵字小于第二個塊中的所記錄的所有關鍵字,同理,第二個塊中最大關鍵字小于第三個塊中的所記錄的所有關鍵字,依次類推。


分塊查找的平均查找長度為索引查找和塊內查找的平均長度之和。設索引查找和塊內查找的平均查找長度分別為L1,L2,那么分塊查找的平均查找長度為 $ALS = L1 + L2 $

將長度為 n 的查找表均勻分為 b 塊,每塊有 s 個記錄,在等概率情況下,平均查找長度為 ALS=ALS塊間+ALS塊內=L1+L2=b+12+s+12=s2+2s+n2sALS = ALS_塊間 +ALS_塊內= L1 + L2 = \frac{b+1}{2} + \frac{s+1}{2} = \frac{s^2 + 2s + n}{2s}ALS=ALS?+ALS?=L1+L2=2b+1?+2s+1?=2ss2+2s+n?

此時,若 s=ns=\sqrt ns=n? ,則平均查找長度取最小值 n+1\sqrt n +1n?+1;若對索引表采用折半查找時,則平均長度為 ALS=ALS折+ALS順=L1+L2=log2(b+1)+s+12ALS = ALS_折 +ALS_順= L1 + L2 = log_2(b+1) + \frac{s + 1}{2}ALS=ALS?+ALS?=L1+L2=log2?(b+1)+2s+1?

總結

以上是生活随笔為你收集整理的【数据结构-查找】1.通俗易懂讲解 —— 顺序-折半-分块查找的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。