当前位置: 首页 > wzjs >正文

上海家装设计网站东莞官方网站

上海家装设计网站,东莞官方网站,重庆建设人才促进网,高唐企业建网站服务商1.HashMap原理 当散列函数计算出某个元素的插入位置,而该位置上的空间已不再可用时,最简单的办法就是循序往下一一寻找,直到找到一个可用空间为止,只要表格array足够大,总是能找到一个安身立命的空间,但是…
1.HashMap原理

当散列函数计算出某个元素的插入位置,而该位置上的空间已不再可用时,最简单的办法就是循序往下一一寻找,直到找到一个可用空间为止,只要表格array足够大,总是能找到一个安身立命的空间,但是要花多少时间就很难说了。进行元素搜寻操作时,道理也相同,如果散列表计算出来的位置上的元素值与我们的搜寻目标不符,就循序往下一一寻找,直到找到吻合者或者直到遇上空格元素。

分析线性探测的表现,需要两个假设:一表格足够大,二每个元素都够独立。在此假设之下,最坏的情况是线性寻访整个表格,平均情况则是寻访一半表格。所以线性探测的一个突出问题是:平均插入成本的成长幅度,远高于负载系数的成长幅度,这样的现象在hashing过程中称为主集团primary clustering(此时我们手上有的是一大团已被用过的方格,插入操作极有可能在主集团所形成的泥泞中奋力爬行,不断解决碰撞问题)。

2.代码解析
  1. 模板类设计

    • 使用模板泛化键类型(KeyType),支持整数、字符串等类型。
    • table 存储键值,occupied 标记槽位是否被占用。
  2. 核心方法

    • hashFunction:计算键的哈希值(取绝对值的模运算)。
    • insert:插入键值,冲突时线性探测下一个空闲槽位。
    • search:从哈希位置开始顺序查找键值。
    • remove:标记指定键的位置为空闲。
  3. 显示哈希表

    • 遍历所有槽位,输出键值或“空”

注意事项

  1. 负载因子

    • 最佳负载因子为 0.6~0.7,超过时建议扩容哈希表。
    • 扩容可通过重新哈希(Rehashing)实现,将现有键重新插入到更大的表中。
  2. 删除优化

    • 本实现使用标记删除法(occupied 数组),避免移动元素。
    • 若需完全删除节点,需遍历后续槽位并前移元素,但会增加复杂度。
  3. 冲突解决

    • 线性探测的局限性在于可能导致聚集(Clustering),改用二次探测或双重哈希可缓解。
#include <iostream>
#include <vector>
#include <string>
#include <utility> // for std::pair
using namespace std;
template<typename KeyType, typename ValueType>
class HashTable {
private:vector<pair<KeyType, ValueType>> table;vector<bool> occupied; // 标记槽位是否被占用int size;// 哈希函数:简单取模int hashFunction(const KeyType& key) const {return abs(key) % size;}
public:// 构造函数,初始大小为质数(例如101)HashTable(int size = 101) : size(size), table(size), occupied(size, false) {}// 插入操作void insert(const KeyType& key, const ValueType& value) {int index = hashFunction(key);while (occupied[index]) {index = (index + 1) % size;}table[index] = pair<KeyType, ValueType>(key, value);occupied[index] = true;}// 查找操作bool search(const KeyType& key, ValueType& result) const {int index = hashFunction(key);while (occupied[index]) {if (table[index].first == key) {result = table[index].second;return true;}index = (index + 1) % size;}return false;}// 删除操作bool remove(const KeyType& key) {int index = hashFunction(key);while (occupied[index]) {if (table[index].first == key) {occupied[index] = false;return true;}index = (index + 1) % size;}return false; // 未找到键}
};int main() {// 定义哈希表类型:键为int,值为stringHashTable<int, string> ht(7); // 哈希表大小为7// 插入测试数据ht.insert(23, "Alice");ht.insert(14, "Bob");ht.insert(55, "Charlie");ht.insert(31, "David");ht.insert(77, "Eve");ht.insert(89, "Frank");ht.insert(10, "Grace"); // 哈希值为3 (10%7=3),探测到索引3被占用,插入到4// 查找测试string result;cout << endl << "查找键31对应的值:";if (ht.search(31, result)) {cout << result << endl;} else {cout << "未找到" << endl;}// 删除测试ht.remove(77);return 0;
}

http://www.dtcms.com/wzjs/783351.html

相关文章:

  • 做网站设计师网站开发技术的现状及发展趋势
  • 在线咨询网站开发价格网站seo技巧
  • 一般网站开发用什么笔记本今天上海最新新闻事件
  • 某些网站dns解析失败电商网站建设运城
  • 公司网站用什么cms系统设计网站大全湖南岚鸿设计
  • 私人定制网站图片链接怎么生成
  • discuz插件惠州seo网络推广
  • wordpress设置注册页面seo有哪些优缺点?
  • 凡科是免费做网站吗南京最好的网站设计公司
  • 温州网站设计只找亿企邦电子商务网站建设项目的阶段的划分
  • 毕设网站开发什么题目好青海西宁网页网站制作
  • 潍坊模板建站定制大学网站开发实验室建设方案
  • 做ppt的软件模板下载网站有哪些百度收录正常网站流量下降
  • 专门卖电子产品的网站浏阳做网站
  • mip网站模板wordpress 视频
  • 河南高端建设网站wordpress是干嘛用的
  • 免费网站推广文章wordpress 百科主题
  • 网站设计标准字体免费平台发布销售信息
  • 1688网站上自己做模版王也道长头像无水印
  • 交互网站设计自己做网站页面
  • 通化网站推广阳江优化网站排名
  • 公司做网站的费用用途写什么wordpress文章加标题
  • 晋江网站建设洛阳网站制作写软文能赚钱吗
  • 网站建设方案书 模版区网站开发语言
  • 网上做效果图网站有哪些软件有哪些线上如何推广自己的产品
  • 一个公司做100个网站ios 集成wordpress
  • 戚墅堰网站建设爱客装修官网
  • 门诊部网站建设网站优化网络
  • 网站新闻源码国内外高校门户网站建设
  • 南山网站优化动易网站 设置背景图片