算法
文章平均质量分 74
积累一些常用经典算法
你脸上有BUG
一只头秃程序媛
展开
-
Deflate内部实现(LZ77无损压缩算法)超详细图解算法版~
基于字典的无损压缩算法,它搜索重复的未压缩序列并用引用指针替换它们。原创 2024-06-19 17:11:21 · 1220 阅读 · 0 评论 -
算法思想——贪心(详细举例理解~)
算法思想贪心算法分而治之(递归思想)动态规划暴力穷举文章目录引入基础知识贪心三步走举例例题分享引入思考:假设有四种硬币,面值分别为50元、10元、5元和1元。现在要找给某顾客113元,你会怎么找?我们不假思索的就会选择2个50元,1个10元和3个1元的组合。而我们的下意识的使用了找硬币算法:1. 首先选取一个不大于113元的最大面值,即50元,剩余63待找。2. 再选取一个不大于63元的最大面值,即又一个50元,剩余13待找3. 再选取一个不大于13元的最大面值,即10元,剩余原创 2022-04-08 14:12:59 · 958 阅读 · 0 评论 -
二分实现:查找数组中的峰值元素
问题引入给定一个有序数组arr,其中 arr[i] != arr[i+1],找到峰值元素并返回其索引首先,定位到题干中的关键字:峰值元素峰值元素是指 其值大于左右相邻值 的元素,是数组的一个转折点。法一:循环遍历根据峰值元素的特性,可以直接遍历找到符合条件的峰值元素:思想:遍历数组,如果当前元素大于它相邻的元素,则输出它的索引。若当前数组只有一个元素,则输出0,若当前元素为首尾元素,则只需要大于其另一侧的元素即可。//jslet arr = [3,4,5,6,7,1,2];let i原创 2021-09-07 22:49:53 · 1629 阅读 · 2 评论 -
小雨的矩阵(DFS三参数模板题)
E-小雨的矩阵题目描述小雨有一个n×n 的矩阵,起点在(1,1),终点在(n,n),只能向下或向右走,且每次只能走 1 步。矩阵上每个点都有一个点权a(i,j)。求走到终点的路径有多少不同的点权和。输入描述:第一行,输入一个正整数 n 。接下来 n+1 行,每行 n 个数,表示 a(i,j)输出描述:共一行,输出有多少不同的点权和。示例1输入21 52 4输出2说明(1,1)→(2,1)→(2,2):和为7。(1,1)→(1,2)→(2,2):和为10。备注:1原创 2021-03-31 17:31:16 · 287 阅读 · 0 评论 -
暴力技术(一)——BFS广(宽)度优先搜索
bfs算法思想以老鼠走迷宫为例,如果说DFS是一只老鼠将整个图走到底,那么BFS就是一群老鼠走迷宫,也可以称作“并行处理”的模拟。假设老鼠是无穷多的,这群老鼠进去后,在每个路口派出部分老鼠探索没有走过的路。停下有两种情况:走某条路碰壁,无法前行。到达的路口已被探索过。显然,这将使得所有道路都走到,且不重复。一般使用队列这种数据结构来具体实现BFS。BFS是一个“扩散”的过程,如果...原创 2019-11-18 00:05:56 · 357 阅读 · 0 评论 -
整数划分结论
整数划分(有用结论)给定一个正整数n, 则在n所有的划分中, 求因子乘积最大的一个划分及此乘积。8 = {8}, {7, 1}, {6, 2}, {5, 3}, {4, 4}, {3, 3, 2}, {2, 2, 2, 2} 等,那么在这些当中,3 * 3 * 2 的乘积最大,所以输出整个划分和这个乘积 18。(1) 对于任意大于等于4的正整数m, 存在一个划分m = m1+m2, 使 m...原创 2019-07-14 10:50:56 · 225 阅读 · 0 评论 -
【坐在马桶上看算法】啊哈算法13:零基础彻底弄懂“并查集“
因为最近在学并查集,在别的博客看到关于并查集的知识点,讲解得很清晰,理解更深,所以搬运到csdn来分享一下好资源。题目描述快过年了,犯罪分子们也开始为年终奖“奋斗”了,小哼的家乡出现了多次抢劫事件。由于强盗人数过于庞大,作案频繁,警方想查清楚到底有几个犯罪团伙实在是太不容易了,不过警察叔叔还是搜集到了一些线索,需要咱们帮忙分析一下。现在有11个强盗。1号强盗与2号强盗是同伙。3号强盗与...转载 2019-05-22 09:00:37 · 830 阅读 · 4 评论 -
DSF深搜入门全排列笔记nyoj366
DFS深搜之全排列(初学入门)题目描述思路解析与dfs模板伪代码题目描述以nyoj2.0 366题为例,记录入门dfs的代码,并理清思路,方便以后复习巩固,初学dfs如果有问题还请指出~链接: nyoj 366-D的小L.思路解析与dfs模板伪代码void dfs() { //初学时基本为一个参数,根据题意添加if (到达终点状态) {…//根据题意添加return; //重...原创 2019-03-21 16:00:40 · 303 阅读 · 0 评论 -
初识贪心——调度问题
一、区间调度问题囊括“活动调度问题”,以HDU2037为例。Problem Description有很多电视节目,给出他们的起止时间,有的节目时间冲突,问能完整看完的电视节目最多是多少Input输入数据包含多个测试实例,每个测试实例第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别...原创 2019-10-13 20:42:46 · 1094 阅读 · 0 评论 -
哈希表取模选择素数分析
蝉的哲学蝉的生命周期为13年或17年,却很少有14、15或16年,为什么呢?蝉是弱势群体,有很多天敌,选择素数作为其生命周期能最大减少与其天敌们共存的时间,增加自己的存活率,这也是自然选择的结果。一、散列函数散列函数即是将元素映射到对应槽位置的方法。除法散列法 :h(k) = k mod m通过取 k 除以 m 的余数,将关键字 k 映射到 m 个槽上。从蝉的哲学中获得启示,将哈希取余...原创 2019-10-08 23:01:06 · 1360 阅读 · 0 评论 -
快速幂(二进制理解)
一、题目背景已知底数a,指数b,取模值mod。求ans = a^b % mod二、朴素算法(已知可跳过)ans = 1,循环从 i 到 b ,每次将 ans = ans * a % mo时间复杂度O(b)void power(int a, int b, int mod){ ans = 1; for (int i = 1; i <= b; i++) { ...原创 2019-09-24 20:39:08 · 310 阅读 · 0 评论 -
初识母函数(模板)
在数学中,某个序列的母函数(Generating function,又称生成函数)是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。使用母函数解决问题的方法称为母函数方法。母函数讲解题目:有1克、2克、3克、4克的砝码各一枚,能称出哪几种重量?每种重量各有几种可能方案?穷举:①先假设使用一个1g的砝码,在此基础上使用2g的砝码,同上再假设使用一个3g的,再假设使用一个4g的,这种...原创 2019-09-18 17:26:44 · 250 阅读 · 0 评论 -
递推——错排
错排问题n个有序的元素应有n!个不同的排列,如若一个排列使得所有的元素不在原来的位置上,则称这个排列为错排。问题举例:写信时将n封信装到n个不同的信封里,有多少种全部装错信封的情况?又比如四人各写一张贺年卡互相赠送,有多少种赠送方法?自己写的贺年卡不能送给自己。递推公式当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用D(n)表示,那么D(n-1)就表示n-1个编号元素放...原创 2019-08-28 19:18:48 · 151 阅读 · 0 评论 -
字符串匹配(二)——逆向思维 BMH
BMH算法BMH(Boyer-Moore-Horspool)算法是BM(Boyer-Moore)算法的一种优化,P从最右边开始比较。核心:焦点在于坏字符上,根据字符在模式串P中出现的最后的位置算出偏移长度,偏移模式串的长度。坏字符偏移表在预处理中,计算大小为|∑|的偏移表。设m为P串的长度:字符在P模式串中 **bmBc[char] = m-1-m...原创 2019-08-24 18:06:56 · 671 阅读 · 0 评论 -
字符串匹配(一)—— KMP / MP
目的:判断目标串(T串)中是否含有模式串(P串)。失配T t0 t1 t2 …… tk tk+1P p0 p1 p2 …… pk由于字符串T和P第一个不相等的字符出现在位置k,所以两字符前k个字符是相等的,也说明两串在位置k处失配。失效函数定义:记录字符串P中各个字符之间关系的函数。定义域:自变量 j 的取值范围是P在“失配”...原创 2019-08-23 19:23:27 · 346 阅读 · 0 评论 -
动态规划(五)——0/1背包
0/1背包给定n种物品和一个背包,物品i的重量为wi,价值为vi,背包的总容量为C。在入背包的物品时对每种物品i只有两种选择,即装入背包和不装入背包(称为0/1背包),如何选择装入背包的物品使得背包中物品总价值最大?xi = 0时不装入背包,xi = 1时装入背包:约束条件:装入背包的物品重量之和不超过背包总容量目标函数:装入背包的物品价值之和最大实例讲解有四个物品,重量分别为2,3,6,5,价值分别为6,3,5,4,背包的容量为9。B(k,c),k代表前k个物品,c代表背包剩下的容量原创 2020-05-09 22:31:50 · 797 阅读 · 0 评论 -
动态规划(三)——最少硬币和所有硬币问题
硬币问题一、最少硬币问题二、打印最少硬币组合三、所有硬币组合3.1硬币数量不限制3.2硬币数量限制一、最少硬币问题有n种硬币,面值为v1…vn,数量无限,选用硬币,使其和金额为s,要求求出最少的硬币组合。首先我们应该有打表的思想,将任意金额的最少硬币组合数量存到一个数组里,输入一个金额时就可以直接查询数组中对应的硬币最少数量。定义一个int Min[MONEY],Min[i]是金额i对应的最少硬币数量。Min[i]这样记录子问题最优解的数据称为“状态”。讲解以5种面值(1、5、10、25、50)的原创 2020-05-08 23:24:07 · 10416 阅读 · 0 评论 -
动态规划(二)——经典问题之最长上升子序列
最长上升子序列题目描述一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一...原创 2020-03-06 19:19:20 · 803 阅读 · 0 评论 -
动态规划入门(一)——数字三角形
数字三角形题目描述:从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的那个数或者右边的那个数。输入输入的是一行是一个整数N (1 < N <= 100),给出三角形的行数。下面的N行给出数字三角形。数字三角形上的数的范围都在0和100之间。输出输出...原创 2020-03-04 18:14:09 · 448 阅读 · 0 评论 -
理解三维数组
array[2][2] 相当于两个一维数组array[3][2][2] 类比可知,相当于3个 2 * 2 的二维数组可以将三维数组比作一个立方体,这个立方体底面是个2*2的正方形,高为3,如下图所示。注意:三维数组的高维度是写在最前面的,也就是立方体的z#include <stdio.h>int main() {int array[3][2][2] = {0,1,2,...原创 2019-11-20 08:40:14 · 10787 阅读 · 0 评论 -
二进制位运算中‘1’的个数
题目描述现在夯夯和朱朱饿了,他们想去吃点东西,他们发现店里东西的价格都是2的次方倍(20, 21,22…)现在夯夯和朱朱想把他们的的钱全都用掉。想知道他们最少能吃多少东西,最多能吃多少东西?输入格式多组样例,每组样例占一行,每行一个整数,代表他们拥有的总钱数。输出格式分别回答他们的问题,答案用空格隔开。输入 #121输出 #11 21 1说明/提示样例数量 ≤ 104 总...原创 2019-11-05 01:01:06 · 239 阅读 · 0 评论