算法学习笔记之大O表示法、数组与链表

大O表示法

程序的算法有好有坏,而运行时间和空间占有率是关键。

一般使用大O表示法讨论运行时间,它指出了最糟糕情况下的运行时间。

  • 算法的速度指的并非是时间,而是操作数的增速;
  • 讨论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加;
  • 算法的运行时间用大O表示法表示;
  • O(log n)比O(n)快,当需要搜索的元素越多时,前者比后者快的越多

数组与链表

使用数组意味着数据在内存中都是相连的(紧靠在一起),就像朋友聚餐,找到地方后又来了一个朋友,但原来的地方没有空位置,只得再找一个可以坐下所有人的地方,但是如果又来了一个朋友,而之前的地方也没有空位置,那么又得再次转移,太麻烦!而且内存转移很是耗时。一种解决之道是“预留位置”,提前找个有10个位置的地方,即向计算机申请10个内存大小空间,但是存在以下缺点:

  • 额外请求的位置可能用不上,这将浪费内存,你没有使用,别人也用不了
  • 人数超过10个后,你还得转移

这种问题,可使用链表解决

链表

链表的每个元素都存储了下一个元素的地址,从而时一系列随机的内存地址串联在一起。聚餐时一起坐不下,那么就分开坐。

链表中添加元素也很容易,只需将其放入内存,并将其地址存储到前一个元素中。

但是链表也有其缺点:不能直接读取链表中的元素,因为你不知道它所在的地址,必须访问元素#1,从中获取元素#2的地址,在访问元素#2并从中获取元素#3的地址,依次类推。如果同时读取所有的元素时,链表的效率很高。链表是顺序访问的。

优势在于插入、删除

数组

数组与链表不同,我们是知道每个元素的地址的,因为它们的地址是相连的,那么只需要执行简单的数学运算就可以了。例如数组中第一个元素的地址为00,那么第5个元素的地址就是04。数组是随机访问的。

优势在于查找、随机访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值