学习笔记:[算法分析]数据结构与算法Python版
什么是算法分析
对比程序,还是算法?
❖如何对比两个程序?
看起来不同,但解决同一个问题的程序,哪个“ 更好”?
❖程序和算法的区别
算法是对问题解决的分步描述 程序则是采用某种编程语言实现的算法,同一个 算法通过不同的程序员采用不同的编程语言,能 产生很多程序
大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表示法 表示了所有上限中最小的那个上限。
❖大
线性结构Linear Structure ❖线性结构是一种有序数据项的集合,其中 每个数据项都有唯一的前驱和后继 除了第一个没有前驱,最后一个没有后继 新的数据项加入到数据集中时,只会加入到原有 某个 ... 学习来源 北京大学-数据结构与算法Python版 目标 了解计算机科学.程序设计和问题解决的基本概念 计算机科学是对问题本身.问题的解决.以及问题求解过程中得出的解决方案的研究.面对一 个特定问题,计 ... 之前我分享过一个数据结构与算法的课程,很多小伙伴私信我问有没有Python版. 看了一些公开课后,今天特向大家推荐北京大学的这门课程:<数据结构与算法Python版>. 课程概述 很多同学 ... 1.前言 由于毕业设计需要用到libsvm,所以最近专心于配置libsvm,曾经尝试过在matlab中安装,但是没有成功.最终在Python环境中完成安装. 2.LIBSVM介绍 LIBSVM 是台湾 ... 什么是算法分析 算法是问题解决的通用的分步的指令的聚合 算法分析主要就是从计算资源的消耗的角度来评判和比较算法. 计算资源指标 存储空间或内存 执行时间 影响算法运行时间的其他因素 分为最好.最差和平 ... 散列 Hasing 前言 如果数据项之间是按照大小排好序的话,就可以利用二分查找来降低算法复杂度. 现在我们进一步来构造一个新的数据结构, 能使得查找算法的复杂度降到O(1), 这种概念称为" ... 无序表链表 定义 一种数据项按照相对位置存放的数据集 抽象数据类型无序列表 UnorderedList 方法 list() 创建一个新的空列表.它不需要参数,而返回一个空列表. add(item) 将 ... 引言 算法分析 基本数据结构 概览 栈 stack 队列 Queue 双端队列 Deque 列表 List,链表实现 递归(Recursion) 定义及应用:分形树.谢尔宾斯基三角.汉诺塔.迷宫 优化 ... 定义 递归是一种解决问题的方法,它把一个问题分解为越来越小的子问题,直到问题的规模小到可以被很简单直接解决. 通常为了达到分解问题的效果,递归过程中要引入一个调用自身的函数. 举例 数列求和 def ... 一.实验内容 (1)求任意一个命题公式的真值表. (2)利用真值表求任意一个命题公式的主范式. (3)利用真值表进行逻辑推理. 注:(2)和(3)可在(1)的基础上完成. 二.实验目的 真值表是命题逻 ... 传统的强化学习算法具有很强的决策能力,但难以用于高维空间任务中,需要结合深度学习的高感知能力,因此延展出深度强化学习,最经典的就是DQN(Deep Q-Learning). DQN 2013 DQN的 ... **写在前面**我们在学习任何一门技术的时候,往往都会看很多技术博客,很多程序员也会写自己的技术博客.但是我想写的这些不是纯技术博客,我暂时也没有这个能力写出 Python 或者爬虫相关的技术博客来. ... 问题背景 在实现多Realm时,扩展了ModularRealmAuthenticator 和 UsernamePasswordToken,于是在MyAuthenticationToken token ... zookeeper Cli的常用命令 服务管理 启动ZK服务: zkServer.sh start 查看ZK状态: zkServer.sh status 停止ZK服务: zkServer.sh sto ... 本文总结了刷LeetCode过程中,有关树的遍历的相关代码实现,包括了二叉树.N叉树先序.中序.后序.BFS.DFS遍历的递归和迭代实现.这也是解决树的遍历问题的固定套路. 一.二叉树的先序.中序.后 ... 从spring到springmvc,再到springboot.springcloud,应用程序api开发调用方面都已经非常熟悉,但对spring背后的扩展机制:为何一个简单的main方法可以实现这么强 ... 问题 传送门 看到这个问题感觉很难??? 不用怕,往下看就好啦 假如你不会CRT也没关系 EXCRT大致思路 先考虑将方程组两两联立解开,如先解第一个与第二个,再用第一个与第二个的通解来解第三个... ... 将串口数据转换为IP数据或将IP数据转换为串口数据并且进行传输的过程被称为数据透明传输,利用4G网络进行数据透明传输的设备被称为4G网络无线数据双向透明传输终端,也可以称为4G DTU,现在市面上大多 ... 目录 Spring流程Debug 1.1 Spring测试环境搭建 1.2 Debug容器创建过程 1.3 AbstractApplicationContext的refresh()包含的13个方法分析 ...学习笔记:[算法分析]数据结构与算法Python版的更多相关文章
随机推荐