算法
文章平均质量分 54
Chopinaa
如果博客中有错误,还请大家多多指正啦~
展开
-
二叉树相关问题:二叉树的深度,通过前序遍历和中序遍历求出后序遍历
一、二叉树的深度我们通过递归求出树中以每个结点为根节点的左子树和右子树的最大深度。以下图为例从C结点开始,首先求C结点的左子树的深度,C结点的左子树的深度等于B结点的左子树的深度+1,这样层层递归,当递归到A结点时返回深度为1。右子树深度同理代码如下:#include<iostream>using namespace std;#define MAX 1000010struct Node{ int left; int right; };Node tree[MAX];原创 2021-06-10 10:08:06 · 737 阅读 · 1 评论 -
最短路径(三):SPFA算法
Bellman-Ford算法中每轮算操作都需要操作所有边忙着其中会有大量无意义的操作,严重影响算法的性能。仔细思考我们可以发现,只有当某个顶点u的dist[u]值改变时,从u出发的边的邻接点v的dist[v]值才会发生改变。因此可以对Bellman-Ford算法进行如下优化:建立一个队列,每次将队首顶点u取出,然后对从u出发的所有边进行松弛操作,判断dist[u]+weight[u][v]<dist[v]dist[u]+weight[u][v]<dist[v]dist[u]+weight[u]原创 2021-04-05 20:55:10 · 134 阅读 · 0 评论 -
最短路径(二):Bellman-Ford算法
Dijkstra算法可以很好地解决无负权图的最短路径问题,但是如果出现负权变,Dijkstra算法就会失效,如下图所示:A为源点时,首先会将B的dist值变为-1,并且B的访问值会改成True,之后将无法被从点C出发的边NB更新,因此dist[B]就是-1,但显然A到B的最短历经长度应该是-4。Bellman-Ford算法(BF算法)可以更好地解决有负权边地最短路径问题,但是无法解决负环问题显然零环和正环不会影响最短路径的求解,因为零环和正环的存在不会使最短路径更短,但是负环不然一. 算法思想B原创 2021-04-05 20:01:29 · 407 阅读 · 0 评论 -
最短距离(一):Dijkstra算法
一. 算法思想Dijkstra算法是按路径长度递增次序产生最短路径的算法。把图的顶点集V分为两组S:已求出最短路径的顶点的集合T=V-S:尚未确定最短路径的顶点集合把T中顶点按照最短路径递增的次序加入到S中,保证:从源点V0到S中各顶点的最短路径长度都不长于从V0到T中任何顶点的最短路径长度设置辅助数组dist[n]dist[n]dist[n],每个分量dist[k]dist[k]dist[k]表示当前所求得的从原点到其余各个顶点k的最短路径长度二.算法步骤设G[n][n原创 2021-04-03 15:18:26 · 2489 阅读 · 0 评论 -
各种排序算法对比
原创 2021-03-31 16:50:39 · 86 阅读 · 0 评论 -
算法期末复习——简述题
✔动态规划算法的主要步骤①找出最优解的性质,刻画其结构特征②递归地定义最优解③以自底向上的方式计算出最优解④根据计算最优值得到的信息构造最优解✔描述分治法的基本思想将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同:对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,递归进行下去直到问题规模足够小。将求出的小规模的问题的解合并为一个更大规模的问题的解,逐步求出原来的问题✔描述分治法的基本思想✔回溯法与分支限界法的差异求解目标不同:一般而言原创 2020-09-04 11:12:43 · 518 阅读 · 0 评论 -
分支限界法
一.基本概念1.问题状态:树上任意一个结点是一个状态结点2.状态空间:由根到其他状态的所有路径3.答案状态:满足约束的一个叶子结点对应一个解答4.状态空间树:表示状态空间的树5.活结点:一个自身已经生成但其儿子还没有全部生成的结点6.E-结点:一个正在产生儿子的结点7.死结点:一个所有儿子已经产生的结点二.搜索方法1.广度优先搜索2.深度优先搜索3.启发式搜索:从初始状态开始,每次选择最有可能达到终止状态的结点进行搜索分支限界法与回溯法的不同:1.搜索方式不同:回溯法以深度优先的方原创 2020-08-28 09:22:11 · 956 阅读 · 0 评论 -
回溯算法及典型例题
大多是使用回溯算法的题目都符合以下条件:输出可以看作一个n元组(x1,x2,…,xn),例如八皇后问题。元组需要满足一些约束条件。个人认为回溯算法和暴力法有很大的相似度,但是回溯算法会在每次构造解的过程中进行剪枝。整个选择过程可以构成一棵状态空间树,树的根可以代表查找解之前的初始状态。大多数情况下可以用DFS的方法来生成状态空间树。如果当前结点是有希望的,可以继续深度遍历,否则回溯到父母节点。首先来看一道经典例题一.八皇后问题1.问题描述在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击原创 2020-08-25 11:37:59 · 4552 阅读 · 0 评论 -
数据结构:图的存储结构和遍历
大一学的数据结构现在印象有点模糊了,于是想重新整理一下那些我用的还不是很熟练的数据结构目录图的邻接表1. 图的邻接表首先来看一下结构体定义#define MAX_VERTEX_NUM 10typedef struct EdgeNode{ //边表结点 int adjvex; //结点的索引 struct EdgeNode* next; //这条边指向的下一个顶点}Edg...原创 2020-03-26 10:24:04 · 539 阅读 · 0 评论 -
一.算法效率分析
一.算法的最优、最差和平均效率1.最优效率Big O把函数t(n)包含在O(g(n)),记作t(n)∈\in∈O(g(n));其成立条件为对于所有足够大的n,t(n)的上界由g(n)的常数倍确定,即存在大于0的常数c和非负的整数n0,使得:对于所有的n≥\geq≥n0,都有t(n)≤\leq≤cg(n)性质:O(kf(n))=O(f(n)),其中k为常量O(f(n))+O(g(n))=max(O(f(n)),O(g(n)))O(f(n))*O(g(n))O(f(n)*g(n))2.最差原创 2020-08-06 09:58:08 · 1452 阅读 · 0 评论