![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
学习笔记
有原创有转载,看见好的留个纪念
燃煤小鬼
这个作者很懒,什么都没留下…
展开
-
学习笔记——最小生成树
一、Prim算法: Prim算法实现的是找出一个有权重连通图中的最小生成树,即:具有最小权重且连接到所有结点的树。(强调的是树,树是没有回路的)。 Prim算法是这样来做的: 首先以一个结点作为最小生成树的初始结点,然后以迭代的方式找出与最小生成树中各结点权重最小边,并加入到最小生成树中。加入之后如果产生回路则跳过这条边,选择下一个结点。当所有结点都加入到最小生成树中之后,就找出了连通图中的最小生成树了。 Prim算法最小生成树查找过程: C...转载 2020-06-06 15:57:13 · 310 阅读 · 0 评论 -
学习笔记——最短路径和关键路径
总括 在我们不知道图的类型(有圈无圈、有负圈无负圈)的时候, Ford算法和上文中Dijkstra算法的优化版会给予我们一种通用的解法, 但是我们要注意到他们的时间复杂度为0(E * V); 这个时间的耗费是巨大的, 所以在我们知道足够的限制条件时我们就可以细化情况, 单独提出无环图这样的一个特例, 优化出时间复杂度为O(N)的线性算法。 除此之外, 无向图的应用中还有关键的一点就是关键路径的求解, 他往往用来求解工程中, 某一事件的优先关系 · · · · 无圈图最短路径 说到无圈图的最短路径, 和转载 2020-06-06 16:06:59 · 1790 阅读 · 0 评论 -
学习笔记——图结构
图的抽象数据类型 类型名称:图 数据对象集:一个非空的顶点集合和一个边集合,每条边用对应的一对顶点表示。 操作集: (1):构造一个有N个顶点但是没有边的图G; (2):在G中增加新边E (3):从G中删除边E (4):判断是否为空 (5):会使用深度优先遍历 (6):会使用广度优先遍历 储存结构: (1):邻接矩阵:可以理解为二维数组 (2):邻接表:链表的方式来表示 类似于树的孩子链表表示法 图的遍历: (1):深度优先遍历(DFS) 沿着一条路一直深入,到无路可走的时候原创 2020-06-06 15:44:12 · 234 阅读 · 0 评论 -
学习笔记——哈夫曼树
求取哈夫曼树的带权路径长度: 详细参考修理牧场这道题 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的、能锯成N块的木头,即该木头的长度是Li的总和。 但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的木头锯成长度为8、7和5的三段,第一次锯木头花费20,将木头锯成12和8;第二次锯木头花费12,将长度为12的木头锯成7和5,总花费为32。如果第一次转载 2020-06-05 17:45:42 · 162 阅读 · 0 评论 -
学习笔记——树
#include <iostream> using namespace std; typedef struct Node {//定义二叉树结构 char data; struct Node *lchild,*rchild; }*BiTree,BiTNode; void CreateBiTree(BiTree &T) {//先序创建二叉树 char ch; cin>>ch; if(ch=='#') T=NULL; else{ ...转载 2020-06-05 17:33:52 · 390 阅读 · 0 评论 -
学习笔记——堆结构
堆的性质: 1.堆的左节点比父节点小,右节点比父节点大; 2.堆是平衡二叉树 建堆: #include<iostream> #include<algorithm> #include<vector> using namespace std; int main() { vector<int> S = { 0, 1, 2, 3, 4, 5, 6 }; make_heap(S.begin(), S.end()); for (vec...原创 2020-06-05 17:33:37 · 114 阅读 · 0 评论 -
学写笔记——线性表
1.定义:线性表是由同一类型的数据元素构成的有序序列的线性结构。线性表的元素个数为线性表的长度。 2.线性表的存储实现: 详见于学习笔记——链表的操作 3.堆栈: 堆是一种先入后出的线性表,类似于往水杯里倒水,先倒入的都在杯底,想喝的话只能先把上面的喝掉。 4.队列: 队列是先入先出的线性表,就类似于排队。但是也包括一些特殊情况:优先队列(目前只知道这个) ...原创 2020-06-05 16:55:06 · 97 阅读 · 0 评论 -
学习笔记——算法的复杂度
1.3.2算法复杂度 1,算法复杂度分为空间复杂度和时间复杂度。 2,复杂度一般有O(n),O(n^2),O(logn),O(nlogn),O(1)。代表某个算法,占用时间和空间与数据之间的增量关系。n代表数据输入的量。 3,O(n) 代表随着数据量的增大,损耗的内存空间和损耗的时间随之增大。数据量增大多少倍,算法复杂度就增加多少倍。(时间复杂度:遍历算法) 4,O(n^2)代表数据量的增加,算法复杂度增大数据量的平方倍。好比数量增加为8倍,算法复杂度增加64倍。(时间复杂度:冒泡排序,对n个数进行原创 2020-06-05 16:40:27 · 149 阅读 · 0 评论 -
学习笔记——链表的创建,添加数据和打印
#include<iostream> using namespace std; typedef struct Node { int data; //储存节点数据 struct Node* next; //指向下一个节点的指针 } List; List *MakeEmpty() { //创建一个空的链式表 List *head; //定义头指针 he...原创 2020-03-17 09:58:03 · 144 阅读 · 0 评论