首页
Python
Java
PHP
IOS
Andorid
NodeJS
JavaScript
HTML5
数据结构与算法Python版
2023-01-06
数据结构与算法(python版)
ADT抽象数据类型(ADT:Abstract Data Type):ADT是对数据进行处理的一种逻辑描述,并不涉及如何实现这些处理. 同一ADT可以采用不同的数据结构来实现:1.采用程序设计语言的控制结构和基本数据.2.类型来实现ADT所提供的逻辑接口 一.程序和算法的区别 1.算法是对问题解决的分步描述: 2.程序则是采用某种编程语言实现的算法,同一个算法通过不同的程序员采用不同的编程语言,能产生很多程序: 案例程序: def sumOfN(n): ""&qu
北京大学公开课《数据结构与算法Python版》
之前我分享过一个数据结构与算法的课程,很多小伙伴私信我问有没有Python版. 看了一些公开课后,今天特向大家推荐北京大学的这门课程:<数据结构与算法Python版>. 课程概述 很多同学想要转行机器学习,也确实掌握了一些机器学习模型原理并具备基础的编程功底,但是在笔试.面试的时候还会掉链子,大概率是数据结构和算法知识薄弱.数据结构和算法是程序员的内功心法和基本功.无论是人工智能还是其它计算机科学领域,掌握扎实的数据结构和算法知识,往往会助力不少! 北京大学公开课<数据结构与算法Pyth
【数据结构与算法Python版学习笔记】引言
学习来源 北京大学-数据结构与算法Python版 目标 了解计算机科学.程序设计和问题解决的基本概念 计算机科学是对问题本身.问题的解决.以及问题求解过程中得出的解决方案的研究.面对一 个特定问题,计算机科学家的目标是得出一个算法(algorithm) ,写出一组解决该问题可能出现的任何情况的步步为营的指令.算法通过有限过程解决问题.算法是解决方案. 计算机科学可以被看作是对算法的研究. 可计算 抽象 理解什么是"抽象"以及抽象在问题解决过程中的作用 定义 抽象使我们能以一种区分所谓的
学习笔记:[算法分析]数据结构与算法Python版[基本的数据结构-上]
线性结构Linear Structure ❖线性结构是一种有序数据项的集合,其中 每个数据项都有唯一的前驱和后继 除了第一个没有前驱,最后一个没有后继 新的数据项加入到数据集中时,只会加入到原有 某个数据项之前或之后 具有这种性质的数据集,就称为线性结构 ❖线性结构总有两端,在不同的情况下,两 端的称呼也不同 有时候称为"左""右"端."前""后"端. "顶""底"端 ❖两端的称呼并
【数据结构与算法Python版学习笔记】查找与排序——散列、散列函数、区块链
散列 Hasing 前言 如果数据项之间是按照大小排好序的话,就可以利用二分查找来降低算法复杂度. 现在我们进一步来构造一个新的数据结构, 能使得查找算法的复杂度降到O(1), 这种概念称为"散列Hashing" 能够使得查找的次数降低到常数级别, 我们对数据项所处的位置就必须有更多的先验知识. 如果我们事先能知道要找的数据项应该出现在数据集中的什么位置, 就可以直接到那个位置看看数据项是否存在即可 由数据项的值来确定其存放位置 基本概念 散列表(hash table, 又称哈希表)
数据结构与算法Python版 熟悉哈希表,了解Python字典底层实现
Hash Table 散列表(hash table)也被称为哈希表,它是一种根据键(key)来存储值(value)的特殊线性结构. 常用于迅速的无序单点查找,其查找速度可达到常数级别的O(1). 散列表数据存储的具体思路如下: 每个value在放入数组存储之前会先对key进行计算 根据key计算出一个重复率极低的指纹 根据这个指纹将value放入到数组的相应槽位中 同时查找的时候也将经历同样的步骤,以便能快速的通过key查出想要的value. 这一存储.查找的过程也被称为hash存储.hash查
【数据结构与算法Python版学习笔记】算法分析
什么是算法分析 算法是问题解决的通用的分步的指令的聚合 算法分析主要就是从计算资源的消耗的角度来评判和比较算法. 计算资源指标 存储空间或内存 执行时间 影响算法运行时间的其他因素 分为最好.最差和平均情况,平均状况体现主流性能 累计求和案例 import time def sumOFN2(n): start=time.time() theSum=0 for i in range(1,n+1): theSum+=i end=time.time() return theSum,end-start
【数据结构与算法Python版学习笔记】递归(Recursion)——定义及应用:分形树、谢尔宾斯基三角、汉诺塔、迷宫
定义 递归是一种解决问题的方法,它把一个问题分解为越来越小的子问题,直到问题的规模小到可以被很简单直接解决. 通常为了达到分解问题的效果,递归过程中要引入一个调用自身的函数. 举例 数列求和 def listsum(numlist): if len(numlist) == 1: return numlist[0] else: return numlist[0]+listsum(numlist[1:]) if __name__ == "__main__": print(listsum([
【数据结构与算法Python版学习笔记】基本数据结构——列表 List,链表实现
无序表链表 定义 一种数据项按照相对位置存放的数据集 抽象数据类型无序列表 UnorderedList 方法 list() 创建一个新的空列表.它不需要参数,而返回一个空列表. add(item) 将新项添加到列表,没有返回值.假设元素不在列表中. remove(item) 从列表中删除元素.需要一个参数,并会修改列表.此处假设元素在列表中. search(item) 搜索列表中的元素.需要一个参数,并返回一个布尔值. isEmpty() 判断列表是否为空.不需要参数,并返回一个布尔值. siz
【数据结构与算法Python版学习笔记】树——利用二叉堆实现优先级队列
概念 队列有一个重要的变体,叫作优先级队列. 和队列一样,优先级队列从头部移除元素,不过元素的逻辑顺序是由优先级决定的. 优先级最高的元素在最前,优先级最低的元素在最后. 实现优先级队列的经典方法是使用叫作二叉堆(Binary Heap)的数据结构. 二叉堆的入队操作和出队操作均可达到O(log n). 其逻辑结构上像二叉树, 却是用非嵌套的列表来实现的 二叉堆有两个常见的变体: 最小堆(最小的元素一直在队首) 最大堆(最大的元素一直在队首) 二叉堆的操作 BinaryHeap()新建一个空的二
【数据结构与算法Python版学习笔记】树——相关术语、定义、实现方法
概念 一种基本的"非线性"数据结构--树 根 枝 叶 广泛应用于计算机科学的多个领域 操作系统 图形学 数据库 计算机网络 特征 第一个属性是层次性,即树是按层级构建的,越笼统就越靠近顶部,越具体则越靠近底部. 第二个属性是,一个节点的所有子节点都与另一个节点的所有子节点无关.比如,猫属的子节点有家猫(英文名为Domestica)和狮. 第三个属性是,叶子节点都是独一无二的. 例子 文件系统 HTML文档(嵌套标记) 域名体系 术语 节点 节点是树的基础部分. 它可以有自己的名字,我们
学习笔记:[算法分析]数据结构与算法Python版
什么是算法分析 对比程序,还是算法? ❖如何对比两个程序? 看起来不同,但解决同一个问题的程序,哪个" 更好"? ❖程序和算法的区别 算法是对问题解决的分步描述 程序则是采用某种编程语言实现的算法,同一个 算法通过不同的程序员采用不同的编程语言,能 产生很多程序 大O表示法 算法时间度量指标 ❖ 一个算法所实施的操作数量或步骤数可作为 独立于具体程序/机器的度量指标 哪种操作跟算法的具体实现无关? 需要一种通用的基本操作来作为运行步骤的计量单位 ❖ 赋值语句是一个合适的选择 一条赋值语
【数据结构与算法Python版学习笔记】目录索引
引言 算法分析 基本数据结构 概览 栈 stack 队列 Queue 双端队列 Deque 列表 List,链表实现 递归(Recursion) 定义及应用:分形树.谢尔宾斯基三角.汉诺塔.迷宫 优化问题与策略 查找与排序 查找:顺序查找与二分查找 排序:冒泡.选择.插入.希尔.归并.快速 散列.散列函数.区块链 树 相关术语.定义.实现方法 二叉树的应用:解析树 树的遍历 Tree Traversals 利用二叉堆实现优先级队列 二叉查找树 Binary Search Tree 平衡二叉搜索树
【数据结构与算法Python版学习笔记】递归(Recursion)——优化问题与策略
分治策略:解决问题的典型策略,分而治之 将问题分为若干更小规模的部分 通过解决每一个小规模部分问题,并将结果汇总得到原问题的解 递归算法与分治策略 递归三定律 体现了分支策略 应用相当广泛 排序 查找 遍历 求值等 优化问题 计算机科学中许多算法都是为了找到某些问题的最优解 两点之间最短路径 能最好匹配一系列点的直线 满足一定条件的最小集合 经典案例:找零兑换 贪心策略 兑换最少个数的硬币 贪心策略及失效 63=252+101+1*3 63=21*3 递归解法 步骤 确定基本结束条件 需要兑换的
【数据结构与算法Python版学习笔记】图——最短路径问题、最小生成树
最短路径问题 概念 可以通过"traceroute"命令来跟踪信息传送的路径: traceroute www.lib.pku.edu.cn 可以将互联网路由器体系表示为一个带权边的图 路由器作为顶点,路由器之间网络连接作为边权重可以包括网络连接的速度.网络负载程度.分时段优先级等影响因素 作为一个抽象,我们把所有影响因素合成为单一的权重 解决信息在路由器网络中选择传播速度最快路径的问题, 就转变为在带权图上最短路径的问题. 这个问题与广度优先搜索BFS算法解决的词梯问题相似, 只是在边
【数据结构与算法Python版学习笔记】图——强连通分支
互联网 我们关注一下互联网相关的非常巨大图: 由主机通过网线(或无线)连接而形成的图: 以及由网页通过超链接连接而形成的图. 网页形成的图 以网页(URI作为id)为顶点,网页内包含的超链接作为边,可以转换为一个有向图. 得出这样的结论:网络具有一种基础结构,使得在某种程度上相似的网页相互聚集. 强连通分支Strongly Connected Components 概念 通过一种叫作强连通分支的图算法,可以找出图中高度连通的顶点簇(发现高度聚集节点群). 强连通分支,定义为图G的一个子集C C中
【数据结构与算法Python版学习笔记】图——拓扑排序 Topological Sort
概念 很多问题都可转化为图, 利用图算法解决 例如早餐吃薄煎饼的过程 制作松饼的难点在于知道先做哪一步.从图7-18可知,可以首先加热平底锅或者混合原材料.我们借助拓扑排序这种图算法来确定制作松饼的步骤. 从工作流程图得到工作次序排列的算法,称为"拓扑排序" 拓扑排序处理一个DAG(向无环图), 输出顶点的线性序列使得两个顶点v,w,如果G中有(v,w)边,在线性序列中v就出现在w之前. 拓扑排序广泛应用在依赖事件的排期上,还可以用在项目管理. 数据库查询优化和矩阵乘法的次序优化上 算
【数据结构与算法Python版学习笔记】图——骑士周游问题 深度优先搜索
骑士周游问题 概念 在一个国际象棋棋盘上, 一个棋子"马"(骑士) , 按照"马走日"的规则, 从一个格子出发, 要走遍所有棋盘格恰好一次.把一个这样的走棋序列称为一次"周游" 在8×8的国际象棋棋盘上, 合格的"周游"数量有1.305×1035这么多, 走棋过程中失败的周游就更多了 采用图搜索算法, 是解决骑士周游问题最容易理解和编程的方案之一 解决方案还是分为两步: 首先将合法走棋次序表示为一个图 采用图搜索算法搜寻一个长
【数据结构与算法Python版学习笔记】图——词梯问题 广度优先搜索 BFS
词梯Word Ladder问题 要求是相邻两个单词之间差异只能是1个字母,如FOOL变SAGE: FOOL >> POOL >> POLL >> POLE >> PALE>> SALE >> SAGE 目标是找到最短的单词变换序列 用图表示单词之间的关系: 用一种名为广度优先搜索 BFS的图算法找到从起始单词到结束单词的最短路径. 构建词梯图 算法 首先是将所有单词作为顶点加入图中,再设法建立顶点之间的边 对每个顶点(单词) , 与其
【数据结构与算法Python版学习笔记】树——二叉树的应用:解析树
解析树(语法树) 将树用于表示语言中句子, 可以分析句子的各种语法成分, 对句子的各种成分进行处理 语法分析树 程序设计语言的编译 词法.语法检查 从语法树生成目标代码 自然语言处理 机器翻译 语义理解 表达式解析 \(((7+3)*(5-2))\) 叶节点保存操作数,内部节点保存操作符 树中每个子树都表示一个子表达式 构建解析树 定义规则 如果当前标记是(,就为当前节点添加一个左子节点,并下沉至该子节点: 如果当前标记在列表['+', '-', '/', '*']中,就将当前节点的值设为当前标
【数据结构与算法Python版学习笔记】图——基本概念及相关术语
概念 图Graph是比树更为一般的结构, 也是由节点和边构成 实际上树是一种具有特殊性质的图 图可以用来表示现实世界中很多有意思的事物,包括道路系统.城市之间的航班.互联网的连接,甚至是计算机专业的一系列必修课 定义 一个图G可以定义为G=(V, E) 其中V是顶点的集合, E是边的集合, E中的每条边e=(v, w), v和w都是V中的顶点: 如果是赋权图,则可以在e中添加权重分量子图: V和E的子集 术语表 顶点Vertex(也称"节点Node") 是图的基本组成部分,顶点具有名称
热门专题
js实现网页定位导航功能 平滑滚动
mysqldump下载
谷歌面试后多久出offer
onkeyup输入中文苹果手机失效
要限制账号只能在一处登陆
myeclipse10卸载出现 could not open
# 2.表达式 c =a if a>b else b
Boostrap连接Oracle增删改查
jmeter正则表达式配合ForEach
华为交换机修改telnet密码怎么去掉要重输旧密码
idea如何在cmd 运行sh
windows配置nginx通过域名访问本地文件夹
css 三行省略 兼容火狐
mysql根据.frm.ibd文件恢复数据
node 读取.properties
dict list 组合
使用hutool工具包读取Excel表格数据
stm32驱动1602液晶怎么连接
android代码竖屏设定
long转datetime在线工具