美文网首页
1.数据结构、大O表示法

1.数据结构、大O表示法

作者: LucXion | 来源:发表于2021-11-29 13:40 被阅读0次

算法的评估:正确性、可读性、健壮性(对不合理输入的处理能力)

时间复杂度:估算程序指令执行的次数

空间复杂度:估算所需要占用的存储空间

2^3 = 8
2^4 = 16
3 = log2(8)
4 = log2(16)
while((n = n / 5) > 0) // 时间复杂度 log5(n)
if(i == 1,i < n, i * 2) // 时间复杂度 log2(n)

平方阶、立方阶、指数阶 的时间复杂度都不可取

均摊复杂度:比如动态数组的add操作,复杂度是O(1),到扩容节点复杂度为O(n),均摊下来为O(2),add函数的均摊复杂度为O(1)

复杂度震荡:不合理的设计可能造成复杂度震荡,比如add和remove设置的节点乘积为1,那么对某个函数的增删操作会造成扩容或缩容的操作,复杂度都为O(n),解决方法为设置add、remove函数的不同扩容、缩容节点

数据结构

  • 线性结构

    • 线性表(数组、链表、栈、队列、哈希表)
    • 有N个相同类型元素的有限序列
    • 索引、首节点(首元素)、尾结点(尾元素)

    数组是一种顺序存储的线性表,所有元素的内存地址是连续的

    动态数组(可变数组)存储对象时,数组内存储的是对象的地址,可以避免空间的浪费。

  • 树形结构

    • 二叉树、AVL树、红黑树、B树、堆、Trie、哈夫曼树
  • 图形结构

    • 邻接矩阵、邻接表

数组,在内存中固定长度,元素在内存中是连续的。

动态数组,可以自动扩容、缩容的数组,数组元素添加增删操作

链表,链式存储的线性表,所有元素的内存地址不一定是连续的,可以解决动态数组内存空间浪费的问题,需要多少内存就申请多少内存。

数据结构的选择

动态数组:开辟、销毁内存空间次数较少,但可能造成内存浪费

双向链表:开辟、销毁内存空间的次数较多,但不会造成内存浪费

如果频繁在尾部进行添加、删除操作,选择动态数组、双向链表

如果频繁在头部进行添加、删除操作,用双向链表

如果频繁的在任意位置进行添加、删除操作,用双向链表

如果频繁的进行查询操作,用动态数组

循环链表

两种不同的情况:链表中只有一个元素,和链表中有多个元素

特点:链表中的最后一个元素与第一个元素相连,形成闭环

验证快慢指针的方式来验证链表是否有环,慢指针指到nil,那么确定无环

约瑟夫问题:在一个环中,每前进固定位数后移除当前元素。

循环链表类要考虑设置一个成员变量,三个方法

current,用于记录指向某个节点

void reset:current指向first

void next:current往后一步

void remove:删除current指向节点,删除成功后current 后移

静态链表

通过两个数组来实现链表功能,一个数组保存元素,另一个数组保存对应下一个元素在元素数组内的下标。

动态数组优化

可通过添加一个成员变量first来记录第一个元素的位置,比如移除下标为0的元素,那么first = 1,数组的第一个元素就从下标1开始。在下标为0的元素前插入数据,数组尾部如果还有空位,将新元素写到尾部元素,first = 最后一个下标,形成循环。

相关文章

  • 1.数据结构、大O表示法

    算法的评估:正确性、可读性、健壮性(对不合理输入的处理能力) 时间复杂度:估算程序指令执行的次数 空间复杂度:估算...

  • 大O表示法

    讨论算法必提到O(),不太懂,尝试理解一下。 大O表示法 描述算法的性能和复杂度。常用O表示。一般考虑为cpu时间...

  • 大O表示法

    算法的速度指的并非时间,而是操作数的增速。 谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度...

  • 大O表示法

    大O表示法 是一种特殊的表示法,指出了算法的速度有多快。大O表示法指出了算法有多快。例如,假设列表包含n 个元素。...

  • 大O表示法

    时间复杂度 衡量一个算法可以从占用的空间和时间来评价其是否是一个更好的算法。这里主要从时间方面衡量。时间复杂度,可...

  • 大 O 表示法

    大 O 表示法是一种特殊的表示法,指出了算法的速度有多快。 在我们的日常工作中,基本都是使用其他人编写好的算法,基...

  • 大O表示法

    概念 一般用大O表示法来描述复杂度,它表示的是数据规模n 对应的复杂度。 举个例子: 解析: O(1)O(1)表示...

  • 大O表示法

    一、简介 表示时间的大O符号,是用来描述算法效率的语言和度量单位。大O表示法分析了算法的运行时间如何随列表的增长而...

  • 算法复杂度

    一、大O表示法 算法的时间复杂度通常用大O符号表述 大O表示法 : ,n为算法所需要执行的操作数 该表示法的操作数...

  • 学习《算法图解》

    1.大O表示法是一种特殊的表示法,指出了算法的速度有多快。O(n) 小结: 二分查找的速度比简单查找快得多。 O ...

网友评论

      本文标题:1.数据结构、大O表示法

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