你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

数据结构与算法学习笔记2

2021/12/21 6:29:12

一,

在我所知道的算法中,图算法应该是最有用的。

解决问题需要三个步骤:

  1. 分析题意;
  2. 使用相应的数据结构,来建立问题模型;
  3. 使用相应的算法来解决问题

二,对数与大O表示法

1)对数:

你可能不记得什么是对数了,但一定记得什么是幂,\log_1_0100表示将多少个10相乘等于100,答案是2个。因此\log_1_0100=2;对数运算是幂运算的逆运算。

使用大O表示法讨论算法的运行时间的时候,log指的都是\log_2,比如log8=3(因为2^3=8),比如log1024=10(因为2^1^0=1024)。

在算法的时间复杂度的计算中,经常会用到log时间,因此我们必须明白对数的概念。

2)大O表示法:

在日常的算法学习过程中,经常会遇到大约5种大O表示法表示的算法运行时间:

  • O(logn),也叫做对数时间,常见的算法比如二分查找;
  • O(n),也叫做线性时间,常见的算法比如简单查找;
  • O(n*logn),这样婶儿的——常见的算法比如快排(快速排序),一种很常用的、速度较快的算法;
  • O(n^2),——常见的算法比如选择排序、冒泡排序,一种速度较慢的算法;
  • O(n!),——常见的算法比如旅行商问题的解决方案,一种速度非常慢的算法;

3)启示:

  • 大O表示法计算的是操作数;
  • 算法的速度指的并不是运行时间,而是操作数的增速;
  • 讨论算法的速度的时候,我们说的是随着输入的不断增加,其算法的运行时间将以什么样的速度增加;
  • 算法的运行时间用大O表示法表示;
  • O(logn)比O(n)快,当待查找的元素的数量越多的时候,前者比后者的速度就越快;

 ——《算法图解》


三,常见的时间复杂度所耗时间的大小排列:

O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)



未完待续...