
算法
文章平均质量分 65
沥川同学
我太菜了~
展开
-
沥川的算法学习笔记:基础算法(4)----前缀和与差分
二维前缀和算法是前缀和思想的扩展,用于高效计算矩阵中某个子矩阵的元素之和。它通过预处理构造一个二维前缀和数组,使得每次查询子矩阵的和可以在 O(1)时间内完成。前缀和(Prefix Sum)是一种常见的算法思想,通常用于快速计算数组中某个区间的元素之和。,假设为2,1,3,6,4,要求l到r的区间范围内的l到r个数的和。s[r]-s[l-1]即为第l个元素到第r个元素的和。l到r的区间范围内的就等于s[r]-s[l-1],其中s[i]=s[i-1]+a[i]原创 2024-12-06 21:25:18 · 1027 阅读 · 0 评论 -
沥川的算法学习笔记:基础算法(3)----高精度算法
高精度除法(div): 这个函数接受一个整数向量 A 和一个整数 b,返回它们的商和余数。在每一步中,它将被除数的一部分与除数进行比较,确定可以整除的最大倍数。高精度加法(add): 这个函数接受两个整数向量 A 和 B,返回它们的和。高精度减法(sub): 这个函数接受两个整数向量 A 和 B,返回它们的差。高精度乘法(mul): 这个函数接受一个整数向量 A 和一个整数 b,返回它们的乘积。函数首先将 A 中的每个元素与 b 相乘,并将结果累加到结果向量 C 中。然后,它去除结果中前导的零。原创 2024-11-22 21:41:52 · 331 阅读 · 0 评论 -
C++番外篇-------排序算法总结
1.冒泡排序1.冒泡排序冒泡排序是一种简单的排序算法,它通过重复遍历要排序的列表,依次比较每对相邻项,并在必要时交换它们,从而使较大的元素逐渐“浮”到列表的顶部,而较小的元素则“沉”到底部。以下是冒泡排序的基本步骤:1. 从列表的第一个元素开始,依次比较相邻的两个元素。2. 如果顺序不正确(例如,前一个元素大于后一个元素),则交换它们。3. 继续进行这样的遍历和比较,直到到达列表的末尾。4. 重复以上步骤,直到整个列表都被排序。2.选择排序。原创 2024-09-29 22:05:20 · 863 阅读 · 0 评论 -
沥川的算法学习笔记:基础算法(2)----归并排序
具体的方法是在合并两个有序子数组的步骤中,当将左子数组的元素放入临时数组时,如果右子数组中还剩余的元素比当前的左子数组元素要小,则说明存在逆序对。统计逆序对的数量,每次发现逆序对时,将逆序对的数量加上右子数组当前元素的位置与左子数组剩余元素的数量,即逆序对的数量 += len(left) - left_pointer。归并排序是一种常见的排序算法,它的基本思想是将一个数组划分成两个子数组,然后分别对子数组进行排序,最后将两个有序的子数组合并成一个有序的数组。合并两个有序的子数组,得到一个更大的有序数组。原创 2024-11-01 15:00:33 · 480 阅读 · 0 评论 -
沥川同学的算法笔记——贪心算法(1)
1.把解决问题的步骤分为若干步;2.解决每一步时都选择当前看起来最优的策略,3.希望得到全局最优解。贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最好或最优决策的算法。其核心思想是通过局部最优的选择,希望最终能够达到全局最优的解。特点:1. 贪心选择性质:即做出每步的选择时,都采取当前状态下的最优选择。这种选择应该是局部最优的,并希望通过局部最优解最终达到全局最优解。原创 2023-12-10 17:58:25 · 478 阅读 · 2 评论 -
沥川的算法学习笔记:基础算法(1)----快速排序
快速排序的基本思想是选择一个基准元素,将数组分成两个子数组,其中一个子数组的元素都小于等于基准元素,另一个子数组的元素都大于等于基准元素,然后对这两个子数组递归地应用快速排序算法。将数组分成两个子数组,左边的子数组中的元素都小于等于基准元素,右边的子数组中的元素都大于等于基准元素。最坏情况:如果数组已经有序或接近有序,并且每次选择第一个或最后一个元素作为基准元素,则快速排序的时间复杂度会退化为O(n^2),这是因为每次划分只能将数组分成两个部分,其中一个部分为空,没有减少问题的规模。原创 2024-10-17 20:13:03 · 612 阅读 · 0 评论