
算法
文章平均质量分 74
算法
INVinci_BY
微信公众号:你好不吃虾
发布AI最新咨询【大模型方向】
展开
-
Kruskal理解+代码解析
从边的角度求网的最小生成树,时间复杂度为 O(eloge)。和普里姆算法相反,更适合于求边稀疏的网的最小生成树。算法核心: 将所有边由小到大排序,从最小的取边,每次取边判断边两端的点能否是其构成回路,如果能构成回路,则继续下一条(即该条边不取)。直到n个顶点取完n-1条边。判断是否构成回路就需要运用并查集并查集是将有关联的元素放入一个集合的东西,我们借此来判断是否成环。这里采用的是无权并查集使用父亲结点,即P[i]=j;表示i的父亲结点为j;初始化时,将每个结点都指向自己;我们在取原创 2021-06-10 11:40:26 · 722 阅读 · 0 评论 -
剑指offer 笔记->拓展 (持续更新)
目录二维数组中的查找vector< vector< int> >Q;对于vertor替换成二维数组的使用替换空格string 用法从尾到头打印链表逆转链表vector添加二维数组中的查找vector< vector< int> >Q; 这里int>和>之间一定要有空格;对于vertor替换成二维数组的使用 我们知道二维数组有行和列,即a[ h ][ L ]; 在vector里,a[ h ] 相当于 Q[ Q.size()-1原创 2021-06-01 16:26:34 · 449 阅读 · 0 评论 -
剑指offer——重构二叉树-从小白到大白
这个题我们还得先去理解题意什么是重构二叉树? 我们依据已知条件去重新构造二叉树,这里重新构造,不是要你改变原有的树的构造,而是根据给的东西把树写出来,即遍历的逆过程。 所以我们重构二叉树一般有三种情况: 已知前序遍历和中序遍历 已知前序遍历和后序遍历 已知中序遍历和后序遍历 最后一种有点复杂怎么求?要依据三种遍历的原理来逆推:前序:根 —— 左子树 —— 右子树中序:左子树 —— 根 —— 右子树后续:左子树 —— 右子树 —— 根我们知道要构造一棵树,我们原创 2021-06-02 15:48:19 · 414 阅读 · 0 评论 -
快速幂与矩阵快速幂(代码分析)
快速幂 我们都知道3156,如果普通求解,就是一个for循环,一直循环156次,如果我们把156分开,即: 156(10)=10011100(2) <把156十进制转化为二进制> 这里156=22+23+24+27=b 所以3156=3b=3^ (22) * 3(23^) * 3^ (24) * 3^ (27) 那我们如何用代码表示呢?执行代码:ll Mul(int a,int b,int mod){ ll ans=1; while(b) {原创 2021-05-28 09:21:55 · 491 阅读 · 0 评论 -
STL中Map与二叉树的关联及拓展
管理元素集合的STL容器大致分为两类。一类是有顺序的集合,称为序列式容器;另一类是经过排序的集合,称为关联式容器。目录一,概念上理解1.Map在STL中2.Map与二叉树的概念重合二,代码演示理解1, 二叉树演示(1)struct构造(带指针)(2)struct构造(不带指针)一,概念上理解1.Map在STL中Map是STL 的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有...原创 2021-04-28 10:38:19 · 602 阅读 · 0 评论 -
KMP算法学习(详细解读&重点分析next[]在kmp中的原因)
在百度词条里找到了这个,感觉还是不是很好理解。我们知道KMP是在BF算法上面改进而来的,BF通过一遍遍的对比,算法复杂度最大为(n*m)最小为(m+n),而KMP可以直接把算法复杂度控制在(m+n)。同样是对比,KMP优势就在于不是一个个去对比,而是在对比之后能够直接跳转到对应的跳转位置。假如我们现在需要的主数组a为:abababababca (i控制)而子数组为b:abababca (j控制),在第一次对比不符合时,KMP可以选择i跳到第四个出现的a上,而不是第一个a后面的b。这样就能在主函数大.原创 2021-04-07 23:50:39 · 668 阅读 · 2 评论 -
洛谷P1757 通天之分组背包超级巨细详解 && DP入门
一,了解DP 解决多阶段决策最优化问题的方法 把所给求解问题的过程恰当地分成若干个相互联系的阶段这个过程有点像分治法,但是不同于分治的是,分治是将问题分为子问题再逐个求解,而动态规划是将问题考虑当前情况再依次判断相关有联系的阶段,有点像树的结构。用最简单的背包问题举例:题:A有一个最大承重量为m的书包,一共有n个物品,分别的重量和价值为a,b,请问A能拿的最大价值是多少?例如: m=8序号 1 2 3 4重量 4 3 3 5价值 7 1 8 2初始值dp[1][8]从1开始,原创 2021-03-15 19:56:32 · 991 阅读 · 1 评论 -
搜索算法(迷宫问题)
搜索算法盼来盼去终于又要开始学习算法了!笔者自学算法,所以学习顺序以个人舒服的形式!一,DFS(深搜)用例子来看:问题:有一个迷宫,以1 2形式来表示————1表示是空地,即可以行走,2表示是障碍物,即无法通行。该迷宫由一个矩阵形式表示。即1 1 2 11 1 1 11 1 2 11 2 1 11 1 1 2有终点和起点,我们需要计算从起点到达终点的最短路径!准备代码为int q,p,step;//(p,q)为终点坐标 int mmin=9原创 2021-03-08 20:29:47 · 2589 阅读 · 5 评论 -
贪心算法(包含配套题目)已更:背包问题,不相交区间选择问题,Elephant,Packets,Minimize the Permutation,Car
一、算法概要主要是强调当前这个状态,从这个状态里寻找最优解,从而得出最终解。同时也引出了运用此算法的条件(前提):如何判断一道题是否需要此算法,我们需要去证明从每个子集中解能够得出最优解(即最终解)。此外,关于子集解的划分求,一种方式可以从数据入手,在数据中寻找特殊数据,如最大值最小值,起始值等。二、从具体例子中体现1.背包(含价值)问题问题概述:现存n个物体,其中每个物体重量为Wi,每个物体的价值为Pi,在总质量不超过C的情况下尽可能使总价值高。每个物品可取部分。输入:n Cw1 p1原创 2021-01-25 23:53:11 · 286 阅读 · 0 评论 -
归并排序——C/C++(简单理解)
归并排序——C/C++(从简单方面理解)此文一方面为主观理解归并排序,若有地方不妥,还请见谅。 一、归并的含义归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。二、分析1.初步理解归并排序相当于将一组数据拆分为几组数据;例如将a[6]={4,5,9,7,6,2},可以拆分原创 2021-01-14 22:50:32 · 365 阅读 · 0 评论