算法的基本概念
Posted qiuyicheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法的基本概念相关的知识,希望对你有一定的参考价值。
1. 算法概念
algorithm:一个计算过程,解决问题的方法
程序设计=数据结构+算法
输入→算法→输出
数据结构就是关系
2. 时间复杂度
用来估计算法运行时间的一个式子,一般来说时间复杂度高的算法比复杂度低的算法慢
2.1 一些例子:
print('hello') # O1
for i in range(n): # O(n)
print('hello')
for i in range(n): # O(n2)
for j in range(n):
print('hello')
while n > 1: # O(logn)
print(n)
n = n//2
2.2 时间复杂度排序
2.3 快速判断算法复杂度
- 确定问题规模n
- 是否循环减半→logn
- k层关于n的循环→n^k
3. 空间复杂度
用来评估算法内存占用大小的式子
- 算法使用了几个变量:O(1)
- 算法使用了长度为n的一维列表:O(n)
- 算法使用了m行n列的二维列表:O(mn)
可以用空间换时间
4. 递归
递归的两个特点
- 调用自身
- 结束条件
def func1(x):
if x > 0:
print(x)
func1(x - 1)
# 3 2 1
def func2(x):
if x > 0:
func2(x - 1)
print(x)
# 1 2 3
对上述结果的解释
- func1的执行顺序,窄的表示打印,宽的表示函数
先打印在调用自身,从上到下执行下来 - func2的执行顺序,窄的表示打印,宽的表示函数
函数还是从上往下执行,每一层都是先递归后打印,先打印的是最里面那层递归
5. 汉诺塔问题
5.1 问题分析
- n=2时
- 小圆盘从A移动到B
- 大圆盘从A移动到C
- 小圆盘从B移动到C
- n时候,上面n-1个盘子看成一个整体
- 把n-1个盘子从A经过C移动到B
- 把n个盘子从A移动到C
- 把n-1个盘子从B经过A移动到C
def hanoi(n, a, b, c):
'''
一共n层,盘子从a经过b移动到c
'''
if n > 0:
hanoi(n - 1, a, c, b)
print('moving from %s to %s' % (a, c))
hanoi(n - 1, b, a, c)
hanoi(3,'A','B','C')
'''
moving from A to C
moving from A to B
moving from C to B
moving from A to C
moving from B to A
moving from B to C
moving from A to C
'''
以上是关于算法的基本概念的主要内容,如果未能解决你的问题,请参考以下文章
机器学习基本概念解析,机器学习算法概论,机器学习疑难解答,代码分享
机器学习基本概念解析,机器学习算法概论,机器学习疑难解答,代码分享
数据结构与算法图 ( 图的存储形式 | 图的基本概念 | 图的表示方式 | 邻接矩阵 | 邻接表 | 图的创建 | 代码示例 )