码迷,mamicode.com
首页 > 编程语言 > 详细

算法的基本概念

时间:2019-04-22 15:19:51      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:计算   数据   基本   log   概念   执行顺序   2.3   range   就是   

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
'''

算法的基本概念

标签:计算   数据   基本   log   概念   执行顺序   2.3   range   就是   

原文地址:https://www.cnblogs.com/qiuyicheng/p/10749958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!