自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 数据结构算法系列----背包问题(01,完全,多重)

"01背包"是一个经典的动态规划问题。在01背包中,给定一个背包容量和一组物品,每个物品都有自己的重量和价值。问题的目标是选择一些物品放入背包中,使得放入的物品总重量不超过背包容量,同时使得放入的物品总价值最大。"01"表示每种物品最多只能选择一次,即要么放入背包中,要么不放入。这是与其他背包问题(如完全背包和多重背包)的区别之一。多重背包问题是背包问题的一个变种,与0-1背包和完全背包不同,多重背包问题中每种物品的数量是有限的,即可以选择多个物品,但每种物品的数量是有限的。

2024-03-13 13:25:11 1195 1

原创 【ccf-csp认证】201903-2二十四点(简易计算器)

直接做一个能加减乘除的简易计算器,判断读出来的数能不能得到24就好,最大的难点在于中缀码转换到后缀码。如果之后遇到更难的题输入的中缀码内有括号,只要将符号栈内所有在左括号和右括号之内的数push进队列之中。

2024-04-19 15:33:48 169

原创 数据结构算法系列----广度优先搜索(bfs)

BFS(广度优先搜索)是一种图搜索算法,用于在图或树数据结构中进行遍历。BFS从根节点开始,沿着图的宽度遍历图的顶点,直到找到目标顶点或遍历完所有顶点。在BFS中,首先访问根节点,然后依次访问与根节点相邻的节点,再依次访问这些相邻节点的邻居节点,以此类推。BFS通常使用队列数据结构来实现。BFS的基本思想是将当前节点的所有邻居节点都加入到队列中,然后逐个访问队列中的节点,并将它们的邻居节点加入队列。这样可以保证先访问距离当前节点较近的节点,从而实现按层级遍历。在计算机科学中,BFS常用于解决图的。

2024-04-03 09:38:01 1099 1

原创 《算法笔记》系列----质数的判断(埃氏筛法)

因此我们要隆重引入我们新的算法埃氏筛法:当需要生成一个给定范围内所有素数的素数表时,可以采用更高效的算法来降低时间复杂度。一种常见的方法是使用埃拉托斯特尼筛法(Sieve of Eratosthenes)。埃氏筛法的时间复杂度,明显优于逐个判断每个数是否为素数的复杂度。埃拉托斯特尼筛法的基本思想是从2开始,依次将每个素数的倍数标记为非素数,直到遍历完整个范围。剩下未被标记的数即为素数。初始化一个布尔数组,表示每个数是否为素数,初始值为True。

2024-03-29 23:30:55 823 1

原创 《算法笔记》系列----区间贪心

给定若干个开区间,可任意选择区间要求最大不相交区间的数量,例如对于开区间(1,3)、(2,4,)、(3,5)、(6,7)来说最多可以选择三个区间 (1,3)、(3,5)、(6,7)。由图易得,由于每一条线的x从上往下递增,因此这样排序的话每一个开区间占用的数轴范围就会变大,因此假如说按这样排序的两个区间发生冲突优先选择上面的,例如选择y1而不选择y2。当我们这个区间包含于另一个区间,这两个区间我们肯定首选区间范围小的那个,比如(1,5)和(2,3) 我们肯定选择(2,3)。

2024-03-26 18:50:31 255

原创 【STL】 C++常用容器介绍系列(三)----(sort函数)

sort函数的作用和他的名字一样,是用来排序的函数,sort函数通常接受一个数据集合作为输入,并按照特定的排序规则对数据进行重新排列。除了基本的排序功能外,sort函数通常还支持自定义比较函数,以便根据特定的规则对数据进行排序。

2024-03-25 21:43:43 486

原创 《算法笔记》系列----进制转换(q进制转十进制、十转q)

这个算法的核心就是变量product,我们先让product等于1代表这一位的大小,然后每一次都乘q,代表这一位的大小。

2024-03-25 21:06:01 448

原创 数据结构算法系列----对动态规划的感悟

最近我一直在做和复习动态规划的题目,对动态规划有了一些新的理解和感悟。本文就是基于最近做的一些题目写的。

2024-03-25 12:16:05 360

原创 数据结构算法系列----贪心算法

贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法。在贪心算法中,通过局部最优解来达到全局最优解。贪心算法通常用于解决最优化问题,每一步都采取当前状态下最优的选择,而不考虑之后的结果会如何。

2024-03-23 11:12:19 1632 1

原创 数据结构算法系列----Dijkstra-迪杰斯特拉算法(C++)

