
常用算法
算法
Anpunph.
这个作者很懒,什么都没留下…
展开
-
分块查找(索引表查找)
将数据划分为大小相等的块(一般为 √n 大小),并创建一个索引数组(称为块索引)来存储每个块的最大值。分块查找是一种基于分治思想的搜索算法,适用于。(对块索引数组进行二分查找)对于常规的内存中的数据,,找到目标值所在的块。:然后在找到的块内进行。用于存储块索引数组。(如磁盘存储),但需要。它通过将数据分成若干。,从而提高查找效率。,确定目标值的位置。(每块大小为 √n)原创 2025-03-24 11:04:58 · 384 阅读 · 0 评论 -
插值查找和斐波那契查找
插值查找 数据分布均匀 平均 O(log log n),最坏 O(n) O(1) 均匀分布的大规模数据。斐波那契查找 访问代价高的有序数据 O(log n) O(1) 需要减少访问次数的场景。它通过预测要查找的值可能的位置来减少搜索次数。斐波那契查找适用于存储访问成本高的情况,比如磁盘存储。斐波那契查找基于斐波那契数列来划分搜索区域,适用于。插值查找是一种改进的二分查找,适用于。插值查找更快,但对数据分布要求高;的场景(如磁盘存储)。原创 2025-03-24 10:27:27 · 321 阅读 · 0 评论 -
前缀和的两种构造方法
两种方法的区别在于构造的前缀和数组的长度,是nums.length + 1还是nums.length;如果是nums.length;则构造的前缀和preSum[0] = nums[0];如果是nums.length + 1,则构造的前缀和preSum[0] = 0;原创 2024-12-14 17:16:05 · 229 阅读 · 0 评论 -
鸽巢排序算法
鸽巢排序(Pigeonhole Sort),也被称为基数分类,是一种在特定条件下非常高效的排序算法。原创 2024-10-11 11:08:45 · 666 阅读 · 1 评论 -
桶排序算法
桶排序(Bucket Sort)是一种基于分布的排序算法,也被称为箱排序。它的工作原理是将数组分到有限数量的桶(或区间)里,然后对每个桶内的数据分别进行排序,最后依次把各个桶中的记录列出来,从而得到有序序列。桶排序是鸽巢排序的一种归纳结果,当要被排序的数组内的数值是均匀分配的时候,桶排序可以使用线性时间(Θ(n))完成排序。但需要注意的是,桶排序并,因此它不受O(n log n)下限的影响。原创 2024-10-11 11:05:33 · 735 阅读 · 0 评论 -
冒泡排序算法
冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行的,直到没有再需要交换的元素为止,这意味着数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(或说是排序的开头位置),就如同水中的气泡一样上升到水面。冒泡排序的写法可以简单分为两种方式,分别是:前同后异、前异后同。原创 2024-08-28 21:25:50 · 1642 阅读 · 0 评论 -
不定长滑动窗口(求子数组个数)的两类典型应用
不定长滑动窗口,也可以称之为双指针;原创 2024-08-27 18:16:56 · 411 阅读 · 0 评论 -
分组循环算法
分组循环算法(Group Round Robin Algorithm)通常用于将一组元素(如任务、数据项等)均匀地分配到多个组中,并可能在这些组之间循环地选择以进行进一步处理。这种算法在负载均衡、任务调度、数据分区等场景中非常有用。原创 2024-08-22 18:07:03 · 604 阅读 · 0 评论 -
计数排序算法
计数排序(Counting Sort)是一种非比较型整数排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。原创 2024-08-21 15:19:46 · 725 阅读 · 0 评论 -
秦九韶算法
秦九韶算法是一种将一元n次多项式的求值问题转化为n个一次式的算法,这种算法通过减少乘法的次数,大大提高了多项式求值的效率。秦九韶的这一贡献被详细记载在他的数学著作《数书九章》中,该书系统地总结和发展了高次方程的数值解法与一次同余问题的解法,是中国古代数学的重要里程碑。原创 2024-08-21 22:42:17 · 610 阅读 · 0 评论 -
KMP算法的两种实现形式
这个方式下,模式串匹配失败的回退方式是从本身位置的前一个位置处,获取回退位置。"leeto" 没有在 "leetcode" 中出现,所以返回 -1。这个方式下,模式串匹配失败的回退方式是从本身位置,获取回退位置。字符串的第一个匹配项的下标(下标从 0 开始)。第一个匹配项的下标是 0 ,所以返回 0。"sad" 在下标 0 和 6 处匹配。原创 2024-08-12 20:56:48 · 264 阅读 · 0 评论 -
Fisher-Yates 洗牌算法
Fisher-Yates 洗牌算法(也称为 Knuth 洗牌算法),是一种在编程中用来随机排列一个有限序列(比如数组)的有效算法。其核心思想是遍历数组,对于每个位置,随机选取一个包括当前位置在内的、尚未处理的位置,然后与当前位置交换元素。这个过程一直进行到遍历完所有元素。Fisher-Yates 洗牌算法的一个关键点是确保每个元素都能等概率地出现在数组的任何位置上。原创 2024-08-17 15:05:50 · 449 阅读 · 0 评论 -
二分查找算法详解
二分查找算法(Binary Search Algorithm)是一种在中查找特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到元素。二分查找算法的,其中n是数组中的元素数量。这意味着随着数组大小的增加,查找所需的时间以对数速度增长,相对于简单的线性查找(时间复杂度为O(n))来说,效率要高得多。原创 2024-08-16 18:44:30 · 406 阅读 · 0 评论 -
定长滑动窗口算法
在Java中实现定长滑动窗口算法,主要用于处理数组或列表中的一系列元素,通过固定大小的窗口来遍历这些元素,并在每个窗口位置执行特定的操作(如求和、查找最大值等)。然后,方法通过一个循环来滑动窗口,每次循环都会从当前和中减去窗口最左边的元素,并加上新进入窗口的元素,从而更新当前和,并将其存储在。以下是一个使用Java实现的定长滑动窗口算法示例,该示例用于计算给定数组中每个滑动窗口内的元素和。在初始化阶段,方法计算了第一个窗口的元素和,并将其存储在。,因为每个窗口都会从数组的开始向后滑动,直到数组末尾的。原创 2024-08-19 15:40:42 · 461 阅读 · 0 评论