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

公司创建一个网站多少钱武汉百度信息流广告

公司创建一个网站多少钱,武汉百度信息流广告,tp做的网站封装成app,dz论坛做视频网站教程1.哈希的概念 哈希(hash)⼜称散列,是⼀种组织数据的⽅式。从译名来看,有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位置建⽴⼀个映射关系,查找时通过这个哈希函数计算出Key存储的位置,进⾏快速查找。 1.2.直接定址法…

1.哈希的概念

哈希(hash)⼜称散列,是⼀种组织数据的⽅式。从译名来看,有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位置建⽴⼀个映射关系,查找时通过这个哈希函数计算出Key存储的位置,进⾏快速查找。

1.2.直接定址法

当关键字的范围⽐较集中时,直接定址法就是⾮常简单⾼效的⽅法,⽐如⼀组关键字都在[0,99]之间,那么我们开⼀个100个数的数组,每个关键字的值直接就是存储位置的下标。再⽐如⼀组关键字值都在[a,z]的⼩写字⺟,那么我们开⼀个26个数的数组,每个关键字acsii码-a ascii码就是存储位置的下标。也就是说直接定址法本质就是⽤关键字计算出⼀个绝对位置或者相对位置

1.3.哈希冲突 

直接定址法的缺点也⾮常明显,当关键字的范围⽐较分散时,就很浪费内存甚⾄内存不够⽤。

这⾥存在的⼀个问题就是,两个不同的key可能会映射到同⼀个位置去,这种问题我们叫做哈希冲突。

1.4.负载因子

假设哈希表中已经映射存储了N个值,哈希表的大小为M,那么 负载因子 = N/M ,负载因⼦有些地⽅也翻译为载荷因⼦/装载因⼦等,他的英⽂为load factor。负载因⼦越⼤,哈希冲突的概率越⾼,空间利⽤率越⾼;负载因⼦越⼩,哈希冲突的概率越低,空间利⽤率越低。

1.5.将关键字转为整数

我们将关键字映射到数组中位置,⼀般是整数好做映射计算,如果不是整数,我们要想办法转换成整数。后面给具体实现方法。

2.哈希函数

⼀个好的哈希函数应该让N个关键字被等概率的均匀的散列分布到哈希表的M个空间中,但是实际中却很难做到,但是我们要尽量往这个⽅向去考量设计。

2.1除法散列法

假设哈希表的⼤⼩为M,那么通过key除以M的余数作为映射位置的下标,也就是哈希函数为:h(key) = key % M。

当使⽤除法散列法时,要尽量避免M为某些值,如2的幂,10的幂等。如果是2^x ,那么key %

2^x本质相当于保留key的后X位,那么后x位相同的值,计算出的哈希值都是⼀样的,就冲突了。如: {63 , 31}看起来没有关联的值,如果M是16,也就是2^4 ,那么计算出的哈希值都是15,因为63的⼆ 进制后8位是 00111111,31的⼆进制后8位是 00011111。如果是10^2 ,就更明显了,保留的都是10进值的后x位,如:{112, 12312},如果M是100,也就是10^2 ,那么计算出的哈希值都是12。

当使⽤除法散列法时,建议M取不太接近2的整数次幂的⼀个质数(素数)。

3.处理哈希冲突

实践中哈希表⼀般还是选择除法散列法作为哈希函数,当然哈希表⽆论选择什么哈希函数也避免不了冲突,那么插⼊数据时,如何解决冲突呢?主要有两种两种⽅法,开放定址法和链地址法。

3.1开放定址法

在开放定址法中所有的元素都放到哈希表⾥,当⼀个关键字key⽤哈希函数计算出的位置冲突了,则按照某种规则找到⼀个没有存储数据的位置进⾏存储,开放定址法中负载因⼦⼀定是⼩于1的。
1.线性探测:
1.1 从发⽣冲突的位置开始,依次线性向后探测,直到寻找到下⼀个没有存储数据的位置为⽌,如果⾛
到哈希表尾,则回绕到哈希表头的位置。1.2 h(key) = hash0 = key % M,, hash0位置冲突了,则线性探测公式为:
hc(key,i) = hashi = (hash0 + i) % M, i = {1, 2, 3, ..., M − 1},
因为负载因⼦⼩于1,则最多探测M-1次,⼀定能找到⼀个存储key的位置。2.⼆次探测:
2.1 从发⽣冲突的位置开始,依次左右按⼆次⽅跳跃式探测,直到寻找到下⼀个没有存储数据的位置为
⽌,如果往右⾛到哈希表尾,则回绕到哈希表头的位置;如果往左⾛到哈希表头,则回绕到哈希表
尾的位置;
2.2 h(key) = hash0 = key % M , hash0位置冲突了,则⼆次探测公式为:
hc(key,i) = hashi = (hash0 ± i^2 ) % M, i = {1, 2, 3, ..., M/2}
2.3 ⼆次探测当 hashi = (hash0 − i^2)%M 时,当hashi<0时,需要hashi += M

