- 博客(28)
- 收藏
- 关注
原创 洛谷讨论区关了,我有一些话想说
我虽然说知道kkksc03的用意是什么,但是我请kkksc03记住,《说句闲话,研究柯学的最好方式是》也请你记住,无论何时何地,我们都愿意接受讨论区的回归,哪怕是经历了一些不好事情的我。也许很多人都认识我,没错,我就是那个人人皆知的唐氏,szm111213。我还想到了抢管理员帖子的第一个qp,和观看哪些被管理员喷的可怜孩子。当时我看到这篇帖子的时候,我不知为何,竟然流下了眼泪。现在,讨论区总算被关了,我受伤的心也缓缓的恢复过来。我想到了和我一起讨论题目的大佬,以及欢乐的氛围。可是,我总觉得心里少了些什么。
2025-03-02 15:05:42
297
4
原创 基于哈希的字符串子串匹配算法
传统的字符串匹配算法,如KMP算法和Boyer-Moore算法,虽然在某些情况下效率很高,但在处理大量数据时可能会遇到性能瓶颈。Rabin-Karp算法是一种基于哈希的字符串匹配算法,它通过计算字符串的哈希值来快速定位匹配的位置。然而,传统的Rabin-Karp算法在处理子串匹配问题时效率不高,因为它需要为每个可能的子串长度重新计算哈希值。本文提出的基于哈希的字符串子串匹配算法在处理大量数据时表现出了良好的性能。未来的工作将集中在进一步优化算法的性能,以及探索该算法在其他领域的应用,如网络安全和数据挖掘。
2024-12-21 10:12:41
493
原创 Dijkstra算法(附【模板】单源最短路径(标准版)代码)c++
Dijkstra算法是一种用于在图中找到单源最短路径的算法。该算法由荷兰计算机科学家Edsger W. Dijkstra在1956年提出,适用于带有非负权重的有向图或无向图。Dijkstra算法能够找到图中一个节点(称为源点)到其他所有节点的最短路径。
2024-10-09 20:23:29
1146
原创 C++ priority_queue(STL)优先队列
优先队列是一种特殊的队列,其中存储的元素按照一定的优先级进行排列。在priority_queue中,优先级最高的元素能够快速被访问和删除。首先,我们介绍了priority_queue的概念和特点。它是基于堆(heap)这种数据结构实现的,通常使用最大堆来进行内部排序。最大堆保证了根节点的值最大,并且任意节点的值大于或等于其子节点的值。这种特性使得优先队列能够高效地访问和删除具有最高优先级的元素。接着,我们深入探讨了priority_queue的使用方法。
2024-09-18 21:15:05
1133
原创 欧拉筛-质数筛的神c++
欧拉筛(Euler's Sieve),又称线性筛法或欧拉线性筛,是一种高效筛选素数的方法。其核心思想是从小到大遍历每个数,同时标记其倍数为合数,但每个合数只被其最小的质因数标记一次,从而避免了重复标记,实现了线性时间复杂度的素数筛选。
2024-09-08 10:48:34
1286
原创 c++贪心、模拟超详细讲解
定义:贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。原理:贪心算法通过局部最优选择来构造全局最优解。在每一步,算法都做出一个看起来最优的决策,期望通过局部最优达到全局最优。模拟细剖是指通过模拟问题的实际发生过程,逐步推导并求解问题的方法。它强调对问题细节的精确把握和逐步推进。贪心算法和模拟细剖是两种各有特色的算法策略。贪心算法适用于具有贪心选择性质和最优子结构的问题,通过局部最优选择来快速逼近全局最优解,但可能不适用于所有情况。
2024-08-24 18:53:09
1010
原创 c++SPFA细剖
SPFA算法作为一种高效的最短路算法,在处理含有负权边的图时具有显著的优势。其通过队列优化和松弛操作实现了对Bellman-Ford算法的改进,同时保持了较高的效率。此外,通过一系列优化措施(如SLF、LLL优化等),可以进一步提高算法的性能。
2024-08-24 18:47:07
738
1
原创 c++Kruskal算法
Kruskal算法是一种用于在无向图中寻找最小生成树的经典算法。下面我将从九个方面详细剖析Kruskal算法,包括其基本原理、步骤、实例以及代码实现。
2024-08-23 16:07:56
550
原创 c++floyd算法
Floyd算法,又称为Floyd-Warshall算法,是一种经典的动态规划算法,用于求解加权图中所有顶点对之间的最短路径问题。该算法由Robert Floyd和Stephen Warshall在1962年分别独立提出。
2024-08-23 14:30:35
537
原创 前序中序后序c++
总所周知,二叉树的常用遍历方式有三种,分别是前序遍历中序遍历和后序遍历,用于按照不同的顺序访问二叉树中的节点。前序遍历:在前序遍历中,首先访问根节点,然后递归地按照前序遍历的方式访问左子树,最后递归地按照前序遍历的方式访问右子树。根左右。中序遍历:在中序遍历中,首先递归地按照中序遍历的方式访问左子树,然后访问根节点,最后递归地按照中序遍历的方式访问右子树。左根右。后序遍历:在后序遍历中,首先递归地按照后序遍历的方式访问左子树,然后递归地按照后序遍历的方式访问右子树,最后访问根节点。左右根。
2024-08-22 18:51:18
785
原创 c++高精度细剖
高精度计算是指能够处理超出标准数据类型(如intlong longfloatdouble等)范围或精度的数值运算。这在金融计算、科学模拟、密码学、大数分解等领域尤为重要。
2024-08-22 09:58:11
2186
原创 C++ queue(STL queue,队列)用法详解
图 1 queue容器底层容器必须提供这些操作:front()、back()、push_back()、pop_front()、empty() 和 size()。
2024-08-21 19:57:18
3083
1
原创 c++广度优先搜索(bfs)
广度优先搜索(Breadth-First Search, BFS)是一种用于遍历或搜索树或图的算法。它从一个根节点开始,探索尽可能近的节点,然后逐步向外层探索。在搜索过程中,它使用队列(Queue)数据结构来存储待探索的节点。下面我将详细解释广度优先搜索的各个方面。
2024-08-21 09:52:12
739
原创 c++深度优先搜索(dfs)
深度优先搜索(DFS, Depth-First Search)是一种用于遍历或搜索树或图的算法。在搜索过程中,DFS会尽可能深地搜索图的分支。当节点v的所在边都已被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这个过程一直进行到已发现从源节点可达的所有节点为止。
2024-08-21 09:45:46
434
原创 c++二分查找
二分查找(Binary Search)是一种在有序数组中查找特定元素的搜索算法。它的工作原理是将待搜索的区间分成两半,判断目标值是在左半部分还是右半部分,然后继续在相应的半区内进行查找,直到找到目标值或搜索区间被缩小为0。二分查找的时间复杂度为O(log n),其中n是数组中的元素数量,这使得它成为在有序数组中查找元素的非常高效的算法。
2024-08-20 19:29:17
229
原创 c++线性搜索
线性搜索是一种顺序搜索算法,它从数据集的一端开始,逐个检查每个元素,直到找到所需的元素或遍历完整个数据集。该算法适用于未排序或有序的数据集,但在未排序的数据集上更为常见。线性搜索是一种基础但实用的搜索算法,适用于小规模数据集或数据未排序的情况。尽管其效率不是最优的,但在某些场景下,由于其简单性和易于实现,它仍然是一个有用的工具。// 函数声明// 示例数组// 计算数组的大小// 我们要搜索的目标值// 调用线性搜索函数// 根据返回的结果打印相应的消息if (result!
2024-08-20 19:26:23
353
原创 c++基数排序
基数排序(radix sort)是一种非比较型整数排序算法,又称“桶子法”或bin sort,它透过键值的部分信息,将要排序的元素分配至某些“桶”中,以达到排序的作用。基数排序是一种稳定性排序,其时间复杂度为O(nlog®m),其中r为所采取的基数,而m为堆数(在某些情况下,也可以表示为O(nk),其中n是数组的元素个数,k是最大数字的位数)。
2024-08-20 18:15:17
359
原创 c++桶排序
桶排序(Bucket Sort)是一种基于分治策略的排序算法,它通过将数据分配到有限数量的桶中,然后对每个桶内的元素进行排序,最后将所有桶内的元素合并成一个有序序列。
2024-08-20 18:12:16
363
原创 c++归并排序
归并排序(Merge Sort)是一种建立在归并操作上的有效且稳定的排序算法,它采用分治法(Divide and Conquer)的一个非常典型的应用。下面从归并排序的原理、实现步骤、时间复杂度、空间复杂度以及应用场景等方面进行详细剖析。
2024-08-20 17:54:45
318
原创 c++插入排序
插入排序是一种简单直观的排序算法,它的工作原理类似于打扑克牌整理顺序。这个算法最早是由古希腊数学家希波克拉底(Hippocrates)提出的思想,但实际上现代计算机科学中的插入排序是由埃达·洛夫莱斯(Ada Lovelace)在她的论文中描述的一种类似算法的改进版所启发的,虽然她并没有直接实施。英文名为Insertion Sort,它的基本思想是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。每一步都将数据元素插入到已经排好序的部分中,直到所有元素都有序。
2024-08-20 14:39:30
283
原创 c++选择排序
选择是一种相对古老的算法,其基本思想可以追溯到早期计算机科学的实践。由于选择排序的实现非常直观,所以没有确切的发明者。在英文中,选择排序被称为 “Selection Sort”。选择排序不需要任何额外的存储空间,因此它也被称为“原地排序”(In-place sorting),这可能是它最早被使用的名称之一。不过,正式的命名通常就是 “Selection Sort”。
2024-08-20 14:23:57
165
原创 c++冒泡排序
冒泡排序(Bubble Sort)是一种计算机科学领域的较简单的排序算法。若文件的初始状态是正序的,一趟扫描即可完成排序。冒泡排序最好的时间复杂度为O(n)。冒泡排序总的平均时间复杂度为O(n^2)。
2024-08-20 14:02:56
298
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人