IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> python数据结构与算法(一):基本概念 -> 正文阅读

[数据结构与算法]python数据结构与算法(一):基本概念

1. 算法的五大特性

  • 输入: 算法具有0个或多个输入;
  • 输出: 算法至少有1个或多个输出;
  • 有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成;
  • 确定性:算法中的每一步都有确定的含义,不会出现二义性;
  • 可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成;

2. 算法效率的衡量

2.1 时间复杂度与“大O记法”

  • 大O记法

    • 对于单调的整数函数 f ,如果存在一个整数函数 g 和实常数c > 0,使得对于充分大的 n 总有f(n) <= c * g(n),就说函数 g 是 f 的一个渐近函数(忽略常数),记为f(n)=O(g(n));
    • 也就是说,在趋向无穷的极限意义下,函数 f 的增长速度受到函数 g 的约束,亦即函数 f 与函数g的特征相似。
  • 时间复杂度

    • 假设存在函数 g ,使得算法 A 处理规模为 n 的问题示例所用时间为 T(n) = O(g(n)) ,则称 O(g(n)) 为算法 A 的渐近时间复杂度,简称时间复杂度,记为 T(n) ;
  • 理解“大O记法”

    • 对于算法的时间性质和空间性质,最重要的是其数量级和趋势;
    • 计量算法基本操作数量的规模函数中那些常量因子可以忽略不计,因此可以认为 3n^2 和 100n ^2 属于同一个量级,如果两个算法处理同样规模实例的代价分别为这两个函数,就认为它们的效率“差不多”,都为 n ^2 级;

2.2 最坏时间复杂度

  • 几种可能的考虑:
    • 算法完成工作最少需要多少基本操作,即最优时间复杂度
      • 没有参考价值;
    • 算法完成工作最多需要多少基本操作,即最坏时间复杂度
      • 提供了一种保证,表明算法在此种程度的基本操作中一定能完成工作;
    • 算法完成工作平均需要多少基本操作,即平均时间复杂度
      • 是对算法的一个全面评价;
      • 但这种衡量并没有保证,不是每个计算都能在这个基本操作内完成;

2.3 时间复杂度的几条基本计算规则

  • 基本操作,即只有常数项,认为其时间复杂度为 O(1)
  • 顺序结构,时间复杂度按加法进行计算;
  • 循环结构,时间复杂度按乘法进行计算;
  • 分支结构,时间复杂度取最大值
  • 判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略;
  • 在无特殊说明时,所分析的算法的时间复杂度都是指最坏时间复杂度

2.4 常见时间复杂度分析

执行次数函数举例非正式术语
12O(1)常数阶
2n+3O(n)线性阶
3n2+2n+1O(n2)平方阶
5log2n+20O(logn)对数阶
2n+3nlog2n+19O(nlogn)nlogn阶
6n3+2n2+3n+4O(n3)立方阶
2nO(2n)指数阶
  • O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

3. Python内置类型性能分析

3.1 timeit模块

  • timeit模块可以用来测试一小段Python代码的执行速度;
class timeit.Timer(stmt=pass, setup=pass, timer=)
# Timer是测量小段代码执行速度的类;
# stmt参数是要测试的代码语句(statment);
# setup参数是运行代码时需要的设置;
# timer参数是一个定时器函数,与平台有关;
timeit.Timer.timeit(number=1000000) # Timer类中测试语句执行速度的对象方法
# number参数是测试代码时的测试次数,默认为1000000次;
# 方法返回执行代码的平均耗时,一个float类型的秒数;

3.2 list内置操作的时间复杂度

在这里插入图片描述

3.3 dict内置操作的时间复杂度

在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 23:13:18  更:2022-07-04 23:14:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:27:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码