数据结构与算法
文章平均质量分 75
饕子
我是北大信息管理系大数据管理与应用方向学生,我对人工智能、计算机视觉、计算机图形学、文本挖掘、搜索引擎、机器学习(深度学习)、计算神经科学、知识图谱、NLP等方向感兴趣。
展开
-
白鲸优化算法学习笔记
白鲸优化算法(Whale Optimization Algorithm,简称WOA)是一种基于自然界中的白鲸行为而发展起来的启发式优化算法。该算法模拟了白鲸群体的寻食行为,可以用于解决各种优化问题。本篇博客将详细介绍白鲸优化算法的原理、步骤和应用,并提供相关的代码示例。原创 2023-07-17 17:35:47 · 354 阅读 · 0 评论 -
排序算法的稳定性和时空复杂度分析
本文从排序算法的稳定性和时空复杂度两个方面对常见的排序算法进行了分析和评估。稳定性是评估排序算法优劣的一个重要指标,它在某些场合下非常重要。时空复杂度是评估排序算法效率的关键指标,具体时间和空间需求随着算法不同而有所变化。在实际应用中,我们应根据具体场景和需求选择适当的排序算法,以提高程序的效率和可维护性。原创 2023-06-16 15:04:20 · 1098 阅读 · 0 评论 -
Kosaraju算法,超全解释
Kosaraju算法是一种用于寻找有向图强连通分量的经典算法。它由印度计算机科学家Sambasiva Kosaraju于1978年提出。在本文中,我将会详细介绍Kosaraju算法的原理、步骤以及实现方式,并对该算法进行性能分析和优化。原创 2023-06-16 14:44:51 · 1547 阅读 · 0 评论 -
模拟算法介绍
模拟算法是一种常用的计算机算法,它模拟了实际问题的运行过程,并通过数学模型来预测结果。模拟算法可以应用于各个领域,例如物理、化学、生物、计算机网络等等。本文介绍了模拟算法的基本原理、应用场景、算法流程和优缺点等方面,希望对大家有所帮助。原创 2023-06-15 13:39:39 · 1411 阅读 · 0 评论 -
Rolling Hashes,超全解释
Rolling Hashes 是一种快速计算字符串哈希值的方法,它可以解决大部分字符串匹配问题,并且实现简单,易于理解。本文介绍了 Rolling Hashes 的基本原理、应用场景、算法流程和优缺点等方面,希望对大家有所帮助。原创 2023-06-15 13:37:30 · 421 阅读 · 0 评论 -
Recursion Tree
递归树是一种用于分析递归算法的图形模型。递归树可以帮助我们更好地理解递归算法的运行过程,可以帮助我们分析算法的时间复杂度和空间复杂度,并可以帮助我们优化算法。本文详细介绍了递归树的构建方法、应用、常见算法及优缺点,希望对大家有所帮助。原创 2023-06-15 10:27:20 · 893 阅读 · 0 评论 -
Geometric folding algorithm,超全解释
Geometric folding algorithm是指将二维平面上的纸张沿着折痕对其进行几何变换的一种算法。它在计算机图形学、计算机辅助设计、计算机视觉等领域得到了广泛的应用,成为一个重要的研究方向。本文将详细介绍Geometric folding algorithm的基本概念、应用场景、算法实现和未来发展方向,以及与计算机科学中其它相关领域的联系。原创 2023-06-15 08:07:41 · 124 阅读 · 0 评论 -
NP算法,超全解释
NP算法是一类重要的计算问题,其特点是能够在多项式时间内验证一个解是否正确。NP算法包括确定性算法的验证和非确定性算法的求解两种形式,可以使用穷举搜索、近似算法、随机化算法和启发式算法等策略来进行求解。与之相对应的是P算法和NP完全问题,它们分别指能够在多项式时间内求解的问题和既是NP问题又是NP难问题的问题。虽然NP问题目前还没有找到一个高效的、多项式时间的算法来求解它们,但是对于NP问题的求解仍然有许多值得研究和探索的方向。原创 2023-06-15 08:04:30 · 1426 阅读 · 0 评论 -
Rabin-Karp算法,超全解释
Rabin-Karp算法是一种高效的字符串匹配算法,采用滑动窗口和哈希函数的方法,在平均情况下仅需O(n+m)次比较操作就可以完成匹配过程。Rabin-Karp算法包含两个步骤:预处理和匹配。在实际应用中,可以通过多重哈希、指纹压缩、字符串预处理等优化策略进一步提高Rabin-Karp算法的运行效率。原创 2023-06-14 23:33:21 · 1297 阅读 · 1 评论 -
Boyer-Moore算法,超全解释
Boyer-Moore算法是一种高效的字符串匹配算法,采用反向搜索的方式,在最坏情况下仅需O(n/m)次比较操作就可以完成匹配过程。Boyer-Moore算法包含两个步骤:预处理和匹配。在实际应用中,可以通过双关键字索引、快速跳跃、多模式匹配等优化策略进一步提高Boyer-Moore算法的运行效率。原创 2023-06-14 23:29:42 · 1034 阅读 · 0 评论 -
队列学习笔记
队列是一种重要的数据结构,具有许多优秀的性质和应用。掌握队列的基本操作和实现方法,以及队列在广度优先搜索和循环队列等方面的应用,是算法和数据结构学习中必不可少的一环。以上就是队列学习笔记的全部内容,希望对大家有所帮助!原创 2023-07-19 20:02:58 · 54 阅读 · 0 评论 -
栈学习笔记
栈是一种重要的数据结构,具有许多优秀的性质和应用。掌握栈的基本操作和实现方法,以及栈在表达式求值、括号匹配和函数调用等方面的应用,是算法和数据结构学习中必不可少的一环。以上就是栈学习笔记的全部内容,希望对大家有所帮助!原创 2023-05-19 20:54:25 · 117 阅读 · 0 评论 -
二叉树学习笔记
二叉树是一种重要的数据结构,具有许多优秀的性质和应用。掌握二叉树遍历、性质以及应用是算法和数据结构学习中必不可少的一环。以上就是二叉树学习笔记的全部内容,希望对大家有所帮助!原创 2023-05-19 20:52:39 · 55 阅读 · 0 评论 -
贪心算法学习笔记
贪心算法是一种高效的算法,适用于一些最优化问题,并且时间复杂度低。但是由于其局限性,需要针对不同的问题进行具体的优化。以上就是贪心算法的学习笔记,希望对大家有所帮助。原创 2023-05-19 20:51:37 · 67 阅读 · 0 评论 -
图和搜索学习笔记
图(Graph)是由节点(Vertex)和边(Edge)组成的二元组GVE。其中,V是节点集合,E是边集合。另外,对于无向图,边uv∈E表示节点u和节点v之间有一条无向边;对于有向图,边uv∈E表示从节点u到节点v有一条有向边。原创 2023-05-19 10:57:57 · 44 阅读 · 0 评论 -
AVL树学习笔记
AVL树是一种自平衡的二叉搜索树,它的平衡性是通过旋转操作来实现的。AVL树的高度不会超过log(n),因此,AVL树的查找、插入、删除操作的时间复杂度均为O(log(n))。AVL树虽然能够保证平衡性,但其旋转操作也会带来一定的开销。对于大多数应用场景而言,红黑树通常是更好的选择。原创 2023-05-19 10:28:08 · 44 阅读 · 0 评论 -
二叉排序树学习笔记
若左子树非空,则左子树上所有节点的值均小于它的根节点的值。若右子树非空,则右子树上所有节点的值均大于它的根节点的值。左右子树也分别为二叉排序树。8/ \3 10/ \ \1 6 14/ \ /4 7 13二叉排序树是一种经典的数据结构,具有高效的搜索、插入和删除等操作,应该在编程及算法学习中多加掌握。但是由于其复杂度与插入顺序有关,因此在实际应用中需要结合具体情况来选择合适的算法和数据结构。原创 2023-05-19 10:24:44 · 84 阅读 · 0 评论 -
并查集学习笔记
本文介绍了并查集的相关概念、基于树形结构的实现方法以及具体应用。通过学习本文,相信读者已经掌握了并查集的相关知识,并可以运用它来解决各种算法竞赛中的问题。原创 2023-05-19 10:21:14 · 24 阅读 · 0 评论 -
堆学习笔记
堆是一种数据结构,它的本质是一个完全二叉树,而且它还满足一个性质:就是在堆中,每个节点的值都必须大于或者等于(小于或者等于)其子树中每个节点的值。例如,“最大堆”中,根节点的值是所有节点中最大的,而在“最小堆”中,根节点的值是最小的。原创 2023-05-19 10:13:25 · 24 阅读 · 0 评论 -
Pointer Machine学习笔记
Pointer Machine是一种强大而灵活的计算模型,它可以用于实现各种程序分析、自然语言处理和图像识别模型的底层算法。本文对Pointer Machine进行了介绍,并给出了一个使用Python语言实现的简单示例。希望本文对读者对Pointer Machine有更深入的了解和认识。原创 2023-05-19 10:11:48 · 109 阅读 · 0 评论 -
单调栈学习笔记
单调栈就是满足单调性的栈。单调性是指栈中元素的大小关系单调递增或单调递减。求每个元素左(右)边离它最近的小于(大于)它的数的位置求每个元素左(右)边离它最近的比它小(大)的数的位置对于第一种问题,我们主要用到的是单调递减栈;对于第二种问题,我们主要用到的是单调递增栈。下面分别用具体的例子来说明单调栈的使用。单调栈是一个非常实用的数据结构,它可以大大简化代码的复杂度。造成单调性的原因是单调栈只维护了单调递增或单调递减的序列,从而缩小了数据分析的范围。原创 2023-05-19 10:04:23 · 46 阅读 · 0 评论 -
树状数组学习笔记
树状数组(Fenwick Tree)是一种动态维护序列前缀和的数据结构,由 Peter M. Fenwick 在1994年发明。它可以在OlognO(\log n)Ologn单点修改:将序列中某个元素加上一个值Δ\DeltaΔ;区间查询:查询序列1x[1,x]1x的元素和。原创 2023-05-19 09:59:07 · 39 阅读 · 0 评论 -
线段树学习笔记
线段树(Segment Tree)是一种高效的数据结构,可以帮助我们在Ologn的时间内进行区间查询和区间修改等操作。原创 2023-05-19 09:55:12 · 31 阅读 · 0 评论 -
最小生成森林学习笔记
给定一个带权无向图GVEw,其中V为点集,E为边集,wE→R为权值函数。一个生成森林是一个由若干棵生成树组成的集合。如果森林中每个连通分量都是一棵生成树,则称该生成森林为最小生成森林。原创 2023-05-19 09:55:20 · 258 阅读 · 0 评论 -
最大权值环
给定一个加权有向图GVEw,其中V为点集,E为边集,wE→R为权值函数。称图G的一个环Cv0v1⋯vk−1是最大权值环,当且仅当C中任意相邻两个点间均有一条边,并且C的权值wC∑i1kwvi−1vi是所有环中最大的。原创 2023-05-19 09:45:42 · 65 阅读 · 0 评论 -
差分约束系统学习笔记
差分约束系统是求解不等式的一种有效方法,广泛应用于计算机网络、图形学等领域。对于一个差分约束系统,可以使用 SPFA 或 Bellman-Ford 算法进行求解。在实现时,需要注意将不等式转化为限制图中的带权边,并使用判重数组防止重复访问。oi-wiki。原创 2023-05-19 09:42:17 · 51 阅读 · 0 评论 -
Hierholzer算法学习笔记
Hierholzer 算法是寻找欧拉回路的有效方法。在实际应用中,欧拉回路可以提供启示,例如旅行商问题、地图着色问题等。在实现时,需要注意使用栈记录路径,以及遍历每个节点后及时更新起点。原创 2023-05-19 09:35:41 · 171 阅读 · 0 评论 -
欧拉回路学习笔记
欧拉图与欧拉回路的定义是初学者必须掌握的知识点。Fleury 算法适用于 m 小的图,容易实现;Hierholzer 算法适用于 m 大的图,效率更高。在旅行商问题、地图着色问题等实际应用中,欧拉回路可以提供启示。原创 2023-05-19 09:31:49 · 65 阅读 · 0 评论 -
环上动态规划学习笔记
环上动态规划需要考虑拆环的问题。在处理环上动态规划时,需要使用滚动数组进行空间优化。原创 2023-05-19 09:13:56 · 56 阅读 · 0 评论 -
最小环覆盖学习笔记
对于任意一个有向图G = ,有E = A∪B,则|V| = δ(A) + δ(B)。其中,δ(A) 表示从 A 中可以到达的节点数,δ(B) 表示可以到达 B 的节点数。在二分图上求解最大权完美匹配的算法。时间复杂度为 O(n^3)。在二分图上求解最小权完美匹配的算法。时间复杂度为 O(n^4)。在任意图上求解最小环覆盖的算法。时间复杂度为 O(n^3)。求解最大匹配数的算法。时间复杂度为 O(n^3)。[1] 程序设计竞赛入门经典 (第2版)有向图的最小环覆盖数等于其最大匹配数。原创 2023-05-19 09:09:13 · 97 阅读 · 0 评论 -
timsort学习笔记
timsort是一种排序算法,它是由Tim Peters在2002年为Python语言开发的。timsort的特点是使用了插入排序和归并排序两种算法,并通过一些技巧来提高排序效率和稳定性。目前,timsort已经被广泛应用于各种编程语言中。原创 2023-05-17 14:47:14 · 52 阅读 · 0 评论 -
粒子群算法学习笔记
粒子群算法是一种基于群体智能的优化算法,它通过模拟鸟群捕食行为来寻找最优解。在不同的应用场景下,我们可以根据需要调整算法的参数和流程。本篇文章对粒子群算法的原理、应用场景和流程进行了介绍,希望您可以从中受益并开展更多的研究工作。原创 2023-05-15 10:04:10 · 475 阅读 · 1 评论 -
BPThompson算法
本文介绍了BPThompson算法的基本思想、流程和时间复杂度分析。BPThompson算法是解决二分图最大权匹配问题的高效算法,它通过寻找增广路和最短增广路来求解最大权匹配问题,具有时间复杂度低,实现简单等优点。原创 2023-05-11 19:11:52 · 43 阅读 · 0 评论 -
近似匹配:编辑距离的计算
本文介绍了编辑距离的定义、动态规划算法实现以及应用场景。编辑距离是一种非常有用的技术,可以帮助我们计算两个字符串之间的相似性,是自然语言处理和计算机科学中重要的概念之一。原创 2023-05-11 19:09:55 · 345 阅读 · 0 评论 -
BPM算法学习笔记
本文介绍了BPM算法的基本概念、算法流程、花式搜索、增广路和缩花等关键内容。BPM算法是解决二分图最大匹配问题的高效算法,它通过寻找增广路和缩花来求解最大匹配问题,具有时间复杂度低,实现简单等优点。原创 2023-05-11 19:08:35 · 281 阅读 · 0 评论 -
Four-Russian方法
本文介绍了Four-Russian方法的基本思想、预处理过程、映射方法和排序过程。通过使用Four-Russian方法,可以极大地降低排序的时间复杂度,是一种非常实用和高效的算法技术。原创 2023-05-11 19:06:15 · 132 阅读 · 0 评论 -
布谷鸟散列笔记
本篇文章介绍了布谷鸟散列的基本概念、实现原理、算法优化和代码实现方法。布谷鸟散列是一种用于解决哈希冲突的有效算法,具有速度快、空间占用小等特点,在实际应用中得到了广泛的应用。在使用布谷鸟散列时,需要注意选择合适的哈希函数、桶大小和替换策略,并进行动态扩容等优化操作,从而提高散列表的效率和稳定性。同时,还需要关注算法的时间复杂度、正确性和安全性,避免出现损失性能或者数据安全的问题。原创 2023-05-10 13:28:02 · 236 阅读 · 0 评论 -
二分图的覆盖与独立集
本篇文章介绍了二分图的覆盖与独立集相关的概念、定义和算法实现方法,包括覆盖数、最小点覆盖、独立集、最大独立集、完美匹配、Hopcroft-Karp算法等内容。在学习二分图相关算法时,需要注意掌握相关概念和定义,并尽可能多地掌握不同的算法实现方法。同时,需要注重算法的时间复杂度和正确性,避免出现漏洞和错误。总之,学习二分图相关算法对于提高算法和数据结构的理解和应用能力非常有帮助,也是各类算法竞赛和编程面试中必备的知识点。如此重要的知识点,切勿急于求成,需要反复学习、练习和总结,才能真正掌握。原创 2023-05-10 13:26:34 · 293 阅读 · 0 评论 -
网络流算法笔记
网络流是指在一个有向图中,每条边都有一个容量限制,同时还有一个源点sss和一个汇点ttt。在这个有向图中,我们需要找到一种从源点sss到汇点ttt的路径,并使得这条路径上通过的边的流量之和最大。网络流是一种非常重要的算法,在计算机科学中有着广泛的应用。我们可以通过Ford-Fulkerson算法、Edmonds-Karp算法、Dinic算法和ISAP算法等来求解最大流问题。同时,我们也可以采用一些优化技巧,如分层图、多路增广和贪心优化等来加速算法的运行。原创 2023-05-10 13:22:51 · 280 阅读 · 0 评论 -
数据结构:分块学习笔记
分块是一种将一个序列划分为若干个块,并对每个块记录一些辅助信息的数据结构。具体而言,可以将一个长度为nnn的序列分成n\sqrt{n}n个块,每个块包含n\sqrt{n}n个元素。在进行操作时,首先找到所在块,然后暴力计算块内元素或者利用辅助信息计算。分块是一种常见的数据结构,可以用于解决各种问题。它可以在OnO(\sqrt n)On的时间内完成区间询问。分块数据结构常见的优化技巧包括预处理块内信息、使用分块信息缓存、懒惰标记、使用优化常数的数据结构等。原创 2023-05-10 13:22:20 · 128 阅读 · 0 评论