数据结构与算法
曾品闲Aru
成都江安农业学院(滑稽 计科狗,一切都是兴趣使然
展开
-
曾品闲的数据结构复习:链表
大一计科菜鸡新开博客,姑且作为暑假的学习日志 ------------------------暑假安排(大概)-------------------------------------- 预计复习内容:链表,线性表,栈,队列,二叉树,算法分析,BFS,DFS算法,U3D的基本操作 新学编程内容:1,基础(离散数学)2.图论相关题目(生成树算法,网络流,最大流,匹配问题,匈牙利算法)3.一点...原创 2019-07-18 17:41:14 · 261 阅读 · 2 评论 -
二分图匹配 与 匈牙利算法(Hungary)
今天开始继续学习啦~二分图二分图也称为二部图,定义如下:设无向图G=<V,E>,若能将V划分成V1,V2两个独立的顶点集(V1交V2为空,V1并V2为G,且V1,V2非空),使得G中每条边的两个端点皆是一个属于V1,另一个属于V2,则称G为二分图(二部图),V1,V2为互补的顶点子集,常将二部图G记作<V1,V2,E>若G是简单二分图,V1中的每个顶点均与V2中的...原创 2019-08-21 12:28:36 · 1268 阅读 · 0 评论 -
排序算法复习1(冒泡排序,插入排序,快速排序)
虽然这些算法都是比较基础的,大一入学就在学的东西,但估计自己还是有很多地方没有掌握弄懂的,今天来码一遍。冒泡排序冒泡排序应该是排序算法中最基础的,也最好理解的了(猴子排序呢??(滑稽)),它是通过容器里的元素两两比较大小交换顺序来实现的。假设数组的长度为n,则需要比较n-1趟,每一趟里也有一个循环,可知最坏情况下复杂度为O(n^2),手写一个图解:因为每一趟都会进行两两比较,所以每一趟都可...原创 2019-08-07 11:08:57 · 253 阅读 · 0 评论 -
图论最短路径算法(二):弗洛伊德(Floyd)算法 与 SPFA
弗洛伊德算法Floyd算法可以计算出一个带权图中任意两点间的最短路径(可以有负权),用到了动态规划DP的思想(这部分还没有看过,只简单看了一下操作,以后专门找时间来学习)。I,j的最短路径有两种可能:1.i直接到j2.i通过另一个顶点k到达j我们只需要检查这两种情况哪一个距离更小,再更新I到j的距离就行了写起来非常简单,它的核心就是一个状态转移方程:第K个状态:DP(k)[i,j]=...原创 2019-08-09 10:54:03 · 508 阅读 · 0 评论 -
解决最短路径问题 之 迪杰斯特拉(Dijkstra)算法 (距离+输出路径)
带权图为了研究最短路径,首先引入带权边,带权图的概念:设图G=<V,E>(无向图或有向图),给定W:E->R,对于G的每一条边e,称W(e)为边e的权,这样的图称为带权图,记为G=<V,E,W>.当e=(u,v)或e=<u,v>时,把W(e)记作W(u,v).设P是G中的一条通路,P中所有边的权之和称作P的长度,记作W(P). 即W(P)=∑\su...原创 2019-08-06 21:06:03 · 2881 阅读 · 0 评论 -
最小生成树学习:普利姆(Prim)算法 与 科鲁斯卡尔(Kruskal)算法
今天学习了生成最小生成树的两个重要算法,首先来总结一下知识点树连通而无回路的无向图称为无向树,简称为树。每一个连通分支都是树的无向图称为森林,悬挂的顶点称为树叶,度数大于等于2的顶点称作分支点设G=<V,E>为n阶m边的无向图,则有下列命题相互等价:1.G是树2.G中任意两个顶点存在唯一路径3.G中无回路且m=n-14.G是连通的且m=n-15.G是连通的且任何边均为桥...原创 2019-08-08 17:21:03 · 485 阅读 · 0 评论 -
弗洛莱(Fleury)算法求欧拉通路,欧拉回路(哥尼斯堡七桥问题)
引入:在18世纪,东普鲁士哥尼斯堡城内有一条大河,河中有两个小岛。全城被大河分割成四块陆地,河上架有七座桥,把四块陆地联系起来(如图)。当时许多市民都在思索一个问题:一个散步者能否从某一陆地出发,不重复地经过每座桥一次,最后回到原来的出发地。 此乃哥尼斯堡七桥问题!数学家欧拉证明了该问题无解,并由此创建了欧拉图,欧拉回路的相关概念,形成了一些重要定理。欧拉图:通过图中所有边一次且仅一次行遍...原创 2019-08-06 12:12:14 · 6141 阅读 · 3 评论 -
曾品闲的数据结构复习之四:二叉树之线段树(SegmentTree)
今天继续来复习二叉树的变种——线段树,实现一些基本操作线段树:线段树是一种二叉搜索树,但它的每个节点储存了:值data,区间左端点,区间右端点,因此,一棵线段树代表的是一个线段。根节点的左右子树也是线段树,分别储存了线段的左半部分和线段的右半部分,直到叶节点左右端点相等。我们有递归定义:对于一棵线段树T(a,b),记区间长度为L:当L>1:有左子树T(a,(a+b)/2)右子树T...原创 2019-07-28 11:48:04 · 269 阅读 · 0 评论 -
曾品闲的数据结构复习之四:二叉树之哈夫曼树
二叉树部分写起来比预想中的要麻烦,估计在这一章上会多停留一段时间。项目昨天没有写进度记录但还是一直有在做,今天会补一篇。日语学习也得赶上进度,啊啊,快去世了。基本概念:哈夫曼树是一种特殊的二叉树,它的每一个结点都带有权值,且总是有最小的带权路径(WPL),它也叫最优二叉树。相关概念解释:(一)路径:从树中一个结点到另一个结点之间的分支构成两个结点的路径(二)路径长度:路径上的分支数目叫...原创 2019-07-27 10:32:10 · 536 阅读 · 1 评论 -
曾品闲的数据结构复习之四:二叉树(BinaryTree)(一)
二叉树涉及到的东西很多,分成几天来复习一.基本概念(参考电子科大mooc内容)递归定义:二叉树或为空树,或由一个根节点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。特点:1 . 每一个节点最多有两颗子树,不存在节点度大于2的节点2 . 子树有左右之分,不能颠倒几种基本形态:1 .空树·...原创 2019-07-23 12:07:27 · 372 阅读 · 0 评论 -
图论(一):图的基本概念+无向图创建和DFS/BFS遍历
本日学习了图论的部分内容,了解了图的基本概念及图的矩阵表示方法,先附上笔记。图可以用邻接矩阵来进行表示,我们只要在有向图的某个位置进行一条边创建的时候在对称位置也创建一条就能表示无向图了。实现(C++,泛型):数据结构设计:private:一个储存顶点信息的一维数组一个储存边信息的二维数组顶点个数,边的个数public:构造/析构函数创建图的函数BFS遍历和DFS遍...原创 2019-08-04 17:36:22 · 617 阅读 · 0 评论 -
深度优先算法(DFS) 复习
概述深度优先算法是一种很基本,常用的算法,是搜索算法中的一种。它的实现主要用到了递归的思想,在一些树和图的遍历中,DFS会尽可能深地搜索树的分支,或搜索图的边,等到搜索条件不符合时,又回溯到上一节点,尝试其他走法。简单解释就是一条路走到黑,头很铁。在编程题目中一般用于解决迷宫类题目,棋盘类题目,如八皇后,跳马问题,连通问题,连通问题等。不过这种方法一般比较耗时,特别是在棋盘较大较复杂时,要较长...原创 2019-07-21 19:23:44 · 243 阅读 · 0 评论 -
曾品闲的数据结构复习之三:队列(Queue)
数据结构复习——队列一.基本概念(个人理解)队列也是一种特殊的线性表,其限定在于只能在表的一端(尾)入队,即加入新元素,而在另一端(首)进行出队,删除操作。与栈相反,队列的特点在于“先进先出”(FIFO)。个人认为队列还是非常形象的,银行,检票口排队,行李放在传送带上接受检查的过程等等,都是队列的具体案例。二.基本操作对队列的基本操作有:1.初始化队列2.入队操作(将元素从尾部加入队列...原创 2019-07-20 10:17:48 · 261 阅读 · 0 评论 -
曾品闲的数据结构复习之四:二叉树(BinaryTree) (二)
今天继续昨天的复习内容,预计完成:二叉树的层次遍历二叉树叶节点数量计算二叉树深度(高度)计算二叉查找树的建立,插入,遍历一.二叉树的层次遍历正如其名字,层次遍历是优先遍历同一层的节点,再向下遍历。可以使用简单的广度优先算法(BFS)来实现,广度优先算法利用的是队列先进先出的特点,之后会专门找一天来复习。建立一个队列,先将根节点入队,输出队首元素,若有左右子节点,则继续将其入队访问,每次...原创 2019-07-24 11:37:23 · 280 阅读 · 0 评论 -
曾品闲的数据结构复习之二:栈(Stack)
数据结构复习之——栈一.基本概念(个人理解)栈也称堆栈,是一种特殊的线性表,只能在表的尾部加入新的元素,称为入栈或压栈(push),也只能在表尾删除元素,称为出栈(pop)。表的尾部为栈顶,头部为栈底。栈这个概念在本学期学的汇编语言程序设计课程中也多次提及,在数据存储上有“先进先出”的原则(就像叠盘子取盘子,永远放的是最上面的一个,取的也是最上面的一个),是存取数据的一个利器,应该善加利用。...原创 2019-07-19 12:36:46 · 391 阅读 · 1 评论 -
动态规划(Dynamic Programming)学习 (一)
思想:动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间...原创 2019-08-22 17:31:07 · 332 阅读 · 0 评论