什么是算法分析

对比程序,还是算法?

❖如何对比两个程序?

  看起来不同,但解决同一个问题的程序,哪个“ 更好”?

❖程序和算法的区别

  算法是对问题解决的分步描述 程序则是采用某种编程语言实现的算法,同一个 算法通过不同的程序员采用不同的编程语言,能 产生很多程序

大O表示法

算法时间度量指标

❖ 一个算法所实施的操作数量或步骤数可作为 独立于具体程序/机器的度量指标 哪种操作跟算法的具体实现无关? 需要一种通用的基本操作来作为运行步骤的计量单位

❖ 赋值语句是一个合适的选择

一条赋值语句同时包含了(表达式)计算和(变量) 存储两个基本资源

仔细观察程序设计语言特性,除了与计算资源无关的 定义语句外,主要就是三种控制流语句和赋值语句, 而控制流仅仅起了组织语句的作用,并不实施处理。

❖分析SumOfN的赋值语句执行次数

对于“问题规模”n

赋值语句数量T(n)=1+n 那么,什么是问题规模?

❖问题规模:影响算法执行时间的主要因素

❖在前n个整数累计求和的算法中,需要累 计的整数个数合适作为问题规模的指标 前100,000个整数求和对比前1,000个整数求和 ,算是同一问题的更大规模

❖算法分析的目标是要找出问题规模会怎么影响一个算法的执行时间

数量级函数 Order of Magnitude

❖基本操作数量函数T(n)的精确值并不是特 别重要,重要的是T(n)中起决定性因素的 主导部分

  用动态的眼光看,就是当问题规模增大的时候, T(n)中的一些部分会盖过其它部分的贡献

❖数量级函数描述了T(n)中随着n增加而增 加速度最快的主导部分

   称作“大O”表示法,记作O(f(n)),其中f(n) 表示T(n)中的主导部分

确定运行时间数量级大O的方法

❖例1:T(n)=1+n

当n增大时,常数1在最终结果中显得越来越无足 轻重 所以可以去掉1,保留n作为主要部分,运行时间 数量级就是O(n)

 影响算法运行时间的其它因素

❖有时决定运行时间的不仅是问题规模

❖某些具体数据也会影响算法运行时间

   分为最好、最差和平均情况,平均状况体现了算 法的主流性能 对算法的分析要看主流,而不被某几种特定的运行状况所迷惑

常见的大O数量级函数

❖通常当n较小时,难以确定其数量级

❖当n增长到较大时,容易看出其主要变化 量级

从代码分析确定执行时间数量级函数

可以看到38--40这一段代码有3个赋值符号所以记作3

41-45行代码有双重循环并且有3个n 记作3n2

46-48行代码有单个循环2个赋值记作2n

49行最后一行代码又一个赋值符号记作1

最后得出结果:

❖仅保留最高阶项n2 ,去掉所有系数

❖数量级为O(n2)

其它算法复杂度表示法

 ❖大O表示法 表示了所有上限中最小的那个上限。

❖大

