一,
在我所知道的算法中,图算法应该是最有用的。
解决问题需要三个步骤:
- 分析题意;
- 使用相应的数据结构,来建立问题模型;
- 使用相应的算法来解决问题
二,对数与大O表示法
1)对数:
你可能不记得什么是对数了,但一定记得什么是幂,表示将多少个10相乘等于100,答案是2个。因此
=2;对数运算是幂运算的逆运算。
使用大O表示法讨论算法的运行时间的时候,log指的都是,比如log8=3(因为
=8),比如log1024=10(因为
=1024)。
在算法的时间复杂度的计算中,经常会用到log时间,因此我们必须明白对数的概念。
2)大O表示法:
在日常的算法学习过程中,经常会遇到大约5种大O表示法表示的算法运行时间:
- O(
),也叫做对数时间,常见的算法比如二分查找;
- O(n),也叫做线性时间,常见的算法比如简单查找;
- O(n*
),这样婶儿的——常见的算法比如快排(快速排序),一种很常用的、速度较快的算法;
- O(
),——常见的算法比如选择排序、冒泡排序,一种速度较慢的算法;
- O(n!),——常见的算法比如旅行商问题的解决方案,一种速度非常慢的算法;
3)启示:
- 大O表示法计算的是操作数;
- 算法的速度指的并不是运行时间,而是操作数的增速;
- 讨论算法的速度的时候,我们说的是随着输入的不断增加,其算法的运行时间将以什么样的速度增加;
- 算法的运行时间用大O表示法表示;
- O(
)比O(n)快,当待查找的元素的数量越多的时候,前者比后者的速度就越快;
——《算法图解》
三,常见的时间复杂度所耗时间的大小排列:
O(1)<O(logn)<O(n)<O(nlogn)<O()<O(
)<O(
)<O(n!)<O(
)
未完待续...