100天iOS数据结构与算法实战 Day09 - iOS中数组的算法分析

人魔七七 2019-04-15 10:26:22 604

前言

由于我们之前的栈以及后面的队列都是用数组实现的。所以我们了解下数组对于了解数据结构很有帮助。

C语言的世界里由于数组内存是连续的所以,所以删除和添加元素的时候会memmove内存的元素,如下所示。

添加

640 (1).gif

删除

640 (2).gif

总结:如果元素很多,移动效率会很低。

iOS中数组是怎么优化的呢?

iOS数组中为了优化上述问题采用了,circular buffer的数据结构来解决。

在头部删除

640 (3).gif

在头部添加

640 (4).gif

总结:在两端插入和删除都很快

在中间删除

640 (5).gif

总结:在中间插入或者删除尝试移动最小的内存量,因此它将最多移动一半的元素。

访问数组中的元素第一种情况

image.png

offset是2,size是5。我们获取数组index 0 的元素,所以要获取元素的offset等于2+0。由于size 5 ,大于获取元素的offset 2 。所以这时候数组index 0 的元素就是list[2],也就是如图offset所指的元素。

访问数组中的元素第二种情况

image.png

获取数组index 0 的元素,这时候获取的元素的offset等于4+0,则就是如图所示offset指向的元素。如果获取数组index 2 的元素,这时候获取的元素的offset等于4+2=6,但是6>size(5),所以需要减去size也就是(4+2)- 5=1,也就是如图offset1指向的元素。

总结所以获取数组元素的效率也是很高的。

数组的容量问题


  • 我们尽量在刚开始能预估容量大小,以防止频繁的扩容造成的效率问题。



  • 一旦有大量元素存在,然后你又删除的所剩无几,数组空间不会自动减小,需要你自己清除空间,这个技巧我们在栈中使用过。


结合数组API来分析

addObject

如果当前容量很充足,我们添加元素到数组是O(1)的操作。如果此时正好容量用完,需要扩充容量,这时候需要创建新的容器并copy过去,这时候是O(n)。

insertObject

如果在头尾两处插入,在容量充足情况下效率最高O(1)的操作。但是如果在中间插入则需要移动最多一半的元素,这时候是O(n)的操作。

removeLastObject

在尾部或者头部删除是O(1)操作。

removeObjectAtIndex

但是如果在中间删除则需要移动最多一半的元素,这时候是O(n)的操作。

initWithCapacity

上面已经介绍如果能提前预估容量可以有效避免扩容造成的性能问题。

这个扩容的过程是创建一个新的容器分配更大的空间,然后把旧的容器的元素们copy进来。这个扩容发生是恒定的时间,随着容量的变大,发生的次数会越来越少。

推荐阅读

AG亚游集团100天iOS数据结构与算法实战 Day02 - 栈 


AG亚游集团100天iOS数据结构与算法实战汇总


GitHubDemo地址

GitHubDemo ---> /github0686com/renmoqiqi/100-Days-Of-iOS-DataStructure-Algorithm

References

[1] GithubDemo: /github0686com/renmoqiqi/100-Days-Of-iOS-DataStructure-Algorithm

转载自公众号:人魔七七

教育部推教育信息化2.0行动:人工智能融入教学 日元逆转涨势 日本维持利率及10年期收益率目标不变 投行大幅削减研究预算 被忽略的欧洲中小盘有机会 街舞综艺开年战:《这!就是街舞》能成综艺爆款吗? 曼联铁卫请求球迷宽恕:以后不再发生这样的事 人类观测到距地140亿光年恒星:光出发之际地球未诞生 苹果真的没落了!调查显示:华为比苹果更“正宗” 检方:张小雷集资诈骗案各被害人有表述意见等权利 哈萨克斯坦大巴起火致52人遇难 或由短路引发 发条式收音机发明者去世 曾造福数百万贫困人口 确认自我存在感 极限运动成哗众取宠代名词? 涨停板早知道:七大利好明日有望发酵
土总统指责以色列种族隔离政策 以总理:没资格说 天神!伊布24分钟进3球率队大逆转 彻底征服美国 手机辐射有多少?诺基亚用户可用设备SAR值查询网站 晶盛机电:一季度净利预计翻番 受益行业快速增长 中国为何选在南海大阅兵 美航母刚在南海实战演练 想让詹姆斯0-3 绿军距离勇士和马刺还略差一档 可口可乐因美国对铝进口施加关税提高价格 墨西哥当选总统致信特朗普寻求合作:将开启新阶段 大叔穿小粉裙闯入冬奥冰场 刚扭几下就摔倒(图) 进球gif-丰特头球解围陈志钊爆射 富力暂1-0一方 美官员称俄军开始干扰美在叙无人机 影响美军行动 施乐废除与富士胶片协议 今后或对簿公堂
任正非签发内部文:警惕“华为中年危机”! 骑马小课堂:在学马术的时候你到底学会了什么? 重磅:北京发布深改行动计划 推出117项改革举措 美财长:特朗普经济刺激政策会提高薪资不会推高通胀 外媒:金正恩关键时刻采取主动 外交技巧让人惊讶 国家统计局:工业服务业发展质量继续提升 增势强劲 上海钻石联赛今晚飞人对决 这次小谢想赢苏炳添 猫三事后烟|完美的骑士不仅有老詹一个指挥官 新媒称大陆薪酬已是台湾1.72倍:更多台湾人欲西进 适合白手起家的项目 过年摆地摊赚10万 白手起家怎样创业项目 致富小机器 AG亚游集团