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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[CareerCup] 8.10 Implement a Hash Table 实现一个哈希表

發布時間:2025/3/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [CareerCup] 8.10 Implement a Hash Table 实现一个哈希表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

8.10 Design and implement a hash table which uses chaining (linked lists) to handle collisions.

?

這道題讓我們實現一個簡單的哈希表,我們采用了最簡單的那種取余映射的方式來實現,我們使用Cell來保存一對對的key和value的映射關系,然后每一個格子都用一個list鏈表來保存所有的余數為該格子序號的Cell,我們設定格子總數為10,然后我們用泛式編程來適用于所有的參數類型,然后實現哈希表的基本存數和取數的功能。現在大多數的哈希表都是用二叉搜索樹來實現的,但是用BST的話取數就是不是O(1)的時間復雜度了(如果我們以后很多的collision的話),但是BST的好處就是省空間,不需要建立超大的數組來保存映射。

?

template<typename K, typename V> class Cell{ public:Cell(K k, V v): _key(k), _value(v) {}bool equivalent(Cell *c) {return equivalent(c->getKey());}bool equivalent(K k) {return _key == k;}K getKey() { return _key; }V getValue() { return _value; }private:K _key;V _value; };template<typename K, typename V> class Hash { public:Hash() {_items.resize(_MAX_SIZE);}int hashCodeOfKey(K key) {return sizeof(key).size() % _items.size();}void put(K key, V value) {int x = hashCodeOfKey(key);if (_items[x] == nullptr) {_items[x] = new list<Cell<K, V>*> ();}list<Cell<K, V>*> *collided = _items[x];for (auto a : *collided) {if (a->equivalent(key)) {collided->remove(a);break;}}Cell<K, V> *cell = new Cell<K, V>(key, value);collided->push_back(cell);}V get(K key) {V v;int x = hashCodeOfKey(key);if (_items[x] == nullptr) {return v;}list<Cell<K, V>*> *collided = _items[x];for (auto a : *collided) {if (a->equivalent(key)) {return a->getValue();}}return v;}private:const int _MAX_SIZE = 10;vector<list<Cell<K, V>*>*> _items; };

?

總結

以上是生活随笔為你收集整理的[CareerCup] 8.10 Implement a Hash Table 实现一个哈希表的全部內容,希望文章能夠幫你解決所遇到的問題。

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