学习笔记:[算法分析]数据结构与算法Python版的更多相关文章

  1. 学习笔记:[算法分析]数据结构与算法Python版[基本的数据结构-上]

    线性结构Linear Structure ❖线性结构是一种有序数据项的集合,其中 每个数据项都有唯一的前驱和后继 除了第一个没有前驱,最后一个没有后继 新的数据项加入到数据集中时,只会加入到原有 某个 ...

  2. 【数据结构与算法Python版学习笔记】引言

    学习来源 北京大学-数据结构与算法Python版 目标 了解计算机科学.程序设计和问题解决的基本概念 计算机科学是对问题本身.问题的解决.以及问题求解过程中得出的解决方案的研究.面对一 个特定问题,计 ...

  3. 北京大学公开课《数据结构与算法Python版》

    之前我分享过一个数据结构与算法的课程,很多小伙伴私信我问有没有Python版. 看了一些公开课后,今天特向大家推荐北京大学的这门课程:<数据结构与算法Python版>. 课程概述 很多同学 ...

  4. 学习笔记24—win10环境下python版libsvm的安装

    1.前言 由于毕业设计需要用到libsvm,所以最近专心于配置libsvm,曾经尝试过在matlab中安装,但是没有成功.最终在Python环境中完成安装. 2.LIBSVM介绍 LIBSVM 是台湾 ...

  5. 【数据结构与算法Python版学习笔记】算法分析

    什么是算法分析 算法是问题解决的通用的分步的指令的聚合 算法分析主要就是从计算资源的消耗的角度来评判和比较算法. 计算资源指标 存储空间或内存 执行时间 影响算法运行时间的其他因素 分为最好.最差和平 ...

  6. 【数据结构与算法Python版学习笔记】查找与排序——散列、散列函数、区块链

    散列 Hasing 前言 如果数据项之间是按照大小排好序的话,就可以利用二分查找来降低算法复杂度. 现在我们进一步来构造一个新的数据结构, 能使得查找算法的复杂度降到O(1), 这种概念称为" ...

  7. 【数据结构与算法Python版学习笔记】基本数据结构——列表 List,链表实现

    无序表链表 定义 一种数据项按照相对位置存放的数据集 抽象数据类型无序列表 UnorderedList 方法 list() 创建一个新的空列表.它不需要参数,而返回一个空列表. add(item) 将 ...

  8. 【数据结构与算法Python版学习笔记】目录索引

    引言 算法分析 基本数据结构 概览 栈 stack 队列 Queue 双端队列 Deque 列表 List,链表实现 递归(Recursion) 定义及应用:分形树.谢尔宾斯基三角.汉诺塔.迷宫 优化 ...

  9. 【数据结构与算法Python版学习笔记】递归(Recursion)——定义及应用:分形树、谢尔宾斯基三角、汉诺塔、迷宫

    定义 递归是一种解决问题的方法,它把一个问题分解为越来越小的子问题,直到问题的规模小到可以被很简单直接解决. 通常为了达到分解问题的效果,递归过程中要引入一个调用自身的函数. 举例 数列求和 def ...

随机推荐

  1. 本地ssh快速登录 ssh免密登录

    每次登录都要ssh -p wang@xx.xx.xx.xx 虽然做了公钥验证 https://www.cnblogs.com/php-linux/p/10795913.html 不需要输入密码,但是每 ...

  2. 《Kafka笔记》2、环境搭建、Topic管理

    目录 一.Kafka环境搭建和Topic管理 1 单机环境搭建 1.1 环境准备 1.1.1 JDK 安装 1.1.2 配置主机名和ip 1.1.3 关闭防火墙和防火墙开机自启动 1.1.4 zook ...

  3. Unity实现代码控制音频播放

    前言 很久没说过Unity了,现在说一下Unity用代码控制音频播放 准备工作 1.需要播放的音频 2.给需要加声音的对象加Audio Source组件 3.新建Play脚本,并绑定需要播放声音的对象 ...

  4. linux文本三剑客之grep

    grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正 ...

  5. 手写webpack核心原理,再也不怕面试官问我webpack原理

    手写webpack核心原理 目录 手写webpack核心原理 一.核心打包原理 1.1 打包的主要流程如下 1.2 具体细节 二.基本准备工作 三.获取模块内容 四.分析模块 五.收集依赖 六.ES6 ...

  6. ServletUtils取值(限foton)

    1.String query = ServletUtils.getStringValue(request, "query", null); 2.boolean reload = S ...

  7. C#设计模式-模板方法模式(Template Method)

    概念 模板指一些可以套用的公共内容,例如网页模板是当网站中有许多页面版式色彩相同的情况下,将其定义为网页模板,并定义其中部分可编辑,部分不可编辑,那么在利用网页模板制作其他页面时就会很方便,不易出错. ...

  8. Luogu P2447 [SDOI2010]外星千足虫

    题意 给定 \(n\) 个变量和 \(m\) 个异或方程,求最少需要多少个才能确定每个变量的解. \(\texttt{Data Range:}1\leq n\leq 10^3,1\leq m\leq ...

  9. 手写Express.js源码

    上一篇文章我们讲了怎么用Node.js原生API来写一个web服务器,虽然代码比较丑,但是基本功能还是有的.但是一般我们不会直接用原生API来写,而是借助框架来做,比如本文要讲的Express.通过上 ...

  10. 水题挑战3: NOIP 2017 宝藏

    参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 \(n\) 个深埋在地下的宝藏屋, 也给出了这 \(n\) 个宝藏屋之间可供开发的 \(m\) 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋 ...