![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
Novicee
遇到大事物,大问题,要多看,多思考。
展开
-
数据结构总结
原创 2022-01-19 12:23:55 · 285 阅读 · 1 评论 -
查找算法总结
二分查找(对有序序列进行查找),快速查找(由快排演进而来)原创 2022-01-18 22:35:19 · 661 阅读 · 0 评论 -
利用正态分布中三西格玛原理检查坏值
有一组数据(a1,a2,a3…an)均值 μ方差 σ²如果数据落在(μ-3σ, μ+3σ)中即为好值,否则为坏值。原创 2021-04-21 10:21:07 · 1444 阅读 · 0 评论 -
算法复杂度分析
参考博客原创 2020-11-04 12:46:23 · 100 阅读 · 0 评论 -
最优算法的寻找方法
对于自然界的一个算法,由决定性步骤所规定的算法所需要的最低时间开销是一个算法的下界。由一个特定的针对某一问题而提出的算法,经过分析得到的时间复杂度是一个算法的上界。要证明一个算法是最优算法,就要证明这个算法运行在最坏情况下的时间复杂度与算法下界在同一个数量级上。算法的平均运行情况与其下界相等是不能证明此算法是最优算法的。...原创 2020-10-31 12:19:13 · 1493 阅读 · 0 评论 -
二分查找
The purpose of the algorithm is to find the index of the given key in the array.public static int binarySearch(int[] a, int key) { int lo = 0, hi = a.length-1; while (lo <= hi) { int mid = lo + (hi - lo) / 2; if (key < a[mid]) hi = mid原创 2020-10-30 19:08:53 · 68 阅读 · 0 评论 -
对递归的深刻理解
转载大佬的一篇文章:递归递归当然只能以递归的思路理解,把它展开纯属自讨苦吃。递归思路,说白了是如下三步:1、对于问题N,如果N-1已经解决了,那么N是否很容易解决。甲:想上天?你先给我找个天一样高的梯子!乙:想要天一样高的梯子?你先给我弄棵天一样高的树!甲:想要天一样高的树?你先给我弄把能顶到天的锯子!……举例来说,如果要把一个N层汉诺塔从A搬到C,那么:如果前N-1层可以找别人搞定,咱只管搬第N层,会不会变得非常容易?你看,这一下就简单了:这时当它只有两层就好了,先把前N-1层看作一个整体,把它搬到B转载 2020-09-09 13:28:21 · 124 阅读 · 0 评论 -
KMP模式匹配算法(回顾)
1.原始的暴力匹配public static int SubString(String s, int pos, String subString) { //s 原字符串 //pos 查找的起始位置 //subString 查找的子字符串 //当查找到第一个匹配的子串的时候,返回第一个字符在原字符串中的 //位置 int i = pos, j = 0; //当两个坐标都不超过各自串的长度的时候进行循环遍历 //若原字符串到头了,或者是子字符串到头了,原创 2020-08-28 02:44:19 · 118 阅读 · 0 评论 -
如何快速理解最大流和最小割
这篇文章从割从哪来逐渐过渡到和最大流和最小割之间的等价关系的阐述。1.问题引入1.1思考这样一个问题:在给定的图中,如何判断一个源点s到终点t是否有路径存在呢?我们首先想到的是用BFS或者是DFS算法对图进行遍历,如果可以返回一条从源点s到终点t的路径,那么就说明在图中是存在从s到t的路径的。但是如何证明当DFS或者BFS返回不了这样一条路径的时候,就不存在s到t的路径了呢?这证明起来就有点困难。我们不妨这样想:将所有的可能的s到t的路径全部都列出来:如:s,a,ts,a,b,ts,a,b原创 2020-06-27 11:39:29 · 3141 阅读 · 1 评论 -
Prim算法下的最小生成树详细解答
1.最小生成树和最短路径之间的区别拿Dijkstra最短路径算法距离,它求的是单源点到其他点的最短路径。而最小生成树则求的是一个集合到另一个集合之间的最短距离,最小生成树是从全局考虑的代价最小,适用于铺设电缆线,或者是家庭排布电线等问题。2.Prim算法的思想step 1:Prim算法选一个任意的起始点作为当前我们集合中的点,并把这个点从图中剔去。可以用visited[i] = 1来描述step 2:从当前点出发,将与当前点有相连的边的值都弄个dist[]数组中。dist[i]就代表你当前点距离i原创 2020-06-25 10:59:03 · 739 阅读 · 0 评论 -
用Kruskal算法实现图的分簇
问题:用Floyd算法将给定的图(9个节点的连通图)分成三个簇1.什么是分簇?分簇:将一个图分成很多个子图,但是有要求。分簇要求:每个子图的含有的节点之间一定是最大密度的。也就是说,每个子图是最小生成树的一部分。2.实现方法使用Floyd最小生成树算法来实现:step 1:将所给的边按权值由小到大的排序。step 2:设置一个下标为节点的数组visited来表示并查集。数组初始化时,按每个位置的下标赋值,保证每个节点都不在同一集合内。step 3:对所有排好序的边,如果这边的两端节点所在的原创 2020-06-26 10:16:27 · 1336 阅读 · 0 评论 -
floyd最短路径算法简单的很。。
1.算法适应情况弗洛伊德最短路径算法是应用在n-n点找最短路径的算法。也就是如果你对全局来找最短路径的话,那么用这个算法是比把Dijkstra和Bellma-Ford算法循环n次要好的。2.算法伪代码//dist[][]是图的临接矩阵for(int k=0; k<n; k++) for(int i=0; i<n; i++) for(int j=0; j<n; j++) { if(dist[i][j] > dist[i][k] + dist[k][j])原创 2020-06-24 09:52:22 · 198 阅读 · 0 评论 -
最短路径算法概念小结
1.不能处理具有负权值边的图,因为负数和一个数相加会让结果更小,那么算法就会一直执行下去。2.如果一个图没有权值之和为负数的环存在,那么这个图还是有最短路径的。(只是不能用Dijkstra算法求了)...转载 2020-06-22 14:19:24 · 329 阅读 · 0 评论 -
Dijkstra最短路径算法详细解答
1.1 Dijkstra_shortest_pathwe assume that :the source vertex is s and the visited set is Sthe current shortest path is dist[]the label array is visited[]the common code thoughts(代码思想) are as follows://initilize the visited array(which means we had a原创 2020-06-22 14:16:15 · 418 阅读 · 0 评论 -
bellman-ford最短路径算法
1.算法适用情况1.1 这个算法适用于图中有负权值的边的最短路径的计算2.2 这个算法可以用来判断图中是否有总权值为负的环存在2.算法思想2.1 算法是对图中的边集进行操作的,这和Dijkstra算法不同2.2 算法是从源节点来进行广度搜索并完成最小生成树的建立的2.3 算法需要执行|V|-1次的大循环,以此来确保找到|V|-1个最短路径。每个循环中是对所有边的一个小循环操作。因此时间复杂度为O(|V|*|E|)。注意每次大循环必定会找到大于等于一个节点的最短路径,这一点深究可以去看看其他文章。原创 2020-06-22 11:14:21 · 472 阅读 · 0 评论 -
多边形对角线交点个数
凸N边形的对角线条数为:n(n-3)/2因为每一个交点对应两条对角线,而两条对角线又对应着一个四边形.于是焦点个数就对应四边形的个数.问题转化成由凸n边形的n个顶点取4个顶点可组成多少个四边形的问题,故最多共有n(n-1)(n-2)(n-3)/24个交点....原创 2020-06-20 22:45:53 · 6472 阅读 · 0 评论