数据结构
CallMeJiaGu
个人博客:https://www.callmejiagu.com/
展开
-
Algorithm 最小生成树 prime算法
简单的prime 算法 主要的就是三个部分。一 用dist来记录值,二 找dist 里的最小值,三 更新dist里的值。所以要写prime算法 要抓住这三个点来写,就能减少错误。(visit用来标记,在判断条件的时候不要忘了)#include#include#define INT_MAX 1000000#define MAXN 100int visit[MAXN] ;int m原创 2014-07-31 09:03:24 · 696 阅读 · 0 评论 -
Algorithm 最短路径之 floyd (适用于 多点距离)
#include#include#include#include#includeusing namespace std ;#define MAXN 1000#define INF 1000000int map[MAXN][MAXN] ;int visit[MAXN] ;int pre[MAXN] ;int dist[MAXN] ;int path[MAXN] ;in原创 2014-07-31 09:04:38 · 674 阅读 · 0 评论 -
Algorithm 最短路径之 Dijkstra的优化
Dijkstra算法利用了优先队列,也用到了静态邻接表。主要也是有两部分组成。一: 当然是初始化。将dist和pre分别赋值 ,然后输入各条边的信息,存储在静态邻接表中 。二: 中Dijkstra中 将Q.push(temp) .然后利用for(i = pre[nod] ; i != -1 ;i = edge[i].next )将每条与temp有关联的边进行遍历。能松弛的点push到Q中。详细看下原创 2014-07-31 09:04:53 · 523 阅读 · 0 评论 -
Algorithm 最短路径算法ford
看了看最短路径的ford算法,刚看时并没有看懂,我一直想不明白的是在迭代的过程中,每一次都要把每条边,进行松弛(就是判断dist[i]与dist[v]+w[v][i]的情况),我开始的认为是只需要一次的迭代就可以解决的,为什么需要n-1次呢,而且有那么一句话是这样说的,第一次迭代是把将与V0有连接的第一层得到最小值,第二次是将距离V0两条边的点求出来。。。其实在if(dis[edge[原创 2014-07-31 09:10:28 · 588 阅读 · 0 评论 -
Algorithm 优先队列来处理的 最短路径
看了好久终于看懂了 ,首先你要知道 优先队列在这里的作用是什么。在Djsktra的算法中 我们需要有三个for其中有个for是要找到 连接中最小的点 并且返回该点 ,这里的优先队列把这个for循环替掉。/*typedef pair pii;priority_queue q; 这个优先队列是根据 pair中的first来 从小到大排的。这里的pair中的first的值就是dist 所原创 2014-07-31 09:11:14 · 594 阅读 · 0 评论 -
Algorithm 最短路径之 SPFA
SPFA 是ford算法的优化版。 这个算法 需要用到一个静态的邻接表,还有一个队列。主要有三部分 一:Aadedge需要把边以静态邻接表的形式保存下来 。二:inti 初始化 。在初始化的过程中 要把pre【】=== -1,dist【】=== INF。然后输入边的信息。调用Addedge(x , y ,w).。三:SPFA 这个过程 一开始的时候将start 1 push(1)。通过(j原创 2014-07-31 09:11:16 · 456 阅读 · 0 评论 -
Algorithm 并查集的 路径压缩(递归和非递归)
这里的思路是在每一次的找父亲节点的时候我们把每一个孩子的父亲的改成他的祖先。因为有可能一个孩子的关系很复杂可能就是一条链,这样查找就没浪费时间。这是简单find (int x){ while(x!=father[x]) father[x] = find(father[x]) ; return father[x] ;}//这是非递归的find (int x){ i原创 2014-07-31 09:15:41 · 1377 阅读 · 0 评论 -
Algorithm 最短路径 简单的代码
看了这些代码之后 总结了一下 其实就那三个for 循环 一:找与v有连接的点 。二:从这些连接的点找到最小,把他看成是下一次的v 。 三: 你要把有出现的那些边 更新掉。 详解在代码里写出了 #include#include#includeusing namespace std ;#define N 100#define M 100typedef struct no原创 2014-07-31 09:16:04 · 460 阅读 · 0 评论 -
Algorithm 最小生成树之 Kruskal
个人观点,较prime算法,Kurskal算法更加的简单,这里我们只需要每一次去需找权值最小的那条边就好,在这里我们先可以利用sort进行快排,得到权值最小的map[i] 。 得到该条边的两个节点map[i].u 和map[i].v,这时候你需要判断能不能用这条边,因为最小生成树是不能形成回路,所以用到了 并查集的方法,可以快速的判断这两个点是否满足条件。如果不存在关系那么那么就把这条边加入,反之原创 2014-07-31 09:00:39 · 515 阅读 · 0 评论 -
Algorithm 静态邻接表
邻接表可以理解成 现在有一个pre的数组其中 pre【1】就是1这个节点最后出现在那条边上,如果是为3 ,那么edge【3】中 也有与1这个邻接的点 和权值,并且还有一个edge【3】.next这个东西,这个东西是表示1在三条边之前还在哪里,一直的找,之到第一条关于1的边上为止,这时候edge的next的值是-1表示它没有上面的边了,这个就是他最开始放的边。这种储存的方法,可以减少内存的空间原创 2014-07-31 09:36:37 · 428 阅读 · 0 评论 -
Algorithm 建二插树的时候结点链接的问题
(1)方法建树 void insert(node* ptr_node , int data){//插入节点 node* temp_node = new node ; if(head_flag){ ptr_node->value = data ; head_flag = 0 ; }else{ while(ptr_node){ temp_node = ptr_node原创 2015-01-14 16:18:41 · 723 阅读 · 0 评论 -
数据库 隔离
本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性:⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响转载 2017-03-19 15:54:29 · 559 阅读 · 2 评论 -
Algorithm 关键路径算法 PAT How Long Does It Take (25)
#include#include#include#include#includeusing namespace std ;#define MAXN 100 int map[MAXN][MAXN] ;int in_cout[MAXN] ;int e_time[MAXN] ;int arry[MAXN] ;int n , e , n_s = 1 ,sum ;int max(原创 2015-01-22 16:40:23 · 1546 阅读 · 0 评论 -
Algorithm 并查集的粗劣想法(易懂)
这里我自己说一下我自己学的感受吧 。int findset(int a) //不带路劲压缩 { while(pa[a] != a) { a = pa[a]; } return a; } void union_nodes(int a, int b) //集合合并 {原创 2014-07-31 09:17:24 · 573 阅读 · 0 评论