算法笔记摘录
芹菜猪肉饺贼棒
这个作者很懒,什么都没留下…
展开
-
算法笔记-图概念及基本操作
基本概念图由顶点(Vertex)和边(Edge)组成,每条边的两端都必须是图的两个顶点(可以是相同的顶点)。而记号G(V,E)表示图G的顶点集为V、边集为E。图可分为有向图和无向图。有向图的所有边都有方向,即确定了顶点到顶点的一个指向;而无向图的所有边都是双向的,即无向边所连接的两个顶点可以互相到达。顶点的度是指和该顶点相连的边的条数。特别是对于有向图来说,顶点的出边条数称为该顶点的出度,顶...原创 2020-03-22 23:39:57 · 241 阅读 · 0 评论 -
算法笔记-哈夫曼树基本操作
树的带权路径长度(Weight Path Length of Tree, WPL)等于它所有叶子结点的带权路径长度之后哈夫曼问题:已知n个数,寻找一棵树,使得树的所有叶子结点的权值恰好为着n个数,并且使得这棵树的带权路径长度最小。带权路径长度最小的树被称为哈夫曼树(又称最优二叉树)。显然,对同一组叶子结点来说,哈夫曼树可以是不唯一的,但是最小带权路径长度一定是唯一的构造一棵哈夫曼树操作:初...原创 2020-03-22 23:34:17 · 385 阅读 · 0 评论 -
算法笔记-堆基本操作
定义:堆是一棵完全二叉树,树中陪你过每个结点的值都不小于(或都不大于)其左右孩子结点的值。其中,如果父亲结点的值大于或等于孩子结点的值,那么称这样的堆为大顶堆,这时每个结点的值都是以它为根结点的子树的最大值;如果父亲结点的值小于或等于孩子节点的值,那么称这样的堆为小顶堆,这是每个结点的值都是以它为根结点的子树的最小值。堆一般用于优先队列的实现,而优先队列默认情况下使用的是大顶堆,因此本届以大顶堆为...原创 2020-03-22 23:32:28 · 144 阅读 · 0 评论 -
算法笔记-并查集基本操作
定义并查集是一种维护集合的数据结构,它的名字中”并“ ” 查“ ”集“ 分别取自 Union(合并)、Find(查找)、Set(集合)这三个单词。并查集支持下面两个操作:合并:合并两个集合查找:判断两个元素是否在一个集合并查集其实是用一个数组实现的int father[N];father[i]表示元素i的父亲结点,而父亲结点本身也是这个集合内的元素。例如father[1] = 2...原创 2020-03-22 23:30:58 · 257 阅读 · 0 评论 -
算法笔记-二叉平衡树基本操作
平衡二叉树(AVL树)由于二叉查找树有时候查找的复杂度达到O(n),起不到使用二叉查找树来进行数据查询优化的目的。于是需要对树的结构进行调整,使树的高度在每次插入元素仍能保持O(logn)的级别,于是产生了平衡二叉树AVL树仍然是一棵二叉查找树,只是在其基础上增加了“平衡”的要求。所谓平衡是指,对AVL树的任意结点来说,其左子树与右子树的高度之差的绝对值不超过1,其中左子树与右子树的高度之差称...原创 2020-03-22 23:28:57 · 234 阅读 · 0 评论 -
算法笔记-二叉查找树基本操作
二叉查找树(BST)二叉查找树(Binary Search Tree,BST)是一种特殊的二叉树,又称为排序二叉树、二叉搜索树、二叉排序树。二叉查找树的递归定义如下:要么二叉查找树是一棵空树要么二叉查找树由根结点、左子树、右子树组成,其中左子树和右子树都是二叉查找树,且左子树上所有结点的数据域均小于或等于根结点的数据域,右子树所有结点的数据域均大于根结点的数据域。二叉查找树实际上是一棵数...原创 2020-03-22 23:27:12 · 411 阅读 · 1 评论 -
算法笔记-树遍历基本操作
本章内容讨论的是一般意义上的树,即子结点个数不限且子结点没有先后次序的树。建议使用静态写法,即用数组下标来代替所谓的地址。这需要事先开一个大小不低于结点上限个数的结点数组。struct node { typename data; //数据域 int child[maxn]; //指针域,存放所有子结点的下标 }Node[maxn]; //结点数组,maxn为结点上限个数而child数...原创 2020-03-22 23:25:19 · 349 阅读 · 0 评论 -
算法笔记-二叉树基本操作
二叉树的遍历是通过一定顺序访问二叉树的所有结点。遍历方法一般有四种:先序遍历、中序遍历、后序遍历及层次遍历,其中,前三种一般使用深度优先搜索(DFS)实现,而层次遍历一般用广度优先搜索(BFS)实现。先序遍历遍历顺序:根结点—>左子树—>右子树需要两大件:递归式和递归边界递归式:先序遍历的定义可得,即先访问根结点,再递归访问左子树,最后递归访问右子树递归边界:二叉树是一棵空...原创 2020-03-22 23:22:29 · 169 阅读 · 0 评论 -
算法笔记-树概念
树(tree)首先可以想象,现实中的树是由树根、茎干、树枝、树叶组成的,树的营养是由树根出发、通过茎干与树枝不断传递,最终到达树叶的。在数据结构中,树则是用来概括这种传递关系的一种数据结构。定义结点(node):树枝分叉处、树叶、树根的抽象根节点(root):树根的抽象,对一棵树来说最多存在一个根节点叶子结点(leaf):树叶的抽象,且叶子结点不再延申出新的结点边(edge):把茎干...原创 2020-03-22 23:19:55 · 690 阅读 · 0 评论 -
算法笔记-链表概念
链表list 链表是线性表的一类。线性表分顺序表和链表,顺序表可以简单理解成数组正常定义一个数组,计算机会从内存中取出一块连续的地址来存放给定长度的数组而链表则是由若干个结点组成,每个结点代表一个元素,且结点在内存中的存储位置通常是不连续的链表一般由两部分组成,数据域和指针域struct node { typename data; //数据域 要存放的数据 node...原创 2020-03-22 23:16:46 · 115 阅读 · 0 评论 -
算法笔记-队列概念
队列queue 时一种先进先出的数据结构以食堂排队打饭为例,每个人都从队伍最后面排起,队伍最前面的人打完饭出队队列总是从队尾加入元素,而从队首移除元素,满足先进先出的规则(注意!)使用一个队首元素front来指向队首元素的前一个位置使用一个队尾指针rear来指向队尾元素和栈类似,当使用数组来实现队列时,队首指针front和队尾指针rear为int型变量,数组下标从0开始使用链表实现...原创 2020-03-21 14:36:38 · 323 阅读 · 0 评论 -
算法笔记-栈概念
栈栈是一种后进先出的数据结构。可以理解成每次把一本书放在箱子的最上面,也可以把箱子最上方的书拿出栈顶指针栈顶指针是始终指向栈的最上方元素当使用数组实现时,栈顶指针是一个int型的变量,数组下标从0开始,通常记为TOP;当使用链表实现栈时,是一个int*型的指针栈空:栈中没有元素时令TOP为-1常用操作1.清空(clear)将栈顶指针TOP置为-1,表示栈中没有元素void c...原创 2020-03-21 14:35:07 · 82 阅读 · 0 评论 -
算法笔记-DFS&BFS
深度优先搜索(DFS)深度优先搜索,重点就在于“深度”一词,不碰到死胡同就不回头。深度优先搜索是一种枚举所有完整路径以遍历所有情况的搜索方法。整个过程和出栈入栈的过程极为相似,可以使用栈来实现。首先先对问题进行分析,得到岔路口和死胡同;再定义一个栈,以深度为关键词访问这些岔道口和死胡同,并将它们入栈;而当离开这些岔道口和死胡同时,将它们出栈。使用递归可以很好地实现深度优先搜索。只能说递归...原创 2020-03-21 14:22:48 · 172 阅读 · 0 评论 -
算法笔记-STL-alogrithm
algorithmmax() min() abs()max(x, y) min(x, y)分别返回x, y 中的最大值和最小值, 且参数必须是两个(可以是浮点数)max(x, max(y, z)) 三个参数的最大值abs(x)返回x的绝对值 x必须是整数 浮点数的绝对值用math头文件下的fabsswap交换 x 和 y 的值reverse()reverse(it1, ...原创 2020-03-21 14:15:29 · 252 阅读 · 0 评论 -
算法笔记-STL-queue&priority_queue
queue 先进先出容器这一块在数据结构中详细介绍 不作具体累述定义queue<typename> name;queue的访问由于队列本身就是一种先进先出的限制性数据结构只能通过front()来访问队首元素,或是back()来访问队尾元素queue常用函数push()push(x)将x进行入队front()、back()front()来访问队首元素,或是ba...原创 2020-03-21 14:13:32 · 135 阅读 · 0 评论 -
算法笔记-STL-stack
stack后进先出的容器本节具体查看数据结构中stack的用法定义stack name;stack容器内元素的访问只能用top()来访问栈顶元素stack 常用函数push() push(x)将x入栈top() 获取栈顶元素pop() 用以弹出栈顶元素empty() 检测stack内是否为空size() 返回stack内元素的个数如注意没有清空可结合empty()和p...原创 2020-03-21 14:10:33 · 127 阅读 · 0 评论 -
算法笔记-STL-map
map映射map 可以将任何基本类型(包括STL容器) 映射到任何基本类型(包括STL容器)定义map<typename1, typename2> mp;map和其它STL容器定义上有点不一样,map需要确定映射前类型(键key)和映射后类型(值value)如果是字符串到整型的映射,必须使用string而不能用char数组 char数组作为数组,是不能被作为键值的ma...原创 2020-03-21 14:08:22 · 172 阅读 · 0 评论 -
算法笔记-STL-string
stringC中一般使用字符数组char str[]来存放字符串,使用字符数组会显得操作麻烦经验不足等错误C++中STL中引入了string类型, 对字符串常用的需求功能进行了封装, 使得操作起来更方便且不易出错定义string str;初始化string str = “abcd”;string中内容的访问通过下标访问 直接像字符数组那样去访问stringfor(int i...原创 2020-03-21 14:06:18 · 126 阅读 · 0 评论 -
算法笔记-STL-set
setset 集合 一个内部自动有序且不含重复元素的容器自动递增排序,且自动去除了重复元素定义此处与vector一样set<typename> name;set<int> a; set<int> a[100]; set只能通过迭代器(iterator)访问set<typename>::iterator it;set<int...原创 2020-03-21 13:21:13 · 82 阅读 · 0 评论 -
算法笔记-STL-vector
vector定义向量 个人理解是升级的数组vector<typename> name; vector<int> name;vector<double> name;vector<char> name;vector<node> name; //node是结构体的类型vector<vector<int> &g...原创 2020-03-21 13:04:25 · 207 阅读 · 0 评论