解決hashtable的衝突的第二種方法叫做開放定址法。開放定址法不需要使用指標,不需要特意的動態分配空間。當發生衝突時此演算法會選擇其他的空的單元。因此核心問題來了,怎麼有效的選擇空的單元呢?
原理:對hashtable進行插入時,出現index相同時,我們在原始index的基礎上加f(i)。但是問題又來了,因為f(i)為線性函式,它會連續的insert元素,因此會出現很多元素的聚集現象,我們也叫做一次聚集。怎麼解決呢?往下看哦~
原理:對hashtable進行插入時,出現index相同時,我們在原始index的基礎上加f(i)。但是問題又來了,因為f(i)為平方函式,雖然不會連續的insert元素,但是會出現二次聚集現象。怎麼解決呢?可使用雙雜湊進行,本篇不詳細討論了。
hashtable完整原始碼如下:
#include#includetypedef size_t index;
typedef std::string elemtype;
const size_t maxsize = 11;
enum class kindofentry;
struct hashunit ;
struct hashtab ;
class hashtable ;
~hashtable()
public:
index find(const elemtype key)const;
void insert(const elemtype key);
void delete(const elemtype key);
void display()const;
private:
index hash_one(const elemtype key)const;
index hash_two(const elemtype key)const;
index hash_three(const elemtype key)const;
private:
std::unique_ptrhashtable;
};index hashtable::hash_one(const elemtype key)const
return hashval % hashtable->tablesize;
}index hashtable::hash_two(const elemtype key)const
index hashtable::hash_three(const elemtype key)const
return hashval % hashtable->tablesize;
}index hashtable::find(const elemtype key)const
return index;
}void hashtable::insert(const elemtype key)
}void hashtable::delete(const elemtype key)
void hashtable::display()const
}int main(void)
HashTable C 實現之分離鏈結法
hashtable是以常數時間進行進行插入,刪除和查詢的資料結構。其查詢原理是 通過雜湊函式hash 進行雜湊得到value,value為雜湊表的下表。怎麼能得到均衡的value呢?hash 雜湊一般是通過字串對映到鍵值 index hashtable hash one const elemtype...
ubuntu開放ssh實現遠端登入
ssh分為客戶端openssh client和伺服器端openssh server 可執行下面命令進行安裝 sudo apt get install openssh client openssh server要想給其他機器提供ssh遠端登入,則必須安裝伺服器端server,並保證sshd服務正常執行...
開放定址法實現雜湊表
使用分離鏈結法實現雜湊表時需要額外的空間來儲存指標,而且需要給新單元動態分配空間,導致演算法的速度減慢。開放定址法一次分配表的大小,可以使用線性雜湊,平方雜湊,雙重雜湊等等方法,這些方法除了雜湊函式不相同之外,對於雜湊表的大小要求也不一樣。平方雜湊需要使表的大小是儲存元素的兩倍以上,這樣總能找到空槽...