區分幾個概念:Dictionary, Direct-address Tables, Hash Tables

來源:互聯網
上載者:User

Dictionary是一種抽象資料類型,用來儲存可以用索引值(key)索引的資料項目,基本的操作包括插入、尋找和刪除。它是一個相對比較廣義的概念,並沒有規定具體的實現,比如在底層用什麼資料結構儲存資料項目。因此,只要儲存的每一個資料項目是一對(key, value),並可以用key索引到這一項,就可以將這樣的資料類型稱為Dictionary。

 

Direct-address Tables和Hash Tables都是Dictionary的具體實現方式。Direct-address Tables其實就是普通的數組,數組的第k項只被用來儲存索引值為k的資料項目。顯然,要應用這種資料結構必須給每一個可能的索引值預留一個數組項,因此它只適用於索引值的集合比較小的情況。雖然Direct-address Tables看起來比較浪費記憶體,但也有它的優點:插入、尋找和刪除操作的時間複雜度為O(1)。

 

Hash Tables是Dictionary的一種有效實現,它解決了Direct-address Tables在索引值集合比較大的情況下不適用的問題。假設U表示所有可能的索引值的集合,K表示實際要儲存的索引值的集合。在|U|遠遠大於|K|的時候,Hash Tables只分配和|K|大小成比例的資料表項,然後通過雜湊函數將K映射到各個表項中。Hash Tables通過將取值範圍很大的索引值映射到較小的集合中,極大地節省了儲存空間,但同時引入了碰撞(Collision)的因素,即幾個索引值映射到同一表項的情況。由於處理碰撞而增加的複雜度,常常使尋找或刪除等操作的時間複雜度不再為O(1),在最差的情況下甚至為O(n)(n = |K|)。但在實際中,通過選擇合適的雜湊函數,上述操作的時間複雜度常常能控制在接近O(1)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.