
基础算法
文章平均质量分 84
蓝桥杯等算法竞赛备赛
为梦而生~
Python新星创作者,优快云潜力新星,阿里云社区专家博主。我在学习的是算法和机器学习、深度学习的相关内容,欢迎大家来与我探讨交流,一起进步!在我的博客中,你可以找到我对于某些知识点的理解和经验分享,也欢迎与我交流和讨论编程相关的话题。谢谢你的光临!
展开
-
【算法 & 高级数据结构】树状数组:一种高效的数据结构(二)
上一篇文章我们介绍了树状数组这个数据结构,并且进行了其原理的数学推导,这篇文章基于上一篇文章,来讲一下这个数据结构在算法题中的应用原创 2024-03-25 17:17:56 · 1328 阅读 · 52 评论 -
【算法 & 高级数据结构】树状数组:一种高效的数据结构(一)
树状数组(Binary Indexed Tree,BIT)是一种数据结构,用于高效地处理数组的动态查询和更新操作。它可以在O(log n)的时间复杂度内完成单点更新和前缀和查询操作。树状数组常用于解决数组频繁更新和查询前缀和的问题,比如求解**逆序对、区间和**等。原创 2024-03-08 14:43:48 · 2320 阅读 · 68 评论 -
【算法基础 & 数学】快速幂求逆元(逆元、扩展欧几里得定理、小费马定理)
已知:a % gcd(a,b) == 0,b % gcd(a,b) == 0;已知整数a、b,扩展欧几里得算法可以在求得a、b的最大公约数的同时,能找到整数x、y(其中一个很可能是负数),使它们满足贝祖等式。在一个集合中,对于某种运算,如果对于任何的集合元素a和元素e运算,得到还是集合元素a本身,就称e为这个运算下的单位元。因此 方程 ax + by = c 有解的充要条件是 c % gcd(a,b) == 0。则 ax % gcd(a,b) == 0,by % gcd(a,b) == 0。原创 2024-01-21 17:26:58 · 4453 阅读 · 5 评论 -
【算法基础 & 数学】快速幂
其实就是看k的二进制表示里面,哪些位是1,把1对应的这些位对应的数乘起来就可以了。可以表示为前面分解的这些数的某些数的乘积。也就是说,后一个数都是前一个数的平方。,对于每组数据,求出。(利用k的二进制表示)原创 2024-01-19 19:20:57 · 506 阅读 · 2 评论 -
【算法基础 & 数学】欧拉函数
欧拉函数的定义、公式及其推导、C++代码原创 2024-01-18 09:15:54 · 590 阅读 · 2 评论 -
【算法基础】高精度运算
高精度加法、高精度减法、高精度乘法、高精度除法的思路与代码原创 2023-11-20 17:31:05 · 643 阅读 · 7 评论 -
【算法基础】筛质数
有最朴素的筛法和线性筛法。最朴素的筛法是依次遍历每个数,如果该数不是合数,则将其加入素数列表中。线性筛法则是在遍历每个数的同时,将其倍数标记为合数,从而减少后续遍历的次数,提高效率。原创 2023-11-17 16:34:18 · 125 阅读 · 3 评论 -
【算法基础】分解质因数
分解质因数是指将一个合数用质因数相乘的形式表示出来,即将一个合数分解为若干个质数的乘积。其中每个质数都是这个合数的因数。例如,将30分解质因数,得到2×3×5,即将30表示为2、3、5三个质数的乘积。分解质因数只针对合数,对于质数和1,不需要进行分解质因数。原创 2023-11-16 22:44:08 · 4859 阅读 · 3 评论 -
利用栈和队列共同解决迷宫问题
迷宫问题是一道经典的算法问题,旨在寻找一条从起点到终点的最短路径。通常迷宫由一个二维矩阵表示,其中0代表可通过的空地,1代表墙壁不可通过。在此条件下,需要运用数据结构中的图算法如广度优先搜索(BFS)或深度优先搜索(DFS)等找出一条从起点到终点的最短路径。例如,以下就是一个迷宫:(其中1表示墙壁不可通过,0表示可以通过的路径。起点为(1,1),终点为(15,15))迷宫问题是求解从起点到终点的路径,使得路径能够遍历迷宫所有有效格子的问题。这个问题在计算机科学中被广泛研究,有很多种算法可以解决。原创 2023-05-31 16:34:05 · 1540 阅读 · 0 评论 -
约瑟夫问题及求解方法
队是一种特殊的线性表,它只允许在一端进行插入,在另一端进行删除,允许插入的一端称为队尾,通常用一个队尾指示器指向队尾元素;允许删除的一端称为排头,用一个排头指示器指向排头元素。在队列中,最先插入的元素将最先删除,因此又称队为先进先出线性表。n个人围坐在圆桌周围,从某个人开始编号为1,2,3,4,…,n,编号为1的位置上的人从1开始报数,数到m的人出列,从下一个人又从1开始报数,数到m的人便是第二个出列的人。如此重复下去,直到最后一个人出列为止。原创 2023-05-12 19:56:57 · 3471 阅读 · 1 评论 -
PageRank原理及C语言实现
在计算过程中,每个节点的PageRank值将从与之关联的所有入站节点(即指向该节点的节点)中收集来,这些入站节点的PageRank值将按其相邻边的等分比例进行计算。最终,PageRank值被视为每个节点的相对权重,用于搜索引擎的排名。具体而言,当有很多页面都指向同一个页面时,该页面将被认为是更重要(更受欢迎)的页面,从而获得更高的权重。总之,PageRank算法主要是通过评估网页的入站链接的数量和质量,以及这些链接指向哪些页面来确定页面的相对重要性,并据此进行搜索引擎的排名。原创 2023-05-08 22:23:06 · 694 阅读 · 0 评论 -
brainfuck原理及C语言实现
因为brainfuck语言中操作数据数组的指令非常多,需要经常更改cur的指向,这些指令包括“I”(指针加1)、“D”(指针减1)等等。Brainfuck的源代码是由一系列的指令组成的,这些指令可以操作一个数组,也可以输出或输入数据。在BFState这个结构体中,array指向数据数组的首地址,cur表示当前指向的位置。根据读入的源代码,使用 switch-case 语句实现 Brainfuck 的 8 个指令,包括:+,-,>,原创 2023-05-05 09:27:36 · 1573 阅读 · 2 评论 -
【kmp算法】原理以及代码实现
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)文字来源:百度百科。原创 2021-02-20 09:10:10 · 1166 阅读 · 0 评论 -
【算法基础】差分算法及其应用
对于一个数组a,某一个数的前缀和表示这个数以及前面所有数的和对于数组a1,a2,……,an存在一个数组b1,b2,……,bn使得b1= a1, bi= a1+…+ai= ai+bi-1差分是在前缀和的基础上定义的,是前缀和的逆运算对于一个数组b1,b2,……,bn设其前缀和组成的数组为a1,a2,……,an即①a1= b1;②a2= b1+b2;③a3= b1+b2+b3……则称数组a的差分是数组b。原创 2023-01-05 23:55:28 · 1161 阅读 · 0 评论 -
【贪心策略】区间问题、背包问题、贪心策略注意事项
贪心策略能解决的问题,往往可以分解为若干个子问题,并且每个子问题的最优解都可以使得总的解最优。相比DFS,贪心策略不需要穷举更多的可能,而是拥有了推知未来的能力,照某一个方案选择每一个子问题一定可以得到答案。贪心也可以理解为“最优子结构。原创 2022-02-08 13:07:09 · 1780 阅读 · 0 评论 -
【算法基础】深搜
从逐步生成、递归,到深搜(DFS)结合多个例题,全方位无死角的搞定深搜!原创 2022-01-29 15:08:29 · 5463 阅读 · 8 评论