3.2扩容:

这⾥哈希表负载因⼦控制在0.7,当负载因⼦到0.7以后我们就需要扩容了,我们还是按照2倍扩容,但是同时我们要保持哈希表⼤⼩是⼀个质数,第⼀个是质数,2倍后就不是质数了。那么如何解决了,⼀种⽅案就是除法散列中Java HashMap的使⽤2的整数幂,但是计算时不能直接取模的改进⽅法。另外⼀种⽅案是sgi版本的哈希表使⽤的⽅法,给了⼀个近似2倍的质数表,每次去质数表获取扩容后的⼤⼩。

3.3key不能取模的问题

当key是string/自定义等类型时,key不能取模, 那么我们需要给HashTable增加⼀个仿函数,这个仿函 数⽀持把key转换成⼀个可以取模的整形,如果key可以转换为整形并且不容易冲突,那么这个仿函数 就⽤默认参数即可,如果这个Key不能转换为整形,我们就需要⾃⼰实现⼀个仿函数传给这个参数,实 现这个仿函数的要求就是尽量key的每值都参与到计算中,让不同的key转换出的整形值不同。string 做哈希表的key⾮常常⻅,所以我们可以考虑把string特化⼀下。

3.4开放定址法代码实现

*3.4链地址法

哈希表中存储⼀个指针,没有数据映射这个位置时,这个指针为空,有多个数据映射到这个位置时,我们把这些冲突的数据链接成⼀个链表,挂在哈希表这个位置下⾯,链地址法也叫做拉链法或者哈希桶。

扩容:

开放定址法负载因⼦必须⼩于1,链地址法的负载因⼦就没有限制了,可以⼤于1。负载因⼦越⼤,哈希冲突的概率越⾼,空间利⽤率越⾼;负载因⼦越⼩,哈希冲突的概率越低,空间利⽤率越低;stl中unordered_xxx的最⼤负载因⼦基本控制在1,⼤于1就扩容。
极端场景:
如果极端场景下,某个桶特别⻓怎么办?这是把链表转换成红黑树,提供一个思路。

3.5链地址法代码实现

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

相关文章:

  • 厦门网站建设公司推荐深圳网站关键词排名优化
  • 深圳网站网站开发百度推广的渠道有哪些
  • web2.0动态网站开发下载seo关键词排名优化专业公司
  • wordpress官方中文主题站长之家seo一点询
  • bootstrap制作的网站页面产品推广软文200字
  • 网站介绍视频怎么做的小网站怎么搜关键词
  • 企业自助建站网网络推广的细节
  • 画册怎么做网络优化工程师有前途吗
  • 购物网站哪里建最好百度助手app下载
  • 织梦能做视频网站吗百度指数怎么用
  • 备案做电影网站吗企业快速建站
  • 东阳畅销自适应网站建设域名服务器查询
  • 微盟开店怎么收费seo兼职工资一般多少
  • 高水平的大连网站建设网站查询地址
  • 影楼网站模板哪家公司做推广优化好
  • iis 二级网站 发布淘宝关键词推广
  • 北京产品设计公司有哪些如何优化
  • 室内设计公司logo长沙优化网站厂家
  • 成品网站w灬源码1688永久网站长沙百度网站推广优化
  • 建设外贸独立网站企业建站公司热线电话
  • 长沙做网站公众微信号免费的关键词挖掘工具
  • 网站建设微信托管优化网站关键词排名
  • 苏州专业网站建设定制百度百科分类方法
  • 发布装修信息的平台有哪些鼓楼网页seo搜索引擎优化
  • 做网站多少钱 注意什么广州各区正在进一步优化以下措施
  • 政府网站建设政策企业员工培训课程内容
  • 情人做网站阿里指数怎么没有了
  • 关于做ppt的网站有哪些内容吗搜索引擎优化简历
  • 建设网站转赚钱吗兰州网络推广
  • 网站建设服务器对比搜狗网