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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

常见存储、查找算法

發布時間:2023/12/3 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常见存储、查找算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

存儲

  • 散列存儲:即哈希的存儲方式。

  • 順序存儲:數組的存儲方式

  • 鏈式存儲:鏈式前向星、vector<>

  • 壓縮存儲

  • 索引存儲

  • 查找

    常見查找算法

    順序查找

    一個一個往下找,復雜度 \(O(\dfrac{n+1}{2})\)

    適合順序存儲,不適合壓縮存儲、索引存儲等。

    折半查找、二分查找

    查找次數:\(a<\log_2 n<b(a,b,c\in \mathbb{Z})\)

    查找失敗時,至少比較 \(a\) 次關鍵字;查找成功時,最多比較關鍵字次數是 \(b\)

    差值查找

    咕咕咕

    斐波那契查找

    咕咕咕

    二叉查找樹

    二叉查找樹(英語:Binary Search Tree),也稱為二叉搜索樹、有序二叉樹(ordered binary tree)或排序二叉樹(sorted binary tree),是指一棵空樹或者具有下列性質的二叉樹:

  • 若任意節點的左子樹不空,則左子樹上所有節點的key值均小于它的根節點的值;

  • 若任意節點的右子樹不空,則右子樹上所有節點的key值均大于它的根節點的值;

  • 任意節點的左、右子樹也分別為二叉查找樹;

  • 沒有鍵值相等的節點。

  • 分塊查找

    分塊查找又稱索引順序查找,它是順序查找的一種改進方法。

    算法的思想是將 \(n\) 個數據元素"按塊有序"劃分為 \(m\) 塊( \(m\le n\) )。每一塊中的結點不必有序,但塊與塊之間必須"按塊有序",每個塊內的的最大元素小于下一塊所有元素的任意一個值。

    在塊與塊之間進行二分操作。

    時間復雜度:\(O(\log m + \dfrac{n}{m})\)

    哈希查找

    哈希通過散列表來實現存儲與查找。

    其中散列函數只要有一下幾類:

  • 直接定址法:取關鍵字或關鍵字的某個線性函數值為散列地址。即 \(\text{Hash}(k) = k\)\(\text{Hash}(k) = a \times k + b\) ,其中 \(a,b\) 為常數(這種散列函數叫做自身函數)

  • 數字分析法:假設關鍵字是以 \(r\) 為基的數,并且哈希表中可能出現的關鍵字都是事先知道的,則可取關鍵字的若干數位組成哈希地址。

  • 平方取中法:取關鍵字平方后的中間幾位為哈希地址。通常在選定哈希函數時不一定能知道關鍵字的全部情況,取其中的哪幾位也不一定合適,而一個數平方后的中間幾位數和數的每一位都相關,由此使隨機分布的關鍵字得到的哈希地址也是隨機的。取的位數由表長決定。

  • 折疊法:將關鍵字分割成位數相同的幾部分(最后一部分的位數可以不同),然后取這幾部分的疊加和(舍去進位)作為哈希地址。

  • 隨機數法

  • 除留余數法:取關鍵字被某個不大于散列表表長m的數p除后所得的余數為散列地址。即 \(\text{Hash}(k) = k \pmod{p}\)\(p\le m\) 。不僅可以對關鍵字直接取模,也可在折疊法、平方取中法等運算之后取模。對 \(p\) 的選擇很重要,一般取素數或 \(m\) ,若 \(p\) 選擇不好,容易產生沖突。

  • 為了避免哈希沖突,一般有一下幾種方法:

    • 開放尋址法

      • 線性探測法:若發現位置已經被占用,則一個一個往后找。

      • 二次探測法:采用開放定址法處理沖突中的二次探測再散列(也即是題目中的二元探測法),則哈希函數變為 \(\text{Hash}(k)=(\text{Hash}(k)+d) \pmod{mod}\),其中 \(d=1^2,-1^2,2^2,-2^2,3^2,\dots\)

      • 雙重散列

    • 鏈地址法:把數值加入哈希的鏈表中。

    (復賽中)也可以使用線性探測法解決哈希沖突問題

    總結

    以上是生活随笔為你收集整理的常见存储、查找算法的全部內容,希望文章能夠幫你解決所遇到的問題。

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