算法模板
文章平均质量分 92
一天无聊
这个作者很懒,什么都没留下…
展开
-
蓝桥杯算法模板(自用)
1、万能头文件#include <bits/stdc++.h>2、进制间的转换1、十进制转 n 进制短除法string str = "";int number = 2020;while(number){ str += number%n; number /= n;}最后要将结果倒序2、n 进制转换其他十进制n进制的数值每个位数的数 * n ^ (根据所在的位置,小数点往左从 0 开始) 的累加和3、利用stringstream进行类型转换1、int 转 strin原创 2020-10-08 11:17:32 · 4239 阅读 · 6 评论 -
快速幂模板(带注释)
#include <bits/stdc++.h> using namespace std;/*快速幂最佳优化模板 参数1:底数参数2: 指数 */ long long fastPower(long long base, long long power){ long long result = 1; //结果 while(power > 0) //指数 ,如果指数不等于 0 继续执行 { if(power&1) //使用位运算判断奇偶可以缩短时间原创 2020-10-08 10:28:18 · 159 阅读 · 0 评论 -
刷题:知识点
记录刷题过程中遗忘的知识点1、结构体 struct (结点)C++// 补充知识点:结构体 struct //C++ 语言中结构体的两种使用方法// 1、不带tyepdefstruct Str{ int a = 1; int b;} Str1; //Str1是结构体 Str 的一个变量,可以直接使用 Str.a // 2、带tyepdeftypedef struct type { int a = 2; int b; } Type1; //Type1是一个别名,需要声明一个原创 2020-07-28 16:32:52 · 302 阅读 · 0 评论 -
最小生成树之二:Kruskal算法
Kruskal算法(并查集+QuickSort)概述kruskal算法主要是根据贪心算法和并查集算法结合实现的。贪心策略在所有边中选择权值最小的边。条件所选择的边所在的点不能是树中的结点(不能形成回路,根据并查集实现)思路每次选择最小的边,直到所有的点连成树。步骤整个代码由三大部分组成:1、初始化2、排序3、选择加入Kruskal算法与 Prim算法的区别:贪心策略不同,Kruskal算法是在所有边中选择最小的边,Prim算法是在与已经连接的结点相邻的结点中选择最小的边。P原创 2020-06-07 16:12:30 · 209 阅读 · 0 评论 -
最小生成树之一:Prim算法
Prim算法概述最小生成树是指树结点的权值之和最小。Prim算法是根据贪心法的思想实现的。贪心策略从相邻结点中选择最小权重的结点思路思路:首先选择跟结点,初始化根结点到各结点的距离( El),将与最小权值的结点进行连接。其次,判断加入新的结点后已连接结点到未连接结点的最小权值是否发生变化,更新最小权值最后,重复上述过程直到所有结点都已经连接。补充知识点// 补充知识点:结构体 struct //C++ 语言中结构体的两种使用方法// 1、不带tyepdefstruct Str{原创 2020-06-06 16:16:25 · 279 阅读 · 0 评论 -
我的斐波那契数组算法总结
斐波那契算法模板介绍斐波那契问题来源于兔子繁殖问题。兔子繁殖问题:假设小兔子长大需要一年的时间,成年的兔子每年可以生一只小兔子。问:如果第一年有一只小兔子,那么 n 年后一共有多少只兔子。{1,1,2,3,5,8,13…}根据题目就可以找到规律:从第三年开始,往后每年的兔子数 = 去年兔子数 + 前年兔子数即 f(n) = f(n-1) + f(n-2)三种解法第一种:经典求法(递归法):时间复杂度最高:O(2^n)算法很简单,只需要不断的使用递归(从高到低)就行,但是时间复杂度非常高,原创 2020-06-05 09:54:26 · 185 阅读 · 0 评论 -
我的贪心算法总结
贪心算法(贪婪算法)概述贪心算法是将一个复杂问题分解成一系列简单的局部最优选择,每一步选择都是对当前解的扩展,直到获得问题的完整解。贪心选择只是某种意义上的局部最优解,但是有时候这种局部最优解并不是总能获得整体最优解,但即使不能获得整体最优解也能获得近似最优解。贪心的设计思想贪心算法主要体现在一个“贪”。在解决问题的策略上目光短浅,只根据当前已有的信息做出选择。而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。思路1、找到最优贪心策略(关键)2、证明贪心策略贪心算法的选择使用贪心原创 2020-06-03 10:17:47 · 641 阅读 · 0 评论 -
Dijkstra算法修改 + dfs算法的总结
Dijkstra + dfs参考Dijkstra算法的改进前提:Dijkstra算法的思路和实现请看最短路径算法之二:Dijkstra总结介绍Dijkstra算法和dfs算法的结合主要解决最短路径的边权之和、点权之和以及打印最短路径结点等问题。通过Dijkstra算法找出单源点最短路径,在通过dfs 算法遍历最短路径中的结点。主要实现的方法是在Dijkstra算法每次更新dis数组的时候对可变大小的数组(vector)进行插入清除等操作,将每次更新的最短路径结点的前驱结点加入到 vector 中。原创 2020-06-01 20:25:54 · 1046 阅读 · 0 评论 -
最短路径算法之二:Dijkstra总结
Dijkstra算法参考Dijkstra算法图解时间复杂度:O(n^2)实现查找单源点最短路径问题贪心算法步骤1、和Floyd算法一样,首先对图map进行初始化(各源点间的距离无限大),其次输入源点关系。2、 两个集合(vis[] 和dis[] ),vis集合是存放已经是最短路径的源点,dis集合是到各源点的最短路径3、首先将开始源点存进 vis[ k ],初始化 k 到各源点的最短路径存放在dis,遍历dis找到其中最短路径的源点并标记为temp。其次,将找点的源点存进vis ,并且根原创 2020-05-30 17:28:35 · 489 阅读 · 0 评论 -
最短路径算法之一: Floyd 总结
多源点最短路径经典算法参考几个最短路径的算法算法思路:动态规格时间复杂度:O(n^3)核心算法:最少只有4行 //查找从 i 到 j 顶点之间的最短路径 for(int k = 1; k <= n; k++) //控制中间顶点 for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) //将顶点之间的最短路径保存 //最短路径只有两种可能,从 i 到 j 或者从 i 到 k 到 j;原创 2020-05-29 10:07:00 · 496 阅读 · 0 评论 -
我的并查集总结并记录
并查集模板参考来源于并查集(Union-Find)算法介绍并查集依据树的数据结构建立并查集主要有两个基本操作一是 find 算法(查找树的根结点)二是 union算法(将两个不同根结点树连接在一起)各类的并查集题目主要围绕着这两个操作进行更改变化基本函数以及初始化(部分取舍根据题目改变)#include <iostream>using namespace std;// 并查集int id[80]; //代表总共有多少个结点int size[180]; //代表每原创 2020-05-27 11:50:22 · 154 阅读 · 0 评论 -
我的堆排序总结并记录
堆排序模板C++根据清华大学出版社出版的算法设计与分析(第2版)王红梅 胡明 编著堆排序基于完全二叉树时间复杂度:O()堆排序属于减治法分为大根堆与小根堆大根堆 :每个结点的值都大于或等于其左右孩子结点的值小根堆:每个节点的值都小于或等于其左右孩子结点的值分为两部分:1、对数据的筛选调整部分,形成二叉堆2、将堆顶元素取出(将第一个元素与最后一个元素交换),并调整关键1:第 i 趟排序的最后一个记录是 n-i关键2:堆的最后一个分支结点下标为:(n-1)/2对代码的解析//筛选原创 2020-05-24 12:08:05 · 175 阅读 · 0 评论 -
我的归并排序总结记录
归并排序模板C++根据清华大学出版社出版的算法设计与分析(第2版)王红梅 胡明 编著时间复杂度:O(nlog2n)首先对要排序的序列划分为两个子序列,直到子序列的长度划分1结束其次将两个相邻的有序子序列合并,合并方法时间复杂度为 O(n)归并排序(merge_sort)是按照记录在序列中的位置对序列进行划分快速排序(quick_sort)是按照记录的值对序列进行划分两者都是基于分治法,时间复杂度都相同对代码的解析//归并排序模板 #include <iostream>u原创 2020-05-23 17:25:32 · 149 阅读 · 0 评论 -
我的KMP算法总结并记录
今天对这学期学的字符串匹配算法进行总结并记录。KMP算法基于蛮力法实现的KMP算法是BF算法的改进算法KMP 算法主要由两个函数构成。一个是next数组的获取,二是对主串S和模式串T的匹配//KMP字符串匹配算法,BK算法的改进版本 #include <iostream>#include <cstring>using namespace std;//获取 next 数组的值 void GetNext(char T[],int next[]){ int i;原创 2020-05-21 16:39:10 · 150 阅读 · 0 评论 -
我的快速排序总结并记录
快速排序QuickSort//快速排序 QuickSort 模板 #include <iostream>using namespace std;//对数组划分 ,返回确定数据的位置 int partition(int arr[],int i,int j){ int low = i; //第一个数 int high = j; //最后一个数 while( i < j) //循环 ,一次排序 { // 右边缩进,通过一次循环将所有不满足的跳过,下一次肯定需要交换 w原创 2020-05-20 21:47:37 · 128 阅读 · 0 评论