線性探測

線性探測是計算機程序解決散列表衝突時所採取的一種策略 。 散列表這種數據結構用於保存鍵值對 ， 並且能通過給出的鍵來查找表中對應的值 。 線性探測這種策略是在1954年由Gene Amdahl,, 和 所發明 ， 並且最早於1963年由Donald Knuth對其進行分析 。 與和雙散列一樣 ， 線性探測是一種的策略 。 在這些策略裏 ， 散列表的每個單元都存儲一對鍵值對 。 當散列函數對一個給定值產生一個鍵 ， 並且這個鍵指向散列表中某個已經被另一個鍵值對所佔用的單元時 ， 線性探測用於解決此時產生的衝突 ： 查找散列表中離衝突單元最近的空閒單元 ， 並且把新的鍵插入這個空閒單元 。 同樣的 ， 查找也同插入如出一轍 ： 從散列函數給出的散列值對應的單元開始查找 ， 直到找到與鍵對應的值或者是找到空單元 。 正如Thorup和張寅在2012年所寫 ， … “ 散列表是最常用的普通數據結構 ， 它在硬件上的標準實現中最流行的方法就是使用線性探測 。 線性探測又快又簡單 。 ” 線性探測能夠提供高性能的原因是因爲它的良好的引用局部性 ， 然而它與其他解決散列衝突的策略相比對於散列函數的質量更爲敏感 。 當使用隨機散列函數 ， 或 ， 其用於搜索 ， 插入或刪除的預期時間是常數 。 不過 ， 藉由其他像是私語雜湊的散列函數可以在實作中達到較好的結果 。