网站配色原则,hexo ghost wordpress,怎么入驻电商平台,wordpress 禁止收录特定文章小提示#xff1a;小夕会将小屋的最新动态更新到小屋的布告栏哦#xff0c;口令是【nb】#xff08;口令在订阅号主界面直接回复即可使用#xff09;。 小夕学了数据结构后#xff0c;知道了链表、树、哈希表等数据结构与静态数组的固定容量不同#xff0c;它们… 小提示小夕会将小屋的最新动态更新到小屋的布告栏哦口令是【nb】口令在订阅号主界面直接回复即可使用。 小夕学了数据结构后知道了链表、树、哈希表等数据结构与静态数组的固定容量不同它们是可以动态添加元素的。这种数据结构的初始大小可能很小甚至几乎为零但是随着新元素的加入其大小内存空间占用会不断增长这个过程就叫做动态空间增长。那么问题来了所有支持动态空间增长的数据结构都是相同的增长方式吗了解这个又有什么意义呢 前言小夕曾经很傻很天真的认为所有支持动态空间增长的数据结构都是每增加一个元素数据结构的大小就增加1个单位。直到在一个中规模机器学习任务的数据预处理过程中遇到了“内存爆炸”的问题即小夕明明计算的内存够用但是小夕可怜的电脑的内存却意外爆满了。最终小夕在某大神的指导下才知道原来数据结构的容量还能是加倍加倍的扩小夕瞬间感到自己的智商可能只剩23.333了。作为程序喵不能光讲大道理。小夕为了避免讲解太过抽象如果您是C程序喵那么请注意一下Vector数据结构如果是Java程序喵请注意一下ArrayList、LinkedList、哈希系列(HashSet/HashTable/HashMap)如果是不用Java也不用C的程序喵或者是已经脱离XX编程语言层次的程序喵那么请注意一下可变数组可增长顺序表、链表、哈希散列。小夕将基于上面这些程序喵肯定知道的东西来花式讲解哈都不知道报告老师这里有一只假喵中的假喵。由于文章过长也就是说小夕的讲解过于认真\(//∇//)\小夕将文章拆为三部分。万一读到停不下来听说交出小红包小夕就会出现哦(∇)递增式扩容对于Java的LinkedList也就是数据结构中的链表其空间增长方式就是小夕一开始的设想每增加一个元素其大小就增加一个单位这里的一个单位就是指一个元素占用的空间大小。原因就在于链表在内存中的存储可以是不连续的。例如一个依次由节点1、节点2、节点3连接而成的链表在计算机内存中完全有可能是下面的存储方式。这样的话链表每增加一个元素只需要在内存中找个缝将新元素插进去就好啦~所以如果小夕手里有n个元素想插入链表则需要开辟n次内存每次均开辟一个元素的大小。这种数据结构建立后每次数据结构要扩容时均增加固定空间大小的做法被称为【递增式扩容】。显然链表的空间增长方式就是递增式扩容而且递增的单位为1这里是指1个单位即一个结点的大小。可以看到如果是链表数据结构或者是底层基于链表而实现的数据结构采用递增式扩容是最优选择。因为要增加一个元素则最好的情况就是其他什么都不动仅仅是为该元素开辟一个单位的空间然后塞入该元素。而递增式扩容用于链表确实达到了这个最理想情况呢。因此对于链表以及底层基于链表结构实现的数据结构都是采用递增式扩容即可达到最优扩容效率最优动态空间增长。例如哈希中的横向增长再如基于链表实现的树如Java中的TreeSetTreeMap等。因此在操纵大量数据的时候尤其机器学习任务中常见的操纵大量样本的时候在内存的问题上可以安心的使用此类数据结构不会导致“内存爆炸”的问题内存只会慢慢的起火然后轻轻的告诉你满了23333。当然了不能仅考虑内存有时操纵大量数据时对数据处理效率要求更高这时候就要舍内存保速度啦。 那么哪些常见数据结构采用递增式扩容无法达到最优呢还有小夕遇到的内存爆炸是怎么回事呢敬请期待小夕明天的大作啦如果觉得小夕的讲解帮到了或者萌到了您记得用小红包鼓励小夕哦~小夕都要买不起返校车票了嘤嘤嘤...小夕已委托维权骑士对小夕发布文章的版权行为进行追究与维权。如需转载请联系微信xiyaomengmengda。