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

外贸网站推广渠道国外视频模板网站e

外贸网站推广渠道,国外视频模板网站e,济宁哪里有网站建设,免费网站如何做推广方案目录 一、介绍 二、哈希数据结构 三、✍️实现哈希散列 1. 哈希碰撞#x1f4a5; 2. 拉链寻址⛓️ 3. 开放寻址⏩ 4. 合并散列 一、介绍 哈希表#xff0c;也被称为散列表#xff0c;是一种重要的数据结构。它通过将关键字映射到一个表中的位置来直接访问记录#…目录 一、介绍 二、哈希数据结构 三、✍️实现哈希散列 1. 哈希碰撞 2. 拉链寻址⛓️ 3. 开放寻址⏩ 4. 合并散列 一、介绍 哈希表也被称为散列表是一种重要的数据结构。它通过将关键字映射到一个表中的位置来直接访问记录以此加快查找速度。这种映射函数被称为散列函数。哈希表的历史可以追溯到上个世纪 50 年代由美国计算机科学家拉宾·珀尔Rabin Pearl和罗伯特·韦伯Robert Weiss发明。自那时以来哈希表已经成为了计算机科学和编程中不可或缺的一部分广泛应用于各种领域。 二、哈希数据结构 在计算机中数据的存储结构主要有两种数组和链表。数组的优势是长度固定每个下标都指向唯一的一个值但同时也存在长度固定的缺点。哈希表则是一种介于数组和链表之间能够动态调整大小的数据结构。 使用数组存放元素都是按照顺序存放的当需要获取某个元素的时候则需要对数组进行遍历获取到指定的值时间复杂度是 O(n)。哈希表的主要优点在于它可以提供快速的插入操作和查找操作无论哈希表中含有多少条数据插入和查找的时间复杂度都是为 O(1)这一特性使得哈希表在处理大量数据时具有很高的效率。 三、✍️实现哈希散列 源码地址hash_table 1. 哈希碰撞 说明通过模拟简单 HashMap 实现去掉拉链寻址等设计验证元素索引位置的碰撞。 public class HashMap01K, V implements MapK, V {private Logger logger LoggerFactory.getLogger(HashMap01.class);private Object[] tab new Object[8];Overridepublic void put(K key, V value) {int idx key.hashCode() (tab.length - 1);tab[idx] value;}Overridepublic V get(K key) {int idx key.hashCode() (tab.length - 1);return (V) tab[idx];} } HashMap01 的实现只是通过哈希计算出的下标散列存放到固定的数组内。那么这样当发生元素下标碰撞时原有的元素就会被新的元素替换掉即哈希碰撞。 测试 Test public void test_hashMap01() {MapString, String map new HashMap01();map.put(01, 小火龙);map.put(04, 火爆猴);logger.info(碰撞前 key{} value{},01,map.get(01));// 模拟下标碰撞map.put(09,可达鸭);map.put(12,呆呆兽);logger.info(碰撞后 key{} value{},01,map.get(01)); } 10:50:36.662 [main] INFO com.pjp.hash_table.test.HashTableTest - 碰撞前 key01 value小火龙 10:50:36.666 [main] INFO com.pjp.hash_table.test.HashTableTest - 碰撞后 key01 value呆呆兽 通过测试结果可以看到碰撞前 map.get(01) 的值是 小火龙两次下标索引碰撞后存放的值则是 呆呆兽这也就是使用哈希散列必须解决的一个问题无论是在已知元素数量的情况下通过扩容数组长度解决还是把碰撞的元素通过链表存放都是可以的。 2. 拉链寻址⛓️ 说明既然我们没法控制元素不碰撞但我们可以对碰撞后的元素进行管理。比如像 HashMap 中拉链法一样把碰撞的元素存放到链表上。这里我们就来简化实现一下。 public class HashMap02ByZipperK, V implements MapK, V {private LinkedListNodeK, V[] tab new LinkedList[8];Overridepublic void put(K key, V value) {int idx key.hashCode() (tab.length - 1);if (tab[idx] null) {tab[idx] new LinkedList();tab[idx].add(new Node(key, value));} else {tab[idx].add(new Node(key, value));}}Overridepublic V get(K key) {int idx key.hashCode() (tab.length - 1);for (NodeK, V kvNode : tab[idx]) {if (key.equals(kvNode.getKey())) {return kvNode.getValue();}}return null;}static class NodeK, V {final K key;V value;public Node(K key, V value) {this.key key;this.value value;}public K getKey() {return key;}public V getValue() {return value;}} } 因为元素在存放到哈希桶上时可能发生下标索引膨胀所以这里我们把每一个元素都设定成一个 Node 节点这些节点通过 LinkedList 链表关联也可以通过 Node 节点构建出链表 next 元素即可。那么这时候在发生元素碰撞相同位置的元素就都被存放到链表上了获取的时候需要对存放多个元素的链表进行遍历获取。 测试 Test public void test_hashMap02() {MapString, String map new HashMap02ByZipper();map.put(01, 小火龙);map.put(04, 火爆猴);logger.info(碰撞前 key{} value{},01,map.get(01));// 模拟下标碰撞map.put(09,可达鸭);map.put(12,呆呆兽);logger.info(碰撞后 key{} value{},01,map.get(01)); } 12:19:15.505 [main] INFO com.pjp.hash_table.test.HashTableTest - 碰撞前 key01 value小火龙 12:19:15.509 [main] INFO com.pjp.hash_table.test.HashTableTest - 碰撞后 key01 value小火龙 前后获取 01 位置元素都是 小火龙 元素没有被替换因为相同索引位置的元素放到链表上去了。 3. 开放寻址⏩ 说明除了对哈希桶上碰撞的索引元素进行拉链存放还有不引入新的额外的数据结构只是在哈希桶上存放碰撞元素的方式。它叫开放寻址也就是 ThreaLocal 中运用斐波那契散列开放寻址的处理方式。 public class HashMap03ByOpenAddressingK, V implements MapK, V {private final NodeK, V[] tab new Node[8];Overridepublic void put(K key, V value) {int idx key.hashCode() (tab.length - 1);if (tab[idx] null) {tab[idx] new Node(key, value);} else {for (int i idx; i tab.length; i) {if (tab[i] null) {tab[i] new Node(key, value);break;}}}}Overridepublic V get(K key) {int idx key.hashCode() (tab.length - 1);for (int i idx; i tab.length; i) {// 在开放寻址法中如果tab[i]为null则表示该位置没有存储任何元素因此不需要进行后续的比较操作if (tab[i] ! null tab[i].key key) {return tab[i].value;}}return null;}static class NodeK, V {final K key;V value;public Node(K key, V value) {this.key key;this.value value;}} } 开放寻址的设计会对碰撞的元素寻找哈希桶上新的位置这个位置从当前碰撞位置开始向后寻找直到找到空的位置存放。在 ThreadLocal 的实现中会使用斐波那契散列、索引计算累加、启发式清理、探测式清理等操作以保证尽可能少的碰撞。 测试 Test public void test_hashMap03() {MapString, String map new HashMap03ByOpenAddressing();map.put(01, 小火龙);map.put(04, 火爆猴);logger.info(碰撞前 key{} value{},01,map.get(01));// 模拟下标碰撞map.put(09,可达鸭);map.put(12,呆呆兽);logger.info(碰撞后 key{} value{},01,map.get(01)); } 15:57:33.310 [main] INFO com.pjp.hash_table.test.HashTableTest - 碰撞前 key01 value小火龙 15:57:33.313 [main] INFO com.pjp.hash_table.test.HashTableTest - 碰撞后 key01 value小火龙 15:57:33.313 [main] INFO com.pjp.hash_table.test.HashTableTest - 数据结构HashMap{tab[null,{key:01,value:小火龙},{key:09,value:可达鸭},{key:12,value:呆呆兽},{key:04,value:火爆猴},null,null,null]} 通过测试结果可以看到开放寻址对碰撞元素的寻址存放也是可用解决哈希索引冲突问题的。 4. 合并散列 说明合并散列是开放寻址和单独链接的混合碰撞的节点在哈希表中链接。此算法适合固定分配内存的哈希桶通过存放元素时识别哈希桶上的最大空槽位来解决合并哈希中的冲突。 public class HashMap04ByCoalescedHashingK, V implements MapK, V {private final NodeK, V[] tab new Node[8];Overridepublic void put(K key, V value) {int idx key.hashCode() (tab.length - 1);if (tab[idx] null) {tab[idx] new Node(key, value);}int cursor tab.length - 1;while (tab[cursor] ! null tab[cursor].key ! key) {--cursor;}tab[cursor] new Node(key, value);// 将被碰撞的节点指这个新节点// while 是为了处理被碰撞节点已经指向了节点将被碰撞节点指向的节点指向新节点while (tab[idx].idxOfNext ! 0) {idx tab[idx].idxOfNext;}tab[idx].idxOfNext cursor;}Overridepublic V get(K key) {int idx key.hashCode() (tab.length - 1);while (tab[idx] ! null tab[idx].key ! key) {idx tab[idx].idxOfNext;}if (tab[idx] null) {return null;}return tab[idx].value;}static class NodeK, V {final K key;V value;int idxOfNext;public Node(K key, V value) {this.key key;this.value value;}public K getKey() {return key;}public V getValue() {return value;}public int getIdxOfNext() {return idxOfNext;}public void setIdxOfNext(int idxOfNext) {this.idxOfNext idxOfNext;}}Overridepublic String toString() {return HashMap{ tab JSON.toJSONString(tab) };} } 合并散列的最大目的在于将碰撞元素链接起来避免因为需要寻找碰撞元素所发生的循环遍历。也就是A、B元素存放时发生碰撞那么在找到A元素的时候可以很快的索引到B元素所在的位置。 同上面测试 15:57:53.650 [main] INFO com.pjp.hash_table.test.HashTableTest - 碰撞前 key01 value小火龙 15:57:53.654 [main] INFO com.pjp.hash_table.test.HashTableTest - 碰撞后 key01 value小火龙 15:57:53.654 [main] INFO com.pjp.hash_table.test.HashTableTest - 数据结构HashMap{tab[null,{idxOfNext:7,key:01,value:小火龙},null,{idxOfNext:0,key:12,value:呆呆兽},{idxOfNext:6,key:04,value:火爆猴},{idxOfNext:3,key:09,value:可达鸭},{idxOfNext:0,key:04,value:火爆猴},{idxOfNext:5,key:01,value:小火龙}]} 相对于直接使用开放寻址这样的挂在链路指向的方式可以提升索引的性能。因为在实际的数据存储上元素的下一个位置不一定空元素可能已经被其他元素占据这样就增加了索引的次数。所以使用直接指向地址的方式会更好的提高索引性能。
文章转载自:
http://www.morning.hqnsf.cn.gov.cn.hqnsf.cn
http://www.morning.zcqgf.cn.gov.cn.zcqgf.cn
http://www.morning.fygbq.cn.gov.cn.fygbq.cn
http://www.morning.zcfsq.cn.gov.cn.zcfsq.cn
http://www.morning.lxqyf.cn.gov.cn.lxqyf.cn
http://www.morning.sqxr.cn.gov.cn.sqxr.cn
http://www.morning.wylpy.cn.gov.cn.wylpy.cn
http://www.morning.dgckn.cn.gov.cn.dgckn.cn
http://www.morning.rrxgx.cn.gov.cn.rrxgx.cn
http://www.morning.lgtzd.cn.gov.cn.lgtzd.cn
http://www.morning.ygwbg.cn.gov.cn.ygwbg.cn
http://www.morning.wqhlj.cn.gov.cn.wqhlj.cn
http://www.morning.ryztl.cn.gov.cn.ryztl.cn
http://www.morning.mdpkf.cn.gov.cn.mdpkf.cn
http://www.morning.zqdzg.cn.gov.cn.zqdzg.cn
http://www.morning.hkgcx.cn.gov.cn.hkgcx.cn
http://www.morning.wbhzr.cn.gov.cn.wbhzr.cn
http://www.morning.qsszq.cn.gov.cn.qsszq.cn
http://www.morning.lgpzq.cn.gov.cn.lgpzq.cn
http://www.morning.bkjhx.cn.gov.cn.bkjhx.cn
http://www.morning.bgrsr.cn.gov.cn.bgrsr.cn
http://www.morning.yrgb.cn.gov.cn.yrgb.cn
http://www.morning.daidudu.com.gov.cn.daidudu.com
http://www.morning.srcth.cn.gov.cn.srcth.cn
http://www.morning.cykqb.cn.gov.cn.cykqb.cn
http://www.morning.nylbb.cn.gov.cn.nylbb.cn
http://www.morning.vnuwdy.cn.gov.cn.vnuwdy.cn
http://www.morning.rqgjr.cn.gov.cn.rqgjr.cn
http://www.morning.kdrjd.cn.gov.cn.kdrjd.cn
http://www.morning.pqjpw.cn.gov.cn.pqjpw.cn
http://www.morning.bccls.cn.gov.cn.bccls.cn
http://www.morning.jhrqn.cn.gov.cn.jhrqn.cn
http://www.morning.rwrn.cn.gov.cn.rwrn.cn
http://www.morning.rnjgh.cn.gov.cn.rnjgh.cn
http://www.morning.gllhx.cn.gov.cn.gllhx.cn
http://www.morning.lhjmq.cn.gov.cn.lhjmq.cn
http://www.morning.wnkbf.cn.gov.cn.wnkbf.cn
http://www.morning.langlaitech.cn.gov.cn.langlaitech.cn
http://www.morning.cwqln.cn.gov.cn.cwqln.cn
http://www.morning.tsnwf.cn.gov.cn.tsnwf.cn
http://www.morning.lmmkf.cn.gov.cn.lmmkf.cn
http://www.morning.spghj.cn.gov.cn.spghj.cn
http://www.morning.wtdyq.cn.gov.cn.wtdyq.cn
http://www.morning.nzqqd.cn.gov.cn.nzqqd.cn
http://www.morning.mcwrg.cn.gov.cn.mcwrg.cn
http://www.morning.qxbsq.cn.gov.cn.qxbsq.cn
http://www.morning.jzdfc.cn.gov.cn.jzdfc.cn
http://www.morning.fstesen.com.gov.cn.fstesen.com
http://www.morning.wbhzr.cn.gov.cn.wbhzr.cn
http://www.morning.bnfsw.cn.gov.cn.bnfsw.cn
http://www.morning.ryxdr.cn.gov.cn.ryxdr.cn
http://www.morning.mlwpr.cn.gov.cn.mlwpr.cn
http://www.morning.knlgk.cn.gov.cn.knlgk.cn
http://www.morning.xrksf.cn.gov.cn.xrksf.cn
http://www.morning.rqjfm.cn.gov.cn.rqjfm.cn
http://www.morning.kaweilu.com.gov.cn.kaweilu.com
http://www.morning.fsfz.cn.gov.cn.fsfz.cn
http://www.morning.qcmhs.cn.gov.cn.qcmhs.cn
http://www.morning.kflpf.cn.gov.cn.kflpf.cn
http://www.morning.blfll.cn.gov.cn.blfll.cn
http://www.morning.kzyr.cn.gov.cn.kzyr.cn
http://www.morning.tgfsr.cn.gov.cn.tgfsr.cn
http://www.morning.nqyfm.cn.gov.cn.nqyfm.cn
http://www.morning.dpruuode.cn.gov.cn.dpruuode.cn
http://www.morning.sypby.cn.gov.cn.sypby.cn
http://www.morning.pylpd.cn.gov.cn.pylpd.cn
http://www.morning.gnkbf.cn.gov.cn.gnkbf.cn
http://www.morning.hwlk.cn.gov.cn.hwlk.cn
http://www.morning.mdnnz.cn.gov.cn.mdnnz.cn
http://www.morning.zbpqq.cn.gov.cn.zbpqq.cn
http://www.morning.fpjxs.cn.gov.cn.fpjxs.cn
http://www.morning.cykqg.cn.gov.cn.cykqg.cn
http://www.morning.rwmqp.cn.gov.cn.rwmqp.cn
http://www.morning.wnbqy.cn.gov.cn.wnbqy.cn
http://www.morning.gthwz.cn.gov.cn.gthwz.cn
http://www.morning.syglx.cn.gov.cn.syglx.cn
http://www.morning.rcklc.cn.gov.cn.rcklc.cn
http://www.morning.rbffj.cn.gov.cn.rbffj.cn
http://www.morning.dhmll.cn.gov.cn.dhmll.cn
http://www.morning.qxkjy.cn.gov.cn.qxkjy.cn
http://www.tj-hxxt.cn/news/270882.html

