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

渭南专业做网站深圳建网建网站

渭南专业做网站,深圳建网建网站,互联网公司净利排名,遵义制作公司网站的公司这篇博客要说的是哈希算法#xff0c;哈希又称为散列#xff0c;它是将存储的值和存储的位置建立起关联关系的一种算法#xff0c;或者说是一种将任意长度的数据映射为固定长度的输出的算法。 什么意思呢#xff1f;我们来看一个例子#xff1a;比如说我们要存储1#xf… 这篇博客要说的是哈希算法哈希又称为散列它是将存储的值和存储的位置建立起关联关系的一种算法或者说是一种将任意长度的数据映射为固定长度的输出的算法。 什么意思呢我们来看一个例子比如说我们要存储123456这几个数据我们可以开6个空间大小的数组用于存储正好下标位置跟数据值之间是有一定的关系的很容易存储。 但是假如是下面6个数据呢123100010011002难道我们还要开1000个空间不成当然不可以这太浪费了于是就开始想办法让它们都对于总个数6取余不就得到范围比较小的值了吗。它们取余后分别得到123450我们让这几个数据当作它们各自的位置这样每一个数据都和一个位置相互对应了这就是一种解决问题的方法。 上面两个例子已经很形象的说明了什么是哈希并且第一个例子就是我们的直接定址法第二个例子就是除留余数法。 但是我们的除留余数法还是有问题的有没有可能两个数取余后得到的数相同肯定是有可能的这种情况就叫哈希冲突。我们可以知道哈希冲突越多那么效率就越低。所以我们一般当负载因子或者叫载荷因子就是实际存的数据个数除以表的大小大于某个数就要扩容增大表的大小。这样就可以一定程度的保证效率。那么接下来我们就要解决哈希冲突有两种方法一种叫闭散列开放定址法一种叫开散列拉链法也叫哈希桶 它们分别是什么意思呢下面我们分别来说闭散列开放定址法就是在这个固定长度的数组中如果一个值要放的位置已经有其他的值了那么就从这个位置向后边找直到找到空的位置放入如果找到结尾那么再返回头去找。这个向后边找可以一个一个找就叫线性探测也可以14916.....这样二次方数这样找就叫做二次探测。 下面一个是哈希桶也叫开散列拉链法就是我们在哈希表中存某个数据所在节点的指针如果下个数据仍然在这个位置那么就挂在上个数据的下边就可以了挂上数据之后就像一个桶或者像拉链于是名字由此得名 那么接下来我们就分别用这两种解决哈希冲突的方法来实现一下哈希表这里我们的哈希表中的值先按整形看等后边我们再慢慢加上模板等一系列东西,先看第一种方法 enum state {EMPTY,EXIST,DELETE }; struct HashNode {int val0;state stateEMPTY; }; class HashTable { public:HashTable(size_t n 10) {_hashvec.resize(n);}HashNode* find(size_t key) {int hashi key % _hashvec.size();while (_hashvec[hashi].state ! EMPTY _hashvec[hashi].val ! key) {hashi;hashi % _hashvec.size();}if (_hashvec[hashi].state EMPTY)return nullptr;return _hashvec[hashi];}bool insert(size_t data) {if (find(data))return false;if (_n * 10 / _hashvec.size() 7) {//扩容HashTable newtable;newtable._hashvec.resize(_hashvec.size()*2);for (size_t i 0; i _hashvec.size(); i) {if(_hashvec[i].stateEXIST)newtable.insert(_hashvec[i].val);}_hashvec.swap(newtable._hashvec);}size_t hashi data % _hashvec.size();while (_hashvec[hashi].state EXIST) {hashi;hashi % _hashvec.size();}_hashvec[hashi].val data;_hashvec[hashi].state EXIST;_n;return true;}bool erase(size_t data) {HashNode* tmp find(data);if (tmp nullptr)return false;tmp-state DELETE;--_n;return true;} private:size_t _n0;vectorHashNode _hashvec; }; 再看第二种方法 struct HashNode {HashNode(size_t n0):val(n),_next(nullptr){}size_t val 0;HashNode* _next nullptr;};class HashTable {public:HashTable(size_t n10) {_hashvec.resize(n, nullptr);}HashNode* find(size_t key) {size_t hashi key % _hashvec.size();HashNode* cur _hashvec[hashi];while (cur) {if (cur-val key)return cur;cur cur-_next;}return nullptr;}bool insert(size_t key) {if (find(key))return false;if (_n _hashvec.size()) {//扩容HashTable newtable(_hashvec.size() * 2);for (size_t i 0; i _hashvec.size(); i) {HashNode* cur _hashvec[i];HashNode* next nullptr;while (cur) {next cur-_next;size_t hashi cur-val % newtable._hashvec.size();cur-_next newtable._hashvec[hashi];newtable._hashvec[hashi] cur;/*if (newtable._hashvec[hashi] nullptr) {newtable._hashvec[hashi] cur;}else {HashNode* tmp newtable._hashvec[hashi];while (tmp-_next) {tmp tmp-_next;}tmp-_next cur;}cur-_next nullptr;*/cur next;}_hashvec[i] nullptr;}_hashvec.swap(newtable._hashvec);}size_t hashi key % _hashvec.size();HashNode* newnode new HashNode(key);newnode-_next _hashvec[hashi];_hashvec[hashi] newnode;_n;return true;}bool erase(size_t key) {size_t hashi key % _hashvec.size();HashNode* prev nullptr;HashNode* cur _hashvec[hashi];while (curcur-val ! key) {prev cur;cur cur-_next;}if (cur nullptr)return false;if (prev nullptr) {_hashvec[hashi] cur-_next;}else {prev-_next cur-_next;}delete cur;return true;}private:size_t _n 0;vectorHashNode* _hashvec;}; }
http://www.zqtcl.cn/news/973636/

相关文章:

  • 企业网站建设中企动力网站制作电话多少
  • 做电影网站怎么接广告官网如何做广告推广
  • 网站建设试卷摄影wordpress网站托管
  • 西安专业网站排名优化一站式建站价格
  • 做项目的编程网站网站建设范文
  • 阿里云备案 网站备案现在办宽带多少钱一年
  • 东莞网站建设公司哪家好和黄crm在线
  • 邢台外贸网站建设怎么在抖音上卖东西
  • 光泽县规划建设局网站番禺做哪些做网站的
  • 海南响应式网站建设哪里好衡水哪儿做wap网站
  • 月熊志网站百度网页版
  • 三亚网站建设方案鱼爪商标交易平台
  • phpwind 手机网站模板建立网站的英文短语
  • 年度网站建设工作总结制作微信小程序需要什么技术
  • wordpress打字不显示图片wordpress 访问优化
  • 太原网站建设方案咨询网站开发公司的选择
  • 广西网站建设设计大连嘉良建设有限公司网站
  • 白名单查询网站网站建设改变某个表格大小
  • 青岛网站开发公司电话百度投放
  • 唐山玉田孤树做宣传上什么网站百度推广有效果吗
  • 亚马逊网站特点佛山营销型网页设计
  • 网站建设 长沙开福区做百度移动网站排名软
  • 广州购物网站建设在线解压网站
  • 网站建设教学方法探究购物网站开发中查看订单的实现逻辑
  • 网站建设漂亮的模板西安网络优化大的公司
  • 如何免费简单建一个网站河北优化网站获客qq
  • 如何给网站做seo东莞网站建设星河
  • 什么叫门户类网站哪个网站能帮助做路书
  • 网站建站基础娄底网站推广
  • WordPress网站仿制光明建网站的公司