数据结构
张先生-您好
学习的同时记录,记录的同时分享,分享的同时交流,交流的同时学习。
展开
-
冒泡排序算法
什么是冒泡排序呢?冒泡排序的英语名是Bubble Sort,是一种最基础的交换排序。 大家一定都喝过汽水吧,汽水中常常有许多小小的气泡,往上飘,这是因为组成小气泡的二氧化碳比水要轻,所以小气泡才会一点一点的向上浮。而冒泡排序之所以叫冒泡排序,正是因为这种排序算法的每一个元素都可以向小气泡一样,根据自身大小,一点一点向着数组的一侧移动。具体如何移动呢?我们来看一下例子: 有8个数组组成一个无序...转载 2021-10-26 14:09:05 · 77 阅读 · 0 评论 -
排序算法-堆排序和时间复杂度
排序算法-堆排序和时间复杂度堆排序分为两个部分:堆调整+堆排序 堆排序的思路:将一个已知的序列先调整到大堆的形式,然后再将堆顶元素和堆最后的元素进行调换(这样最大的元素就在最后面了),减去最后一个元素将剩余的元素进行堆调整,重复上面的步骤就会生成从小到大的序列。这里牵扯到两个概念,一个是调整大堆,另一个是对堆顶元素和最后一个元素调换的理解 首先,先来看调整大堆 调整大堆的核心思路是:找到parent,rchild,lchild,将rchild,lchild中最大的和parent进行替换,(如果pare转载 2021-10-18 21:37:07 · 291 阅读 · 0 评论 -
排序算法稳定性
排序算法稳定性排序算法稳定性:假设待排序序列中有两个元素相等,而且在排序前和排序后两个相等的元素的相对位置不变,即有 a = b,排序前a在b前面,那么排序后,a还是要在b前面。排序算法的稳定性是要看具体的算法实现,比如一般情况下,直接选择排序,快速排序,希尔排序,堆排序都不是稳定排序算法,基数排序,计数排序,归并排序,插入排序,冒泡排序都是稳定排序算法。快速排序:A = {2, 2, 1},排序后A = {1,2,2}。希尔排序:A = {1,2,5,4,4,7},排序后(k = 2);A = {1原创 2021-10-18 21:32:26 · 778 阅读 · 0 评论 -
排序算法之 快速排序 及其时间复杂度和空间复杂度
排序算法之 快速排序 及其时间复杂度和空间复杂度 快速排序是排序算法中效率相对较高的,但使用的人却是比较少,大家一般信手拈来的排序算法就是冒泡排序。因为冒泡排序主观,容易理解,而快速排序使用到了递归,大家可能就有点不知所措了。 算法分析 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分转载 2021-10-18 20:38:31 · 4771 阅读 · 0 评论 -
详谈归并排序时间复杂度过程推导----软考
详谈归并排序时间复杂度过程推导----软考转载地址:https://blog.csdn.net/liangjiabao5555/article/details/89670082 归并排序方法就是把一组n个数的序列,折半分为两个序列,然后再将这两个序列再分,一直分下去,直到分为n个长度为1的序列。然后两两按大小归并。如此反复,直到最后形成包含n个数的一个数组。 归并排序总时间=分解时间+子序列排好序时间+合并时间 无论每个序列有多少数都是折中分解,所以分解时间是转载 2021-10-18 20:23:05 · 277 阅读 · 0 评论 -
教你轻松计算AOE网关键路径
本文为转载,原文地址为 : 教你轻松计算AOE网关键路径认识AOE网 有向图中,用顶点表示活动,用有向边表示活动之间开始的先后顺序,则称这种有向图为AOV网络;AOV网络可以反应任务完成的先后顺序(拓扑排序)。 在AOV网的边上加上权值表示完成该活动所需的时间,则称这样的AOV网为AOE网,如下图: 图中,顶点表示事件(能被触发,两特征属性:最早发生时间Ve(j);最晚发生时间Vl(j)),边表示活动(能被开始,两特征属性:最早开始时间e(i);最晚开始时间l(i)),权表示转载 2020-06-30 14:55:51 · 783 阅读 · 0 评论 -
最小生成树的两种方法(Kruskal算法和Prim算法)
原作者:勿在浮沙筑高台http://blog.csdn.net/luoshixian099/article/details/51908175 关于图的几个概念定义:连通图:在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图。 强连通图:在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连通图。 连通网:在连通图中,若图的边具有一定的意义,每一条边都对应着一个数,转载 2020-06-21 15:43:35 · 1377 阅读 · 0 评论 -
Python数据结构之图最短路径
Python数据结构之最短路径单源点最短路径之Dijkstra算法算法步骤:把V分成两组(1) S: 以求出最短路径的顶点的集合(2) T = V - S : 尚未确定最短路径的顶点集合。将T中顶点按最短路径递增的次序加入到S中。保证:(1)从源点v0v_0v0到S中各顶点的最短路径长度都不大于从v0v_0v0到T中任何顶点的最短路径长度。(2)每个顶点对应一个距离值: S中顶点:从v0v_0v0到此顶点的最短路径长度, T中顶点:从v0v_0v0到此顶点的原创 2020-06-20 21:29:20 · 662 阅读 · 0 评论 -
Python数据结构之图基础
Python数据结构之图基础什么是图?表示多对多的关系一组顶点,通常用V(Vertex)表示顶点集合一组边,通常用E(Edge)表示边的集合,边是顶点对,分为有向边和无向边图的创建邻接矩阵代码class Graph: """创建图""" def __init__(self, n): self.vertex_list = [] self.edges = [[0 for i in range(n)] for j in r原创 2020-05-23 22:25:04 · 619 阅读 · 0 评论 -
Python数据结构之平衡二叉树
Python数据结构之平衡二叉树前言 平衡二叉树(AVL树):空树,或者任一结点左、右子树高度差的绝对值不超过1,也即∣BF(T)∣<=1|BF(T)|<=1∣BF(T)∣<=1。而平衡因子(BF),其中hLh_LhL和hRh_RhR分别为T的左、右子树的高度。此外,平衡二叉树是在BST上建立而成。BF公式如下:BF(T)=hL−hRBF(T) = h_L - h_RBF(T)=hL−hRLL型(右旋)图示代码 def right_rotate原创 2020-05-13 11:09:28 · 810 阅读 · 0 评论 -
Python数据结构之搜索二叉树(BST)
Python数据结构之搜索二叉树(BST) 二叉搜索树也称二叉排序树或二叉查找树。二叉搜索树:一个二叉树,可以为空;如果不为空,满足一下性质(整体到部分遵循左小右大原则)。非空左子树的所有键值小于其根结点的键值。非空右子树的所有键值大于其根结点的键值。左、右子树都是二叉搜索树。BST插入遵循左子树的值小于右子树的值原则进行插入操作def insert(self, node, val): """插入元素(递归)""" if node is None: n原创 2020-05-09 10:13:21 · 838 阅读 · 0 评论 -
Python数据结构之线索二叉树和顺序存储
Python数据结构之线索二叉树和顺序存储二叉树顺序存储顺序存储原则1)顺序存储只考虑完全二叉树(结点索引以零开头)2)第n个元素的左子节点2n + 13)第n个元素的右子节点2n + 24)第n个元素的父结点(n-1)/ 2代码 先序、中序和后序遍历的代码实现过程可以与递归算法进行类别。class ArrayBinaryTree: def __init__(s...原创 2020-04-30 11:47:21 · 666 阅读 · 1 评论 -
Python数据结构之二叉树查、删、修
Python数据结构之二叉树增、查、删、修增加 一层一层添加数据(层序遍历原则),使用队列对结点进行存储,从左向右增加结点,最终可形成完全二叉树。def add(self, val): """添加树节点实现完全二叉树""" node = Node(val) if self.root is None: self.root = node ...原创 2020-04-25 16:16:17 · 792 阅读 · 0 评论 -
Python数据结构之二叉树的遍历
Python数据结构之二叉树的遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有深度遍历和广度遍历,深度遍历有前序、中序以及后序三种遍历方法,广度遍历即我们平常所说的层次遍历。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。深度遍历前序遍历非递归def pre_order(sel...原创 2020-04-25 15:20:13 · 226 阅读 · 0 评论 -
Python数据结构之栈
Python数据结构之栈前言容器:作为容器数据结构,它们保证存入的元素被保存在容器里,尚未明确删除的元素总是可以访问,而取出并删除的元素就不再存在于容器中了.栈:栈主要用于在计算过程中保存临时的数据,这些数据是计算中发现或者产生的,在后面的计算中可能需要使用它们.栈是最简单的缓存结构,它支持数据项的存储和访问,不支持数据项之间的任何关系.栈遵循的原则是:后进先出(LIFO)栈的应用环境:...原创 2019-10-02 16:16:12 · 328 阅读 · 0 评论 -
Python数据结构之基本双链表
Python数据结构之基本双链表前言 单链表只有一个一个方向的链接,只能做一个方向的扫描和逐步操作.即使增加了尾部节点的引用,也只能支持O(1)时间的首端元素加入/删除和尾端加入.如果希望两端插入和删除操作都能高效的完成,就必须修改结点的基本设计,加入另一个方向的链接,这样就得到了双向链接表,简称双链表.双链表的一般结构如下图: 双链表节点说明 双向链表支持两个方向...原创 2019-09-25 13:38:07 · 251 阅读 · 0 评论 -
Python数据结构之基本单链表
Python数据结构之基本单链表前言 单向链接表(单链表)的结点是一个二元组,形式如下图,其表元素域elem保存着作为表元素的数据项(或者数据项的关联信息),链接域next里保存同一个表里下一个结点的标示. 单链表的一般表示形式如下:基本链表的操作创建结点代码class Node(object): """ 定义节点 """ # 定义类...原创 2019-09-21 14:31:54 · 394 阅读 · 2 评论 -
Python数据结构之循环单链表
Python数据结构之循环单链表前言 单链表的另一常见变形是循环单链表(简称循环链表),其中最后一个结点的next域不用None,而是指向表的第一个结点,但是如果仔细考虑链表对象记录表尾结点更加重要.这样可以同时支持时间复杂度O(1)的表头/表尾插入和删除操作.循环链表的基本操作创建结点代码class Node: """ 定义node节点 """ ...原创 2019-09-21 14:28:03 · 987 阅读 · 0 评论 -
Python数据结构之前言
Python数据结构之前言 如今随着人工智能的兴起,Python成为了当今最流行的语言,本人也踏入了Python的行列里面,之所以选择使用Python来作为自己要作为生产力的主要语言,主要是因为自己以后要从事的方向,需要这一方面的知识,自己也想要专门修好一门语言来提升自己的代码能力,加强自己的动手能力. 本次博客旨在记录自己学习数据结构时的一些思路和代码,博客中出现的代码均能正确运行...原创 2019-09-20 20:07:49 · 96 阅读 · 1 评论