![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 90
angry ant
GISer一名,希望志同道合的朋友有问题一起来讨论,相互学习
展开
-
最短路径算法
应用场景: 狄克斯特拉用于解决单源最短路径问题,即从图中的某一节点出发到任一节点的最短路径。yue'shu原创 2021-06-15 09:16:15 · 1307 阅读 · 0 评论 -
算法学习之--最小生成树(Prim)
1.应用场景: 上一篇博客学习了图论基础https://blog.csdn.net/j_oop/article/details/108018641介绍了无权图的算法实现以及路径计算获取,在实际生产场景中带权图往往更接近实际需求。最小生成树解决的是在n个顶点中找到n-1条边使得所有顶点全部连通并且n-1条边的权重之和最小(针对无向图)。2.带权图的算法实现 上一篇博客介绍了在稠密图中,我们使用一个n*n(n为顶点数)的邻接矩阵(二维bool数组)mp_graph存储顶点之间的连接关系,mp_g..原创 2020-09-07 15:54:58 · 237 阅读 · 0 评论 -
算法学习之--图论基础
1.图论基础: 一个图由顶点集(V)和边集(E)组成,每一条边就是一个点对(v,w),其中。如果点对是有序的(即v,w与w,v不同),那么图就是有向图,否则称作无向图(无向图是特殊的有向图)。如果在边集中允许出现(w,w)这种一个顶点的点对,这种边称为自环边。如果边集中允许出现多组相同的点对,这样的边称为平行边。2.图的表示 图的表示实际上就是对图中边的存储,每条边由两个顶点组成 (1)邻接矩阵:假设图中有n个顶点,那么图中的边有(n*n)种可能,使用n*n的二维矩阵(bool[][...原创 2020-08-25 13:09:21 · 333 阅读 · 0 评论 -
算法学习之--并查集
1.应用场景: 并查集用于解决连接类问题,判断网络中节点间的连接状态。与路径类问题相比,并查集只回答了节点之间是否连通,而具体的连通路径并不能确定,因此并查集非常高效。原创 2020-08-09 17:03:20 · 132 阅读 · 0 评论 -
算法学习之---二分搜索树
1.应用场景: 二分搜索树解决的是查找类问题,在数据有序的基础上,二分搜索树的查找效率为O(logN)。2.二分搜索树: 是一个二叉树,满足条件1.所有节点的值大于其左子节值点小于其右子节点值;2.所有节点的值大于其左子树所有节点值,小于右子树所有节点值。3.算法实现: 下面代码实现了二分搜索树的插入,删除,遍历(前序、中序、后续、广度优先),查找等操作/*************************************************************...原创 2020-07-24 00:26:46 · 602 阅读 · 0 评论 -
算法学习之--最大堆与索引堆
最大堆 数据结构上,最大堆是一种特殊的完全二叉树(父节点的值一定大于子节点,也叫最大完全二叉树),在本算法实现中将二叉树从上至下从左至右进行编号(索引从1开始,为了方便计算叶子节点索引值),根据编号顺序将元素值存入数组。 算法实现如下,关键点在于二叉树节点索引值的维护和#pragma once#include <cassert>#include "SortTestHelper.h"/*******************************************...原创 2020-07-14 18:35:05 · 193 阅读 · 0 评论 -
算法学习之--进阶排序算法(时间复杂度O(nlogn))
1.归并排序 基本思想:不断的将数据进行二分(逻辑上的二分,即将数组元素索引分块,并不是真的把数组内存进行二分),当二分到只有一个数组元素时开始归并,数组的每一个元素由其二分后数组的两个元素进行比较确定:首先进行二分:二分到第三层数组中仅有一个元素(即数组有序),然后开始向上进行归并:第二层左边的数组 [ 0 ] 位置元素由其二分后数组元素比较得出,显然应该是3,那么 [ 1 ]位置就是6,同理第二层右边数组归并后是1,4。再次向上归并,第一层数组[0]位置由其二分数组【3,6】【1,4..原创 2020-06-13 23:52:52 · 808 阅读 · 0 评论 -
算法学习之-编写测试用例
我们在测试算法性能时,用到最多的是使用生成的随机数组进行测试,比较简单但还是有几个需要注意的地方,下面先给出代码:#include <ctime>#include <iostream>#include <cassert>//生成[min,max]范围内的size个随机数的数组static int* generateTestArr(int size,int min,int max){ assert(min<=max); int * arr =原创 2020-05-28 13:49:42 · 1511 阅读 · 0 评论 -
算法学习之-基本排序算法(时间复杂度O(n^2))
选择排序的基本逻辑是:从0开始遍历选出最大值与0位交换,从1开始遍历再次选出最大值与1交换........,下面是代码,使用模板方法实现且增加了如何对自定以类进行排序#include "stdafx.h"#include <iostream>#include <string>using namespace std;///选择排序,每次循环选出最大值,依次放到数组的[0][1][2]....中template <class T>void selecti原创 2020-05-27 13:57:06 · 301 阅读 · 0 评论