小夕说,不了解动态空间增长的程序喵都是假喵(下)

小夕在本系列前两篇文章中为大家介绍了各类数据结构的扩容策略,且在上篇文末,小夕提到了加倍式扩容中,倍率采用2并不是最优的,为什么呢?有没有最优倍率呢?


 

内存复用

如果倍率采用2甚至更大的数,那么被开辟过的旧空间永远都不会被新开辟的空间利用。小夕举个栗子。

 

if(倍率≥2){

那么以下是小夕为大家画的三次扩容后的内存块的占用情况(小夕用PPT画的,好麻烦的喵,读者喵有好用的轻量级画矢量图的软件记得推荐给小夕哦~)

 

 

上图中,内存块一共有15个字节。粉色实心框是数据结构占用的内存块,空心框是空闲的内存。

 

假如一开始数据结构的大小是1字节,占用了0xFF00这个字节,如图中第一列。然后第一次扩容后数据结构大小变成2字节,无法利用之前的旧内存空间。

同样,第二次扩容,第三次扩容后,数据结构的大小总是要比之前累计占用的旧内存空间之和还要大,总是大1个字节,所以永远都无法重新利用之前的旧内存空间。

 

那么无法复用旧内存空间,对应有程序与操作系统各有什么影响呢?小夕还没有探索出严谨的结论,读者有思路可以跟小夕一起讨论哦~

 

如果倍率改为比2大的数,结果是一样的。有兴趣的喵喵可以自行画画图~当然,数学好的喵喵不用画图也能证明出来的~(利用几何级数的性质)

}

 

