0、Python 算法分析

来源:互联网 发布:淘宝商城女装秋装睡衣 编辑:程序博客网 时间:2024/06/08 17:42

一、算法分析简介

1. 什么是算法分析?

  • 算法是对问题解决的分步描述,算法分析主要就是从计算资源消耗的角度来评判和比较算法,而计算资源的消耗又可以通过时间复杂度和空间复杂度来描述
  • 大 O(rder) 表示法
    • 如果把每一小步看作一个基本计量单位,那么一个算法的执行时间就可以表达为它解决一个问题所需的步骤数,而步骤数又可以转化为对赋值语句的次数的统计
    • T 的函数来表示赋值语句数量,当规模 n 增加时,T(n) 函数中增长最快的部分f(n) 即为此算法的 “大O” 级别,记作 O(f(n))
  • 常见的大 O 数量级函数
    这里写图片描述

2. 算法评级举例:变位词判断问题

  • 变位词定义:如果一个字符串是另一个字符串的重新排列组合,那么这两个字符串互为变位词
  • 变位词判断代码实践(假设仅包含英文大小写字母)
# solution 1:排序比较,排序方法的复杂度往往都是O(n²)或者O(nlogn)# 所以排序贡献了这个函数主要的循环操作。最终,这个算法和排序的复杂度相同def anagram(s1, s2):    if len(s1) == len(s2):        alist1 = list(s1)        alist2 = list(s2)        alist1.sort()  # 会按照 ASCII 码的大小进行排序          alist2.sort()        return alist1 == alist2    else:        return Falseprint(anagram('heartPY', 'earthPY'))True# solution 2: 统计52个字母出现的频次,时间复杂度为:O(n), 但稍微增加了点空间复杂度def anagram(s1, s2):    if len(s1) == len(s2):        c1 = [0] * 52        c2 = [0] * 52        for i in range(len(s1)):            pos = ord(s1[i]) - ord('A')            c1[pos] += 1        for i in range(len(s2)):            pos = ord(s2[i]) - ord('A')            c2[pos] += 1        return c1 == c2    else:        return Falseprint(anagram('AbcddDB', 'dcbADB'))True

二、List 和 Dict 的各种操作性能评估(大 O 数量级)

1. List 和 Dict 的增删改查

这里写图片描述

2. List 和 Dict 各种操作的大 O 数量级

这里写图片描述

3. 使用 timeit 测试代码运行时间


三、参考资料

1、北大数据结构与算法

原创粉丝点击