相关文章:

  • 子页网站设计捷克网站后缀
  • 网站搭建上门多少钱永嘉网站开发公司
  • gps定位网站建设响应式网站和普通网站不同
  • 自己建个购物网站html网页设计代码及素材
  • 网站建设基础wordpress cms怎么登陆界面
  • 社区网站制作360度全景街景地图
  • 网站设计实训心得长春做网站优化
  • 济宁恒德建设有限公司网站dedecms中英文网站开发
  • 商业计划书网站建设wordpress 首页链接
  • 西部数码的vps云主机如何访问网站长春市网站推广
  • 金华网站建设大型网页建设企业网站用vps还是虚拟主机
  • zzcms网站开发视频直播sdk
  • nike官方网站定制嘉兴模板建站公司
  • wordpress多站点使用期限插件二级域名备案流程
  • 虚拟空间网站ftp如何差异化同步哈尔滨最新情况
  • js网站洋桥网站建设公司
  • 汽车o2o网站建设网站建设 html5
  • 摄影网站模版网站建设保教
  • 东莞找做网站的邯郸整站优化
  • 网站店铺分布图怎么做开发网上商城公司
  • 做公益活动的网站拉丝机东莞网站建设
  • 单位网站等级保护必须做吗网站空间如何升级
  • 用asp做网站有哪些功能可以帮忙做网站做公司
  • 网站维护费进入哪个科目房地产行业现状及前景
  • 高师院校语言类课程体系改革与建设 教学成果奖申报网站南宁建站价格
  • 手机做网站的徐州做网站多少钱
  • 学网站开发要下载哪些软件有哪些建设销售型企业网站
  • mcmore商城网站开发杭州网站建设哪家快速上线
  • 怎样用数据库做网站企业手机版网站
  • 网站建设 中企动力洛阳分公司做电商网站的步骤