if(倍率<2&&倍率>1){

比如倍率采用1.5。小夕再画一下图~

 

可以看到,第三次扩容后的新数据结构大小约为338B!而旧空间的大小是250+225=475>338,也就是说新的哈希表可以挪到旧的内存空间了!内存得到了复用!

 

好咯,说到这里,读者应该懂了,对于加倍式扩容,倍率必须小于2才能复用内存。那么为什么默认值取1.5,而不是1.6,1.7呢?小夕查了很多资料,发现这是一个启发式策略(启发式策略就是拍脑袋想出来的看似合理而没有严谨理论依据的方法)。

 

一个疑问

 

那么既然看似倍率用1.5要优于2,为什么Java中的哈希表系列以及C++中的Vector却采用2呢?

 

这就是理论与工程的不同之处。在工程中不仅要考虑内存复用这一个问题,还要考虑到浮点数运算问题和大量数据场景下的扩容速度的问题

 

具体来说,若采用1.5倍,那么假设数据结构初始大小为10,则以后的数据结构大小会依次计算为:

15,

22.5,

33.75,

50.625,

75.9375

...

 

可以看到浮点运算的代价会越来越高。

 

扩容速度也很好理解。大量数据时,2倍扩容速度会比1.5倍扩容速度少很多次扩容次数,因此效率会比1.5倍高很多。那么当程序不怎么看重内存复用,却有大量数据待填入数据结构时,2倍是更合理的。

 

So

虽然很多数据结构都是基于静态数组实现的动态空间增长,但是有的是上述提到的2倍的扩容倍率,有的像Java中的ArrayList则为1.5倍的扩容倍率。

 

看来如何决定倍率,要在设计数据结构的时候好好考虑这个数据结构将来的业务场景呢。

PS:

没有发现小夕在上面的一个if语句中漏了一半括号的C/C++/Java等程序员请自觉面壁思过。

 

最后,不知道您对小夕的文章是否满意呢(⁎⁍̴̛ᴗ⁍̴̛⁎)

小夕已委托维权骑士对小夕发布文章的版权行为进行追究与维权。欢迎大家转发分享~如需转载,请联系微信xiyaomengmengda。‍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/481317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT 与AI大模型发展简要综述

来源&#xff1a;数据观综合编辑&#xff1a;蒲蒲"日前&#xff0c;美国硅谷的初创公司OpenAI推出了一款新的人工智能对话模型ChatGPT&#xff0c;模型中首次采用RLHF&#xff08;从人类反馈中强化学习&#xff09;方式。目前&#xff0c;模型处于测试阶段&#xff0c;用户…

Nature Reviews Physics:人工智能怎样促进科学理解

导语一个能正确预测每个粒子物理实验结果、每个可能的化学反应产物或每个蛋白质的功能的先知将彻底改变科学和技术。然而&#xff0c;科学家们不会完全满意&#xff0c;因为他们想了解先知是如何做出这些预测的。这就是科学理解&#xff08;scientific understanding&#xff0…

史上最萌最认真的机器学习/深度学习/模式识别入门指导手册(一)

喵喵喵~大家元宵节快乐噢。有没有要陪小夕出去看烟花的吖...小夕借此给热爱学习的喵喵们献上这篇拙文&#xff0c;希望不要嫌弃哦~还有&#xff0c;小夕画的封面图是不是很棒呀(&#xffe3;∇&#xffe3;)小夕发现现在想进军人工智能领域的程序yuan甚至少年少女喵好多呀&…

OpenAI ChatGPT走红,DeepMind不甘示弱,推出剧本写作AI,一句话生成一个剧本

来源&#xff1a;机器学习研究组订阅Dramatron似乎在一定程度上克服了AI大模型写长剧本前后不连贯的问题。你是否有过这种体验&#xff1a;某一天逛街的时候&#xff0c;脑子里突然冒出来一个好玩的故事&#xff0c;但你一时想不到更多的细节&#xff0c;也没有一块完整的时间去…

[完结]以C++与Java为例,详解数据结构的动态增长策略

前言 本文改编自小夕的订阅号文章《【萌味】小夕说,不了解动态空间增长的程序喵都是假喵&#xff08;上&#xff09;》、《【萌味】小夕说,不了解动态空间增长的程序喵都是假喵&#xff08;中&#xff09;》、《【萌味】小夕说,不了解动态空间增长的程序喵都是假喵&#xff08;…

量子计算机创造了虫洞吗?不完全是,但揭示了量子模拟的未来

来源&#xff1a;光子盒研究院最近&#xff0c;科学家们因据称产生了一个虫洞而成为头条新闻。发表在《自然》杂志上的这项研究使用量子计算机在简化的物理模型中模拟虫洞。消息传出后不久&#xff0c;物理学家和量子计算专家对虫洞是否真的存在表示怀疑。这是怎么回事&#xf…

【青柠】一封信

呜...本来&#xff0c;小夕想偷偷写到日记本里&#xff0c;但还是不自已的&#xff0c;要被你笑话了呢。小夕没想到可以得此厚爱&#xff0c;从创办订阅号至今&#xff0c;小夕从来没想过会这么认真的爱上做这件事情。原来&#xff0c;小夕不是在写文章呀&#xff0c;是突然多了…

复旦大学邱锡鹏教授:语言模型即服务,走向大模型的未来

来源&#xff1a;智源社区作者&#xff1a;智源社区整理&#xff1a;周致毅人类一直期待AI能在处理自然语言方面大放异彩&#xff0c;语言大模型在近些年已逐渐成为NLP领域的标配。随着模型的扩张&#xff0c;当前大模型的调用已变成上游厂商开放API供下游使用的模式。这一模式…

史上最萌最认真的机器学习/深度学习/模式识别入门指导手册(二)

谢谢你们。小夕昨晚又熬夜被发现了&#xff0c;谢谢对小夕的关心...有你们陪着&#xff0c;小夕很幸运。路人乙&#xff1a;“小夕&#xff0c;别人都说上完coursera上的那门机器学习课就已经入门机器学习了&#xff0c;可你又不这样认为。那你认为上完那门课&#xff0c;或者说…

计算机史上首篇教你从算法问题提炼算法思想的文章

路人丙&#xff1a;“小夕&#xff0c;你说学算法有什么用呢&#xff1f;”小夕&#xff1a;“好玩呀。”路人丙&#xff1a;“算法问题那么多&#xff0c;现查现用不就好了&#xff1f;”小夕&#xff1a;“好咯&#xff0c;既然你诚心诚意的问了~小夕就大发慈悲的震惊你(&…

美国能源部正式宣布核聚变里程碑式突破,专家点评商业化还需数10年

来源&#xff1a;澎拜责任编辑&#xff1a;郑洁图片编辑&#xff1a;张同泽校对&#xff1a;施鋆耗资35亿美元的美国国家点火装置用了10多年时间不断冲击点火目标&#xff0c;过程一波三折。成功点火后有两条路可走。一是冲刺更高的能量增益&#xff0c;未来或将再建更大能量的…

Science:找到杀死癌细胞的“单词”

来源&#xff1a;生物通利用新的机器学习技术&#xff0c;加州大学旧金山分校(UCSF)的研究人员与IBM研究院的一个团队合作&#xff0c;开发了一个包含数千个细胞“命令句”的虚拟分子库&#xff0c;基于引导工程免疫细胞寻找并不知疲倦地杀死癌细胞的“单词”组合。预测模型允许…

拼写校正与动态规划的小故事

喵喵喵&#xff0c;细心的你有没有发现小夕已经将卧室和书房精装修了呢~可以输入口令【ho】&#xff0c;或者点击主页的“旧的故事”标签进入哦。一个小现象小夕今天给大家讲一个自然语言处理/信息检索领域的小现象~细心的同学可能发现啦&#xff0c;每当你在使用某度进行搜索时…

《物理世界》公布2022年度十大突破

来源&#xff1a;科技日报近日&#xff0c;英国《物理世界》杂志公布了2022年度十大突破&#xff0c;涵盖从量子、医学物理学、天文学到凝聚态物质等各个方面。这十项突破是由《物理世界》编辑小组从今年在该杂志网站上发布的涵盖物理学所有领域的数百项研究中精选出来的。开创…

飞行器真的是计算机!

小夕在一边默默的玩弄心爱的小四轴&#xff08;飞行器&#xff09;。路人丁&#xff1a;“小夕&#xff0c;你不是学计算机的吗&#xff1f;怎么玩起飞机来了&#xff1f;”小夕&#xff1a;“对呀&#xff0c;小四轴也是计算机呀”。路人丁&#xff1a;诶&#xff1f;会不会有…

谷歌员工担心自家 AI 敌不过 ChatGPT,高管回应:其过快发展可能损害公司

来源&#xff1a;AI前线整理&#xff1a;冬梅、核子可乐谷歌的 Jeff Dean 表示&#xff0c;一旦提供错误信息、大企业所面临的“声誉风险”要比小公司更严重&#xff0c;所以谷歌自然“比小型初创公司更加保守”。自 11 月底以来&#xff0c;AI 聊天机器人 ChatGPT 正式向公众发…

深入浅出不可思议的中文分词技术

亲爱的喵喵们&#xff0c;明天小夕就正式开学啦。开学后每周有几天的课比较多&#xff0c;小夕为了保证每篇文章的质量&#xff0c;可能做不到每天一更啦。但是小夕也会尽量挤出时间来写文章&#xff0c;尽量保证两三天更一篇。希望不要责怪小夕哦...分词&#xff0c;也叫切词&…

史上最萌最认真的机器学习/深度学习/模式识别入门指导手册(三)

能够坚持走到阶段三的喵一定是很有毅力的喵&#xff01;也是很合格的机器学习/人工智能研究者啦~但是走到这里&#xff0c;也意味着您不满足于使用看似孤立的机器学习模型来生硬的完成一些任务&#xff0c;那么&#xff0c;大一统的理论体系就在这一阶段建立吧~前言完成这一阶段…

专访中国工程院院士杜祥琬,可控核聚变美国成了吗?

凤凰网科技 出品作者&#xff5c;蒋浇微信编辑&#xff5c;李金洋12月13日&#xff0c;美国能源部宣布&#xff0c;在加利福尼亚州的劳伦斯利弗莫尔国家实验室&#xff08;LLNL&#xff09;&#xff0c;研究人员首次在核聚变反应中产生“净能量增益”&#xff0c;即聚变反应产生…

一个问题就可以辨别真假NLP(自然语言处理)研究者

╮(╯▽╰)╭哎&#xff0c;自从人工智能火了以后&#xff0c;最近自称NLP研究者的人越来越多了&#xff0c;然而这其中的大忽悠有多少小夕就不想多说了。如果连自己在哪个领域、哪个学科搞研究都不懂的话&#xff0c;你相信他真的是这个领域的研究者喵&#xff1f;反正小夕不信…