随笔分类 - 基础算法与数据结构
摘要:二项堆其实就是由多棵二项树构成的森林,每棵树的根结点构成一个单链表。其链表序列,按照每棵二项树的度从小到大排列。 依然分析它的五种基本操作: make_heap:建立一个空堆,或者把数组中元素转换成二叉堆。 insert:插入元素。 minimun:返回一个最小数。 extract_min:移除最小
阅读全文
摘要:二叉堆可以被看作是一个数组,也可以简单的看作是一个近似的完全二叉树,二叉堆有最大堆和最小堆,分别具有堆的性质:最大堆的某个结点的值最多与其父结点一样大,最小堆则是某个结点的值最多与其父结点一样小。所以最大堆中最大的结点永远是根结点,最小堆中最小的结点永远是根节点。 既然二叉堆是一种数据结构,就有其支
阅读全文
摘要:树有通常三种遍历方法:前序遍历,中序遍历,后序遍历,还有一种层序遍历。如果只单单知道其中一种遍历方法,是无法确定一颗树的,但是如果有两种遍历方法能否确定一颗树呢?这里不是二叉树,只是简单的树,也就是当只有一个儿子的时候不严格区分是左儿子还是右儿子,统一当作是第一个儿子。 对于二叉树来说,如果确定了中
阅读全文
摘要:连通无回路的无向图称之为树,如果无向图G的生成子图T是树,则称T是G的生成树,生成树不止一种,其中各边权值和最小的树被称为最小生成树。 边数等于点数减一 没有环 图连通并且边都为桥(就是说去掉任意一条边,图就不再连通) 两点间路径唯一 边权和最小 其中(1)为原无向图,(2)为其中一种生成树,(3)
阅读全文
摘要:通过dij,ford,spfa等算法可以快速的得到单源点的最短路径,如果想要得到图中任意两点之间的最短路径,当然可以选择做n遍的dij或是ford,但还有一个思维量较小的选择,就是floyd算法。 多源最短路径算法 Floyd算法 思维 先直观做个思考,一张图,任意两个点,已知两点间的路径权值,如果
阅读全文
摘要:说完dijkstra算法,有提到过朴素dij算法无法处理负权边的情况,这里就需要用到Bellman Ford算法,抛弃贪心的想法,牺牲时间的基础上,换取负权有向图的处理正确。 单源最短路径 Bellman Ford算法 思维 一张有向图,有n个点,m条边,用dis[]数组保存源点到各点的最短距离,可
阅读全文
摘要:一般最短路径算法习惯性的分为两种:单源最短路径算法和全顶点之间最短路径。前者是计算出从一个点出发,到达所有其余可到达顶点的距离。后者是计算出图中所有点之间的路径距离。 单源最短路径 Dijkstra算法 思维 本质上是贪心的思想,声明一个数组dis来保存源点到各个顶点的最短距离和一个保存已经找到了最
阅读全文
摘要:简介 在平时的计算中,常常会遇到集合划分的问题,例如一个集合S={a1,a2,a3,a4},按照一定规则我们可以划分为S1={a1,a2},S2={a3},s3={a4}。但是在划分好集合后,又该如何快速确认任意两个元素之间的关系呢。由此引出并查集。 并查集简介 并查集最关键的表现就是一个集合中的每
阅读全文
摘要:[TOC] 简介 中缀表达式(正常的表达式) $$ (1+2) 3 4 $$ 前缀表达式(运算符位于操作数之前) $$ +1234 $$ 后缀表达式(运算符位于操作数之后) $$ 12+3 4 $$ 前缀表达式计算 从右向左遍历,遇到数字的时候,将数字入栈,遇到运算符的时候,弹出栈顶两个数字运算,将
阅读全文
摘要:[TOC] 算是一个为了课程内容服务的记录,关于算法和数据结构的内容,原本想着网上搜罗搜罗就能找到相对应的,干脆自己做个简略的个人记录。将学过的没学过的做个稍微的整理。 C++ 常用STL整理 容器和配接器 list(链表) list可以认为是一个线性的双向链表,具有链表的特性,不使用连续的内存空间
阅读全文

浙公网安备 33010602011771号