美文网首页算法数据结构
数据结构第四篇 iOS 数组中的算法分析

数据结构第四篇 iOS 数组中的算法分析

作者: 人魔七七 | 来源:发表于2018-05-15 09:25 被阅读40次

根据前几篇和数据结构有关的博客中一些特殊的结构比如栈和队列是用数组来实现的,其中一些操作可能关联到一些复杂度问题,所以根据前几篇的一些例子做一下分析说明。

数组的创建

由于数组创建会有一定的内存保存其内容。当你添加元素到数组的时候,数组后面预留的一部分空间帮你添加元素到数组尾部,当这个数组开始没有足够的空间的时候就会自动分配一个更大的内存空间,然后copy他的元素们到一个新的数组里,这个做法类似之前栈的扩容思路。当然如果数组有足够空间添加元素就是一个O(1)的操作。如果要创建更大的内存,copy元素到新的内存,这个就是O(n)的操作。所以如果你能提前知道或者预估你大概有多少元素在数组里存储,用数组的带有Capacity的初始化方法来初始化,从而避免频繁的创建内存 copy元素造成的性能问题。

数组的添加操作

大部分情况是O(1)复杂度,但是偶尔也有O(n)复杂度。

如果数组还有空间添加元素并且添加到尾部就是大部分的情况,如果数组需要创建更多的空间就是偶尔的情况。如果添加到数组某个随机的位置也是偶尔的情况比如头部或者中间什么位置。

删除数组的元素

删除数组的尾部元素是O(1)复杂度,如果不是尾部例如头部元素或者其他的index的元素就是O(n)

一些数组匹配的操作

containsObject indexOfObject 复杂度O(n),因为里面会有一个遍历的操作。

indexOfObject:inSortedRange:options:usingComparator: 对于这个方法就是使用的二分查找所以复杂度是O(log n)

数组的拷贝操作

里面有一个创建内存并循环的操作 所以是O(n)

具体可以参照微软的一个开源SDK

https://github.com/Microsoft/WinObjC/blob/812d6636036a8d2eaeaaf7b92aa0c7b76252e190/Frameworks/CoreFoundation/Collections.subproj/CFArray.c

相关文章

  • Hash算法

    数据结构与算法分析:大纲数据结构:数组算法:hash算法算法:排序算法Java实现 1 Hash算法? 将任意长度...

  • 数据结构第四篇 iOS 数组中的算法分析

    根据前几篇和数据结构有关的博客中一些特殊的结构比如栈和队列是用数组来实现的,其中一些操作可能关联到一些复杂度问题,...

  • 数据结构:数组

    00数据结构与算法分析:大纲01数据结构:数组02数据结构:链表03数据结构:栈03数据结构:队列 数组 数组是一...

  • Java代写 CSCI-A 343 : Homework 02

    IntroductionJava的数据结构算法,需要完成算法分析,算法实现,2D数组的实现,最后上传到github...

  • 数据结构与算法分析:大纲]

    00数据结构与算法分析:大纲01数据结构:数组02数据结构:链表03数据结构:栈03数据结构:队列 本系列课程主要...

  • Swift 实现 7 种常见的排序算法

    排序算法可以说是数据结构与算法当中最为基础的部分,针对的是数组这一数据结构。将数组中的无序数据元素通过算法整理为有...

  • 重温:数据结构与算法 - 03数组

    数据结构与算法之美 - 数组 数据结构与算法之美-学习大纲 什么数组? 数组是一种 线性表 数据结构。它用一组 连...

  • (2)数组相关算法题目

    数组是最简单的数据结构,占据连续内存并且按顺序存储。 以下是与数组有关的算法题目。 (1)查询数组中重复数字 算法...

  • 数据结构与算法

    参考链接:算法 数据结构与算法 iOS数据结构 和 算法 上 算法 1、数据结构: 集合结构: 线性结构: 树形结...

  • 个人阅读书单

    计算机基础 计算机原理 数据结构 算法分析 iOS核心动画高级技巧 iOS书籍 Auto Layout开发秘籍

网友评论

    本文标题:数据结构第四篇 iOS 数组中的算法分析

    本文链接:https://www.haomeiwen.com/subject/pjqedftx.html