【数据结构与算法专栏】
数据结构与算法专栏
汪雯琦
广告平台商业化策略·Python·数据分析·数据挖掘·机器学习·人工智能
展开
-
对希尔排序的原理理解(附图解)
希尔排序,它是简单插入排序经过改进后的一个更高效的版本。希尔排序属于插入排序。希尔排序也称为缩小增量排序。思想:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。图示:按4进行逻辑上的 分组增量为4每组进行排序:这就是第一次按照4排序完得到的结果12345786...原创 2020-04-05 23:04:18 · 3739 阅读 · 0 评论 -
对二叉树、节点、度之间关系的思考(附图)
二叉树节点二叉树中每个元素都称为节点。度度的定义:节点所拥有的子树的数目称为该节点的度注意: 叶子节点的度为0二叉树的度表示节点的子树或直接继承者的数目,二叉树的度是一个子树或单子树。2度是两个孩子,或者左和右子树有两个叉树,最大度数为2。叶子叶是叶节的缩写。叶子或叶子指的是网络结构中的计算机,它接收来自靠近中心的计算机而不是更远的计算机的信号。叶节点是树的底部段中的节点,叶节...原创 2020-04-05 21:00:11 · 20892 阅读 · 2 评论 -
【Python数据结构与算法复习day45】2-01基本顺序表与元素外围顺序表
2-01基本顺序表与元素外围顺序表文章目录2-01基本顺序表与元素外围顺序表原创 2020-02-11 17:15:43 · 453 阅读 · 0 评论 -
【Python数据结构与算法复习day44】1-08数据结构引入+程序等于算法加数据结构+数据结构的概念+算法与数据结构的区别+抽象数据类型+Abstract Data Type
1-08数据结构引入文章目录1-08数据结构引入补充说明补充说明尽量少用加号,list+list的时候效率很低,+=符号的话和extend的效率差不多了,已经有优化了。...原创 2020-02-08 21:09:15 · 875 阅读 · 5 评论 -
【Python数据结构与算法复习day43】1-07python列表与字典操作的时间复杂度
文章目录1-07python列表与字典操作的时间复杂度list内置操作的时间复杂度dict内置操作的时间复杂度1-07python列表与字典操作的时间复杂度list内置操作的时间复杂度list操作dict内置操作的时间复杂度dict操作...原创 2020-02-05 23:01:30 · 456 阅读 · 0 评论 -
【Python数据结构与算法复习day42】1-06python列表类型不同操作的时间效率+timeit模块+list的操作测试+(重要)测试append和insert列表操作的时间效率
1-06python列表类型不同操作的时间效率文章目录1-06python列表类型不同操作的时间效率timeit模块list的操作测试-列表的相加、列表生成器、直接变成列表、用append函数、用extend函数测试列表的相加、列表生成器、直接变成列表、用append函数、用extend函数的效率的结果测试append和insert列表操作的时间效率代码:结果:list内置操作的时间复杂度dic...原创 2020-02-05 22:58:11 · 586 阅读 · 1 评论 -
【Python数据结构与算法复习day41】1-05-代码执行时间测量模块timeit+函数调用不是基本步骤+timeit模块
1-05-代码执行时间测量模块timeit文章目录1-05-代码执行时间测量模块timeit函数调用不是基本步骤timeit模块list的操作测试函数调用不是基本步骤进行函数调用的不算是基本步骤,要分析函数里面的代码比如li = []li.append()li.insert()append和insert都不是基本步骤,name他的复杂度怎么算呢?timeit模块用来测试一小段...原创 2020-02-05 22:27:27 · 433 阅读 · 0 评论 -
【Python数据结构与算法复习day40】1-04常见时间复杂度与大小关系常见时间复杂度之间的关系+常见时间复杂度之间的关系(必背)+n的阶层的时间复杂度比n的n次方的时间复杂度低
1-04常见时间复杂度与大小关系文章目录1-04常见时间复杂度与大小关系常见的时间复杂度常见时间复杂度之间的关系练习: 时间复杂度练习( 参考算法的效率规则判断 )解答常见的时间复杂度注意,经常将log2n(以2为底的对数)简写成logn常见时间复杂度之间的关系所消耗的时间从小到大:【必背!!!!!!】练习: 时间复杂度练习( 参考算法的效率规则判断 )O(5)O(2n +...原创 2020-02-05 17:55:19 · 822 阅读 · 0 评论 -
【Python数据结构与算法复习day39】1-03最坏时间复杂度与计算规则+时间复杂度的几条基本计算规则+最优时间复杂度+平均时间复杂度+基本操作+顺序结构+循环结构+分支结构+往往只需要关注操作数
1-03最坏时间复杂度与计算规则文章目录1-03最坏时间复杂度与计算规则代码时间复杂度最坏时间复杂度时间复杂度的几条基本计算规则接着1-02的笔记代码for a in range(0, n): for b in range(0, n): c = 1000 - a - b if a ** 2 + b ** 2 == c ** 2: ...原创 2020-02-05 17:46:10 · 392 阅读 · 0 评论 -
【Python数据结构与算法复习day38】1-02-时间复杂度与大O表示法+如果 a+b+c=1000,且 a^2 + b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?不允
1-02-时间复杂度与大O表示法文章目录1-02-时间复杂度与大O表示法题目python代码描述算法结果新优化思路新优化代码新优化结果衡量算法效率的问题执行时间反应算法效率单靠时间值绝对可信吗?时间复杂度与“大O记法”如何理解“大O记法”最坏时间复杂度时间复杂度的几条基本计算规则题目如果 a+b+c=1000,且 a^2 + b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能...原创 2020-02-05 17:29:25 · 804 阅读 · 0 评论 -
【Python数据结构与算法复习day37】1-01-算法引入+“如果 a+b+c=1000,且 a^2 + b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?不允许依赖任何”
Python数据结构与算法1-01-算法引入文章目录Python数据结构与算法1-01-算法引入为什么要学习数据结构与算法?面试题解答枚举法思路代码实现结果记录时间的代码实现说明算法的定义推荐图书算法的五大特性为什么要学习数据结构与算法?因为算法即兵法,是基本功,要不断地主动学习与积累面试题如果 a+b+c=1000,且 a^2 + b^2=c^2(a,b,c 为自然数),如何求出所有...原创 2020-02-05 16:55:06 · 1101 阅读 · 0 评论 -
【Python数据结构与算法笔记day36】7.2. 二叉树的遍历+深度优先遍历+ 广度优先遍历(层次遍历)
文章目录7.2. 二叉树的遍历二叉树的遍历深度优先遍历广度优先遍历(层次遍历)7.2. 二叉树的遍历二叉树的遍历树的遍历是树的一种重要的运算。所谓遍历是指对树中所有结点的信息的访问,即依次对树中每个结点访问一次且仅访问一次,我们把这种对所有节点的访问称为遍历(traversal)。那么树的两种重要的遍历模式是深度优先遍历和广度优先遍历,深度优先一般用递归,广度优先一般用队列。一般情况下能用...原创 2020-02-01 15:55:32 · 420 阅读 · 1 评论 -
【Python数据结构与算法笔记day35】7.1. 二叉树
文章目录7.1. 二叉树二叉树二叉树的基本概念二叉树的性质(特性)二叉树的节点表示以及树的创建7.1. 二叉树二叉树二叉树的基本概念二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)二叉树的性质(特性)性质1: 在二叉树的第i层上至多有2^(i-1)个结点(i>0)性质2: 深度为k的二叉树至...原创 2020-02-01 15:55:22 · 412 阅读 · 0 评论 -
【Python数据结构与算法笔记day34】7. 树与树算法+树的概念 +树的术语 +树的种类 +树的存储与表示 +常见的一些树的应用场景
文章目录7. 树与树算法树与树算法树的概念树的术语树的种类树的存储与表示常见的一些树的应用场景7. 树与树算法树与树算法树的概念树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它...原创 2020-02-01 15:55:20 · 359 阅读 · 0 评论 -
【Python数据结构与算法笔记day33】6.8. 搜索
文章目录6.8. 搜索搜索二分法查找二分法查找实现(非递归实现)(递归实现)时间复杂度6.8. 搜索搜索搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的,因为该项目是否存在。 搜索的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找二分法查找二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此...原创 2020-02-01 15:54:58 · 286 阅读 · 0 评论 -
【Python数据结构与算法笔记day32】6.7. 常见排序算法效率比较
6.7. 常见排序算法效率比较文章目录6.7. 常见排序算法效率比较常见排序算法效率比较常见排序算法效率比较原创 2020-02-01 15:54:56 · 318 阅读 · 0 评论 -
【Python数据结构与算法笔记day31】6.6. 归并排序
文章目录6.6. 归并排序归并排序归并排序的分析时间复杂度6.6. 归并排序归并排序归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。归并排序的分析def...原创 2020-02-01 15:54:33 · 316 阅读 · 0 评论 -
【Python数据结构与算法笔记day30】6.5. 希尔排序
文章目录6.5. 希尔排序希尔排序希尔排序过程希尔排序的分析时间复杂度希尔排序演示6.5. 希尔排序希尔排序希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的...原创 2020-02-01 15:54:26 · 327 阅读 · 2 评论 -
【Python数据结构与算法笔记day29】6.4. 快速排序
文章目录6.4. 快速排序快速排序快速排序的分析时间复杂度快速排序演示6.4. 快速排序快速排序快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成...转载 2020-02-01 15:54:11 · 277 阅读 · 0 评论 -
【Python数据结构与算法笔记day28】6.3. 插入排序
文章目录6.3. 插入排序插入排序插入排序分析时间复杂度插入排序演示6.3. 插入排序插入排序插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。插入排序分析def in...转载 2020-02-01 15:54:07 · 244 阅读 · 0 评论 -
【Python数据结构与算法笔记day27】6.2. 选择排序
文章目录6.2. 选择排序选择排序选择排序分析时间复杂度选择排序演示6.2. 选择排序选择排序选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果...原创 2020-02-01 15:53:57 · 312 阅读 · 0 评论 -
【Python数据结构与算法笔记day26】6.1. 冒泡排序
文章目录6.1. 冒泡排序冒泡排序冒泡排序的分析时间复杂度冒泡排序的演示6.1. 冒泡排序冒泡排序冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序...转载 2020-02-01 15:53:47 · 343 阅读 · 2 评论 -
【Python数据结构与算法笔记day25】6. 排序与搜索+排序算法的稳定性
文章目录6. 排序与搜索排序与搜索排序算法的稳定性6. 排序与搜索排序与搜索排序算法(英语:Sorting algorithm)是一种能将一串数据依照特定顺序进行排列的一种算法。排序算法的稳定性稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。当相...原创 2020-02-01 15:53:37 · 266 阅读 · 0 评论 -
【Python数据结构与算法笔记day24】5.2. 双端队列
文章目录5.2. 双端队列双端队列操作实现5.2. 双端队列双端队列双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。操作Deque() 创建一个空的双端队列add_front(item) 从队头加入一个item元素ad...转载 2020-02-01 15:53:24 · 289 阅读 · 0 评论 -
【Python数据结构与算法笔记day23】5.1. 队列的实现+操作
文章目录5.1. 队列的实现队列的实现操作5.1. 队列的实现队列的实现同栈一样,队列也可以用顺序表或者链表实现。操作Queue() 创建一个空的队列enqueue(item) 往队列中添加一个item元素dequeue() 从队列头部删除一个元素is_empty() 判断一个队列是否为空size() 返回队列的大小class Queue(object): """...原创 2020-02-01 15:53:04 · 247 阅读 · 0 评论 -
【Python数据结构与算法笔记day22】5. 队列
文章目录5. 队列队列5. 队列队列队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出的(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作!假设队列是q=(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始...原创 2020-02-01 15:53:01 · 238 阅读 · 0 评论 -
【Python数据结构与算法笔记day21】4.1. 栈结构实现+栈的操作
文章目录4.1. 栈结构实现栈结构实现栈的操作4.1. 栈结构实现栈结构实现栈可以用顺序表实现,也可以用链表实现。栈的操作Stack() 创建一个新的空栈push(item) 添加一个新的元素item到栈顶pop() 弹出栈顶元素peek() 返回栈顶元素is_empty() 判断栈是否为空size() 返回栈的元素个数class Stack(object): ...原创 2020-02-01 15:52:45 · 304 阅读 · 0 评论 -
【Python数据结构与算法笔记day20】4. 栈
文章目录4. 栈栈4. 栈栈栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。由于栈数据结构只允许在一端进行操作,因而按照后进...原创 2020-02-01 15:52:35 · 236 阅读 · 0 评论 -
【Python数据结构与算法笔记day19】3.3. 双向链表
文章目录3.3. 双向链表双向链表操作实现3.3. 双向链表双向链表一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。操作is_empty() 链表是否为空length() 链表长度travel() 遍历链表add(item) 链表头部添加app...原创 2020-02-01 15:52:24 · 280 阅读 · 0 评论 -
【Python数据结构与算法笔记day18】3.2. 单项循环链表
文章目录3.2. 单项循环链表单向循环链表操作实现3.2. 单项循环链表单向循环链表单链表的一个变形是单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点。操作is_empty() 判断链表是否为空length() 返回链表的长度travel() 遍历add(item) 在头部添加一个节点append(item) 在尾部添加一个节点insert...原创 2020-02-01 15:52:11 · 324 阅读 · 0 评论 -
【Python数据结构与算法笔记day17】3.1. 单向链表
文章目录3.1. 单向链表单向链表节点实现单链表的操作单链表的实现链表与顺序表的对比3.1. 单向链表单向链表单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。表元素域elem用来存放具体的数据。链接域next用来存放下一个节点的位置(python中的标识)...原创 2020-02-01 15:51:53 · 381 阅读 · 1 评论 -
【Python数据结构与算法笔记day16】3. 链表+为什么需要链表 +链表的定义
文章目录3. 链表链表为什么需要链表链表的定义3. 链表链表为什么需要链表顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。链表的定义链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节点(数据...原创 2020-02-01 15:50:35 · 371 阅读 · 0 评论 -
【Python数据结构与算法笔记day15】2.4. Python中的顺序表
文章目录2.4. Python中的顺序表Python中的顺序表list的基本实现技术2.4. Python中的顺序表Python中的顺序表Python中的list和tuple两种类型采用了顺序表的实现技术,具有前面讨论的顺序表的所有性质。tuple是不可变类型,即不变的顺序表,因此不支持改变其内部状态的任何操作,而其他方面,则与list的性质类似。list的基本实现技术Python标...原创 2020-02-01 15:50:23 · 294 阅读 · 0 评论 -
【Python数据结构与算法笔记day13】2.2. 顺序表的结构与实现+顺序表的结构 +顺序表的两种基本实现方式+ 元素存储区替换 +元素存储区扩充
文章目录2.2. 顺序表的结构与实现顺序表的结构与实现顺序表的结构顺序表的两种基本实现方式元素存储区替换元素存储区扩充2.2. 顺序表的结构与实现顺序表的结构与实现顺序表的结构一个顺序表的完整信息包括两部分,一部分是表中的元素集合,另一部分是为实现正确操作而需记录的信息,即有关表的整体情况的信息,这部分信息主要包括元素存储区的容量和当前表中已有的元素个数两项。顺序表的两种基本实现方式...原创 2020-02-01 15:50:11 · 457 阅读 · 0 评论 -
【Python数据结构与算法笔记day14】2.3. 顺序表的操作
文章目录2.3. 顺序表的操作顺序表的操作增加元素删除元素2.3. 顺序表的操作顺序表的操作增加元素如图所示,为顺序表增加新元素111的三种方式a. 尾端加入元素,时间复杂度为O(1)b. 非保序的加入元素(不常见),时间复杂度为O(1)c. 保序的元素加入,时间复杂度为O(n)删除元素a. 删除表尾元素,时间复杂度为O(1)b. 非保序的元素删除(不常见),时间复杂度为...原创 2020-02-01 15:50:11 · 301 阅读 · 0 评论 -
【Python数据结构与算法笔记day12】2.1. 顺序表的形式
文章目录2.1. 顺序表的形式顺序表的基本形式2.1. 顺序表的形式顺序表的基本形式[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直图a表示的是顺序表的基本形式,数据元素本身连续存储,每个元素所占的存储单元大小固定相同,元素的下标是其逻辑地址,而元素存储的物理地址(实际内存地址)可以通过存储区的起始地址Loc (e0)加上逻辑地址(第i个元素)与存储单元大小(c)的乘积计算...原创 2020-02-01 15:50:01 · 341 阅读 · 0 评论 -
【Python数据结构与算法笔记day11】2. 顺序表
文章目录2. 顺序表顺序表2. 顺序表顺序表在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等。一组数据中包含的元素个数可能发生变化(可以增加或删除元素)。对于这种需求,最简单的解决方案便是将这样一组元素看成一个序列,用元素在序列里的位置和顺序,表示实际应用中的某种有意义的信息,或者表示数据之间的某种关系。这样...原创 2020-02-01 15:49:49 · 368 阅读 · 0 评论 -
【Python数据结构与算法笔记day10】1.8. 数据结构
文章目录1.8. 数据结构数据结构概念算法与数据结构的区别抽象数据类型(Abstract Data Type)1.8. 数据结构数据结构我们如何用Python中的类型来保存一个班的学生信息? 如果想要快速的通过学生姓名获取其信息呢?实际上当我们在思考这个问题的时候,我们已经用到了数据结构。列表和字典都可以存储一个班的学生信息,但是想要在列表中获取一名同学的信息时,就要遍历这个列表,其...原创 2020-02-01 15:49:27 · 432 阅读 · 0 评论 -
【Python数据结构与算法笔记day09】1.7. Python内置类型性能分析
文章目录1.7. Python内置类型性能分析Python内置类型性能分析timeit模块class timeit.Timer(stmt='pass', setup='pass', timer=)timeit.Timer.timeit(number=1000000)list的操作测试list内置操作的时间复杂度dict内置操作的时间复杂度1.7. Python内置类型性能分析Python内置...原创 2020-02-01 15:12:49 · 352 阅读 · 2 评论 -
【Python数据结构与算法笔记day08】1.6. 常见时间复杂度+常见时间复杂度之间的关系
文章目录1.6. 常见时间复杂度常见时间复杂度常见时间复杂度之间的关系1.6. 常见时间复杂度常见时间复杂度执行次数函数举例阶非正式术语12O(1)常数阶2n+3O(n)线性阶3n2+2n+1O(n2)平方阶5log2n+20O(logn)对数阶2n+3nlog2n+19O(nlogn)nlogn阶6n3+2n2+3n...原创 2020-02-01 15:11:48 · 370 阅读 · 3 评论