![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 74
数据结构与算法学习总结
code屋
目前正在学习算法、java等!
展开
-
十进制转其他进制
众所周知,十进制转其他进制使用的算法是除基取余法。代码描述就是:int z[50],cnt=0;do{ z[cnt++]=y%q; //转为q进制数 y/=q;}while(y!=0);这样z数组从高位z[num-1]到低位z[0]即为Q进制z。不使用while而使用do…while的原因:如果y恰好等于0,那么并没有把z[0]赋为0,且num也没有自加。因此确定y为正数的情况...原创 2020-04-28 09:34:37 · 909 阅读 · 0 评论 -
快速排序
1. 算法思想“分而治之”的思想。平均时间复杂度为O(nlogn),每次递归都使主元pivot左边的元素不超过它、右边的元素不小于它(即将其放置于它最终该在位置,这也是快速排序之所以快的原因)。其关键在于主元的选定和子集的划分。1.1 主元的选定(1) pivot=A[0],当A本身有序时,每次划分都有一个子集是空集,导致最终的时间复杂度为O(n2)(2) 随机取(使用rand函数),比...原创 2020-03-05 12:07:26 · 205 阅读 · 0 评论 -
BFS最短路径问题
前言由于BFS的逐层访问的性质,即从起点由近及远的访问,因此BFS算法常用于寻找最短路径。当然,只适合于解决一些比较简单的问题。模板BFS函数:const int maxn = 10000;int pre[maxn]; //pre[i]表示i的前一个结点(用于存储路径)bool inq[maxn];vector<int> adj[maxn]; unordered_ma...原创 2020-02-29 14:41:15 · 1863 阅读 · 0 评论 -
并查集
1.定义并查集,就是支持合并和查找操作的集合。实际中,都是用树结构(森林)来表示。2.实现最简单的实现方法就是使用数组,int father[n];。其中father[i]表示元素i的父亲结点,而父亲结点本身也是集合内的元素。有两种表示根节点的方式:(1) father[i]=-1;(2) father[i]=i;以下算法均使用第二种方式。3.基本操作1.初始化for(int...原创 2020-02-09 10:40:31 · 735 阅读 · 0 评论 -
搜索专题/DFS与BFS
注:以下讲解均以迷宫来形象的表述1.深度优先算法(DFS)1.1 概念是一种枚举所有完整路径以遍历所有情况的搜索方法。以迷宫为例,就是当碰到岔道口时,总是以“深度”为前进的关键字,不碰到死胡同就不回头。1.2 实现一般以递归方法实现,当然也可以用非递归的方法,不过需要使用栈,与递归算法本质相同。使用DFS解决问题要注意剪枝。对于“剪枝”不理解可以看:树相关结论1.3 应用主要...原创 2020-02-08 16:02:02 · 185 阅读 · 0 评论 -
树有关重要算法及结论
1.概念和性质1.1.树(1)树可以没有结点,这种情况树称为空树。(2)满足连通、边数等于顶点数减1的结构一定是一棵树。(3)当树只有一个结点(即根节点)时,根结点也算叶子结点。1.2.完全二叉树(complete binary tree) 概念:除最下面一层,其余层都达到最大结点数,最下面一层从左到右存在若干结点。特殊情况:满二叉树(full binary tree)——各层都达...原创 2020-02-07 20:18:55 · 777 阅读 · 0 评论 -
最短路径之Dijkstra算法详解
“迪杰斯特拉算法”,解决单源最短路问题,即给定图G和起点s,计算s到达其他每个顶点的最短距离的问题。原创 2020-01-27 15:35:20 · 954 阅读 · 0 评论 -
堆与堆排序
文章目录概念建堆算法思路代码堆排序算法思路代码概念堆是一颗完全二叉树,树中每个结点的值都不小于(大顶堆)或不小于(小顶堆)其左右孩子结点的值,堆一般用于优先队列的实现,而优先队列默认情况下使用大顶堆,因此大顶堆使用得较多,因此以下均讨论大顶堆。建堆算法思路@建堆使用向下调整的方法:总是将当前结点V与其子结点比较(如果有),若孩子中存在权值比V权值大的,就将其中权值较大的孩子与V交换...原创 2020-02-03 21:53:18 · 164 阅读 · 0 评论 -
动态规划
动态规划是算法中一个重要而高效的算法,就自己学习和理解整理了这个笔记原创 2020-02-03 11:26:37 · 511 阅读 · 0 评论