算法的基本概念

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

对上述结果的解释

  1. func1的执行顺序,窄的表示打印,宽的表示函数
    技术图片
    先打印在调用自身,从上到下执行下来
  2. func2的执行顺序,窄的表示打印,宽的表示函数
    技术图片
    函数还是从上往下执行,每一层都是先递归后打印,先打印的是最里面那层递归

5. 汉诺塔问题

5.1 问题分析

  1. n=2时
    • 小圆盘从A移动到B
    • 大圆盘从A移动到C
    • 小圆盘从B移动到C
  2. 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
'''

以上是关于算法的基本概念的主要内容,如果未能解决你的问题,请参考以下文章

Flask模板宏的概念和基本使用

七大排序基本实现——Java

7种基本排序算法的Java实现

机器学习基本概念解析,机器学习算法概论,机器学习疑难解答,代码分享

机器学习基本概念解析,机器学习算法概论,机器学习疑难解答,代码分享

数据结构与算法图 ( 图的存储形式 | 图的基本概念 | 图的表示方式 | 邻接矩阵 | 邻接表 | 图的创建 | 代码示例 )