Dijkstra算法是一种用于解决单源最短路径问题的经典算法,Dijkstra算法是一种用于解决单源最短路径问题的经典算法(其实就是给你好几个点,然后各个点由路径连接,每个路径被赋予权值,求出原点到每个点要走的距离) 如下图所示:这样可以得出每个点到原点的最短距离。

2024-03-20 14:37:11 516 2

原创 数据结构算法系列----最长严格升(降)序序列(动态规划)

先定义一个dp数组,每一位代表的是以这一位为结尾升序序列的最长长度。状态转移方程式max(dp[i],dp[j]+1)这个j代表的是遍历前面的序列,一个一个对比看这个序列跟在哪个序列会最长。

2024-03-19 14:36:41 191 1

原创 【STL】 C++常用容器介绍系列(二)----(queue、优先队列 priority_que、deque)

大根堆(max heap): 在大根堆中,父节点的值始终大于或等于其子节点的值。因此,大根堆的堆顶元素是整个堆中的最大值。其实就是一个类似完全二叉搜索树的结构,调用函数top()调用最上层节点,然后大根堆最上层节点是整颗树的最大值。小根堆(min heap): 在小根堆中,父节点的值始终小于或等于其子节点的值。因此,小根堆的堆顶元素是整个堆中的最小值。其他与大根堆类似,只不过小根堆上层是整颗树最小值。

2024-03-19 00:04:57 1029 1

原创 【STL】 C++常用容器介绍系列(一)----(map、set、stack)

底层实现:map 是基于红黑树实现的,它保持元素的有序性,插入、删除和查找的时间复杂度 为O(log n);有序性:map 中的元素是按照键的大小有序排列的底层实现: unordered_map 是基于哈希表实现的,它不保持元素的顺序,插入、删除和查找的 时间复杂度为平均O(1)。有序性: unordered_map 中的元素是无序的。内存占用:unordered_map 通常会占用更多的内存,因为哈希表需要额外的空间来存储哈希函 数。底层实现:set 是基于红黑树实现的,

2024-03-18 14:26:19 1212 1

原创 数据结构算法系列----一维和二维前缀和

数组每一位代表到这一位的累积和,因此要得到[l,r]区间内的累积和,用sum[r]-sum[l-1]即可。

2024-03-14 12:53:27 327

原创 数据结构算法系列----高精度加法(大数相加)、处理前导零

数据范围的数时,通常会将这些大数表示为字符串,然后通过字符串的方式进行加减乘除运算。在处理大数运算时,我们可以通过模拟手工计算的方式来实现加减乘除运算,例如加法:从个位开始逐位相加。提到高精度算法就不得不提到前导零,由于题目给我们的数据经常是:a=00112,b=00223 这样类型的因此在进行基本运算时我们要先获得去除前导零的串。把需要处理的字符串传到这个data_pre函数中即可。具体步骤写在代码注释。

2024-03-13 22:24:49 394

原创 数据结构算法系列----快速幂

当我们计算a的n次幂时,最先想到的肯定是c中的内置函数 pow(a,n),这个内置函数虽然简单方便,但是在实际使用中这个函数的时间复杂度是o(n),因为它是将a乘n次得到的答案。由于在n非常大时用pow()很容易超时,因此我们引入一个时间复杂度为o(log n)的算法——快速幂。

2024-03-11 21:15:31 463

原创 数据结构算法系列----并查集

并查集可以简化算法设计、提高运行效率,并且适用于一些需要处理集合连通性问题的场景,是一种非常有用的数据结构。不使用并查集时合并或查询集合的普通暴力解法时间复杂度普遍在o(n),而使用之后并查集之后,通过使用路径压缩和按秩合并等技术(在之后的find_root函数中有体现),可以实现近似常数时间的平均复杂度。return i;

2024-03-11 12:31:24 428 1

原创 数据结构算法系列----线段树的区间修改(懒标记)

线段树不引入懒标记前需要修改每一个叶子结点的值时间复杂度为o(n),而在引入懒标记后区间用lazy数组存储某一段区间下的结点需要加上的值,在用懒标记之后时间复杂度变为(log n)。lazy数组可以理解为这个结点的一个记账本,add函数的调用可以理解为记账记住下面结点欠的数,pushdown可以理解为算账即把下面结点欠的值加给他们。进入pushdown函数的区间代表不包含与我们需要修改的区间之内,因此我们需要把传入函数结点的lazy标记的值向下传(算账)。在引入lazy数组之后对区间查询的代码也要改变。

2024-03-10 14:34:46 540 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除