上一页 1 ··· 4 5 6 7 8 9 10 下一页
摘要: 1.插入排序 void insert_sort(int a[], int n) { for (int i = 1; i < n; i++) { int temp = a[i], j = i-1; for (int j = i - 1; a[j]>temp&&j>=0; j--) a[j+1] = a 阅读全文
posted @ 2019-06-25 20:02 sparkyen 阅读(233) 评论(0) 推荐(1) 编辑
摘要: 由于马上要考电路了,而且学物联网就很烦,不知道到底要主攻哪个方向比较好,乱七八糟。 先给出几篇宝藏博客,之后的有时间再补上 https://blog.csdn.net/wangwangbu/article/details/51453084 https://www.cnblogs.com/yyf030 阅读全文
posted @ 2019-06-08 12:23 sparkyen 阅读(140) 评论(0) 推荐(1) 编辑
摘要: RMQ算法,是一个快速求区间最值的离线算法,预处理时间复杂度O(n*log(n))查询O(1),所以是一个很快速的算法,当然这个问题用线段树同样能够解决。 问题:给出n个数ai,让你快速查询某个区间的的最值。 算法分析: (1)预处理 这个算法就是基于DP和位运算符,我们用 dp[i][j] 表示从 阅读全文
posted @ 2019-05-31 15:12 sparkyen 阅读(158) 评论(0) 推荐(1) 编辑
摘要: 非负权单源最短路 描述 给一个n( 1 <= n <= 2500 )个点,m条边( 1 <= m <= 6200 ) 的无向图,求s到t的最短路。 输入 第一行四个由空格隔开的整数 n、m、s、t。之后的m行,每行三个正整数 s[i]、t[i]、wi,表示一条从s[i]到t[i]长度为w[i]的边。 阅读全文
posted @ 2019-05-23 22:18 sparkyen 阅读(252) 评论(0) 推荐(1) 编辑
摘要: 我们用DP来求解任意两点间的最短路问题 首先定义状态:d[k][i][k]表示使用顶点1~k,i,j的情况下,i到j的最短路径 (d[0][i][j]表示只使用i和j,因此d[0][i][j] = cost[i][j]) 状态转移方程:d[k][i][j] = min ( d[k-1][i][k], 阅读全文
posted @ 2019-05-23 21:08 sparkyen 阅读(262) 评论(0) 推荐(1) 编辑
摘要: 根据之前最短路径算法里提到的,我们只要放松所有边直到其全部失效就可以得到最短路径 注意:图中不能有负圈。否则当负圈中某个点经过这个负圈的所有边的松弛操作后,这个点的的d[i]就会减小,此时会发现它可以通过这个负圈的松弛操作不断使它自身不断变小。对于存在负圈的图,最短路无意义 由于是有关边的算法,并且 阅读全文
posted @ 2019-05-21 21:44 sparkyen 阅读(2403) 评论(2) 推荐(1) 编辑
摘要: 算法的核心思想:在尚未使用的顶点中,d[i]最小的顶点就是最短距离已经确定的顶点 解释:以图1-1为例,假设A,B,C已经被标记,则剩下的点可以认为经过A,B,C三点的松弛操作(看通过这个点作为中转站会不会使得其他点离起点更近)。 那么在被标记的顶点中,找出d[i]最小的顶点,就可以认为它就是最短距 阅读全文
posted @ 2019-05-21 20:39 sparkyen 阅读(210) 评论(0) 推荐(1) 编辑
摘要: 怀着复杂的心情来写这篇博客,有关图论的算法我看的有点头疼。 主要是实现起来没有那么困难,但是不像之前的那些算法,大致看一下就知道为什么,图论要看懂原理和正确性还是有点困难的,太耗时间而且烧脑了。 完全严格弄懂这个我估计够呛,下面给出基本思路,特别感谢《算法》这本书 边的松弛 边的松弛操作,定义如下: 阅读全文
posted @ 2019-05-21 20:11 sparkyen 阅读(207) 评论(0) 推荐(1) 编辑
摘要: 阅读全文
posted @ 2019-05-11 11:06 sparkyen 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 1.求二叉树中叶子节点的个数(并打印) 设该树中的叶子数为n0个.该树中的总结点数为n个,则有: n=n0+n1+n2+…+nK (1) n-1=0*n0+1*n1+2*n2+…+K*nK (2) 联立(1)(2)方程组可得:叶子数为:n0=1+0*n1+1*n2+2*n3+...+(K-1)*nK 阅读全文
posted @ 2019-05-07 14:13 sparkyen 阅读(545) 评论(0) 推荐(1) 编辑
摘要: 二叉搜索树是能够高效进行如下操作的数据结构: #插入一个数值 #查询是否包含某个数值 #删除某个数值 二叉搜索树能够高效地管理数的集合。 其上的所有节点,都满足左子树上的所有节点都比自己的小,而右子树上的所有节点都比自己大的这一条件 下面是二叉搜索树的一种实现方法 struct node { int 阅读全文
posted @ 2019-05-06 22:16 sparkyen 阅读(189) 评论(0) 推荐(2) 编辑
摘要: 二叉树是每个节点最多有两个子树的树结构,遍历方法有深度优先(包括:先序、中序、后序遍历)和宽度优先(层序遍历),层序遍历通过队列可以实现。 这里主要介绍深度优先遍历的方法以及其中栈的应用,帮助理解二叉树的结构、递归和非递归中栈的应用。 中序遍历:左子树 > 根结点 > 右子树(先访问左子树,再访问根 阅读全文
posted @ 2019-05-05 22:02 sparkyen 阅读(217) 评论(0) 推荐(1) 编辑
摘要: 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? Input 测试输入包含若干测试用例。每个测试用例的第1行给出两个正整 阅读全文
posted @ 2019-04-22 20:56 sparkyen 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 查集就是维护了几个动态的集合,集合中的每一个元素都标记了一个父节点,同一个集合的代表是相同的。当一个元素的父节点就是他本身时,它就是该集合的代表。 并查集有三种操作: 1. init(n):用于初始化集合,将每个元素的父节点设置为他本身。即表示当前一个元素为一个集合,互相没有联系 2. find(x 阅读全文
posted @ 2019-04-22 20:33 sparkyen 阅读(196) 评论(0) 推荐(1) 编辑
摘要: 之前因为各种原因没看数学相关问题,这回牛客网44练习赛打完或回头来看发现还是要看一下才行,不然有点摸不着头脑 1.素数判定 给定正整数n,请判断n是不是素数 bool is_prime(ll n) { for (int i = 2; i*i <= n; i++) if (n%i==0) return 阅读全文
posted @ 2019-04-21 16:46 sparkyen 阅读(245) 评论(0) 推荐(1) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 下一页