![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础算法
基础的算法入门
CSDN729180099
这个作者很懒,什么都没留下…
展开
-
Pollard Rho质因数分解的编程实现
Pollard Rho因数分解(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n, 重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。这个问题循环执行了上边的三个步骤,因此可以把上面三个步骤抽象成一个函数,重复调用递归思路:先分解出n中最小的质因子k能整除:输出因子k,继续分解n/k中的因子k不能整除:分解n中的下一个因子k+1当n==k时原创 2022-04-10 20:35:18 · 316 阅读 · 0 评论 -
基础算法——区间和并
1. 区间和并把有交集的区间合成一个大的区间2. 算发步骤1)把要合并的区间按区间左端点从小到大排序2)用st和ed指针从前往后维护区间3)比较ed 和后一个区间的左端点,分情况更新ed和first3. 模板// 将所有存在交集的区间合并void merge(vector<PII> &segs){ vector<PII> res; sort(segs.begin(), segs.end()); int st = -2e9, ed原创 2020-07-18 15:08:04 · 997 阅读 · 2 评论 -
基础算法——离散化(C++版)
1. 离散化有些数据本身很大, 自身无法作为数组的下标保存对应的属性。如果这时只是需要这堆数据的相对属性, 那么可以对其进行离散化处理。当数据只与它们之间的相对大小有关,而与具体是多少无关时,可以进行离散化。...原创 2020-07-17 23:13:12 · 1949 阅读 · 1 评论 -
基础算法——位运算
位运算计算n的二进制表示中第k位是几步骤:(1)先把第k位移到最后一位。 x >> k;(2)看个位是几。 x & 1模板求n的第k位数字: n >> k & 1返回n的最后一位1:lowbit(n) = n & -n应用例题:二进制中1的个数给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。输入格式第一行包含整数n。第二行包含n个整数,表示整个数列。输出格式共一行,包含n个整数,其中的第 i 个..原创 2020-07-16 15:26:48 · 432 阅读 · 0 评论 -
基础算法——双指针算法
1. 核心思想通过某种线性关系将原先O(n2)的朴素算法优化为O(n)的快速算法2. 一般应用思路(1)先写一个暴力的朴素O(n2)的算法 (2)找到两个指针之间的单调关系(3)如果有单调关系,可以将枚举从O(n2)优化到O(n)3. 模板for(int i = 0, j = 0; i < n; i++){while(j < i && check(i, j)) j++;//具体问题的逻辑}常见问题的分类:(1)用两个指针维护一段...原创 2020-07-16 14:38:45 · 234 阅读 · 0 评论 -
基础算法———前缀和与差分
前缀和与差分的定义与联系设有数组{an} = a1, a2, a3, ……,an; {bn} = b1, b2, b3, ……, bn且有ai = b1+b2+b3+……+bi则称an为bn的前缀和,bn为an的差分,且bn = an - an-1用途前缀和的作用:已知某个数组的前缀和数组,可以快速求得该数组的某个区间片段和差分的作用:利用原数组的差分数组,快速使原数组某个区间片段的元素加上同一个数在矩阵上的推广前缀和与差分可以从一位数组推广到二维数组(矩阵),快速求得子矩阵的和以及快速对.原创 2020-07-14 22:05:21 · 320 阅读 · 0 评论 -
基础算法——高精度(C++版)
大数的存储用一个数组存储这个大数的每一位,因为在运算时可能会产生进位,而在数组后面添加一个数相对容易,所以我们倒序存放数的每一位。高精度加法例题:高精度加法两个正整数,计算它们的和。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的和。数据范围1≤整数长度≤100000输入样例:1223输出样例:35在这里插入代码片...原创 2020-07-09 10:05:26 · 335 阅读 · 0 评论 -
基础算法——二分(C语言版)
基础算法——二分(C语言版)二分法的用途用来寻找一个区间中满足某种性质的边界点(区间有单调性一定可以二分,但可以二分不一定具有单调性)二分思想通过不断折半查找区间,缩小查找范围,直到找到所求值代码实现步骤:(1)找中点:找到区间中点mid(2)选check:写一个check函数,判断mid是否满足边界点所在性质(3)更区间:看边界点在mid左侧区间还是右侧区间,更新区间端点二分算法分类:整数二分、浮点数二分整数二分 两个模板1://区间[l, r]被划分成[l, mid]和[mi原创 2020-07-06 11:19:55 · 2462 阅读 · 0 评论 -
基础算法——归并排序(C语言版)
基础算法——归并排序(C语言版)基本思想——分治先二分再归并,先将区间不断一分为二,直到满足递归终止条件(不可再分,即区间只有一个元素),然后将区间两两归并合二为一。基本步骤(1)二分:将数列从中间一分为二(2)递归:递归排序左右两边(3)归并:把拆分后的区间归并到辅助数组应用例题给定你一个长度为n的整数数列。请你使用归并排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数 n。第二行包含 n 个整数(所有整数均在1~109原创 2020-07-04 18:15:51 · 624 阅读 · 0 评论 -
基础算法——快速排序(C语言版)
基础算法——快速排序(C语言版)快速排序基本思想——分治通过分界点将要排序的数组不断划分,直到简化为两个数的排序问题基本步骤(1)找分界点:在数组中找一个数k作为分界点(一般选择处于数组中间的数)(2)调整区间:以k为界把数组分成两个区间,使k左边的数都小于等于k,k右边的数都大于等于k(3)递归处理:对两个区间重复(2)、(3)操作应用例题给定你一个长度为n的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行原创 2020-07-04 16:42:24 · 785 阅读 · 0 评论