数据结构与算法
文章平均质量分 96
介绍常用的数据结构和算法
aabond
这个作者很懒,什么都没留下…
展开
-
重温数据结构与算法之前缀和
前缀和(Prefix Sum),也被称为累计和,是一种在计算机编程算法领域中广泛应用的重要概念和技巧。它通过将一个序列中的元素累加起来,得到一个新的序列,其中每个元素表示原序列中对应位置及其之前所有元素的和。前缀和的简洁性和高效性使其在各种算法和问题中有着广泛的应用。前缀和有许多实际的应用。例如,前缀和可以用于计算区间内的和。无论是静态区间查询还是动态更新的场景,前缀和都可以为我们提供快速的求解方法。它可以在常数时间内计算出任意区间的和,而不受区间长度的影响。这种特性使得前缀和在处理数据流问题时非常有用。原创 2023-11-10 17:54:16 · 306 阅读 · 0 评论 -
重温数据结构与算法之Manacher算法
回文子串,顾名思义,即字符串中满足回文性质的子串。在算法设计与分析中,回文子串经常作为研究和讨论的重点,例如 POJ 3974 题目中的最长回文子串问题,以及 LeetCode 0005 题目中求解最长回文子串长度的问题。中心扩展算法是一种简单直观的方法,它通过以每个字符为中心向两边扩展来寻找回文子串,然而其时间复杂度为On2O(n^2)On2,动态规划同样,也存在效率低下的问题。马拉车算法(Manacher Algorithm)是一种高效解决回文字符串问题的算法。原创 2023-08-08 23:19:26 · 342 阅读 · 0 评论 -
重温数据结构与算法之KMP算法
KMP 算法是一种字符串匹配算法,它可以在一个主串中查找一个模式串的出现位置。在实际应用中,字符串匹配是一个非常常见的问题,比如在搜索引擎中搜索关键词、在文本编辑器中查找字符串等等。 KMP 算法的发明者是 DonaldKMorris 和 VaughanPratt,他们在1977年发表了一篇论文《Fast Pattern Matching in Strings》,其中Donald Knuth 还是《计算机程序设计艺术》的作者。 相比于暴力匹配算法的时间复杂度OnmO(nm)Onm。原创 2023-06-28 08:30:00 · 351 阅读 · 0 评论 -
重温数据结构与算法之A star 算法
A*(A-Star)算法是一种静态路网中求解最短路径有效的直接搜索方法,也是解决许多搜索问题的有效算法。A*算法属于启发式搜索算法,它结合了最佳优先(Best-First)搜索和Dijkstra算法的优点,能够快速地在图中找到一条从起点到终点的最短路径。自从1968年由 Peter Hart, Nils Nilsson 和 Bertram Raphael 提出以来,A* 算法已经成为了许多领域中最常用的路径规划算法之一。最佳优先搜索通过使用启发函数来评估每个节点的优先级,从而快速地找到目标节点。原创 2023-06-06 14:37:05 · 1264 阅读 · 1 评论 -
机器学习小结之KNN算法
KNN(K-Nearest Neighbor)算法是一种最简单,也是一个很实用的机器学习的算法,在《机器学习实战》这本书中属于第一个介绍的算法。它属于基于实例的有监督学习算法,本身不需要进行训练,不会得到一个概括数据特征的模型,只需要选择合适的参数 K 就可以进行应用。KNN的目标是在训练数据中发现最佳的 K 个近邻,并根据这些近邻的标签来预测新数据的标签。每次使用 KNN 进行预测时,所有的训练数据都会参与计算。分类问题,同时天然可以处理多分类问题,比如根据音乐的特征,将其归类到不同的类型。原创 2023-05-04 10:21:20 · 1675 阅读 · 0 评论 -
重温数据结构与算法之摩尔投票法
在统计学中,众数是一种重要的集中趋势指标,它表示一组数据中出现次数最多的那个值。此外在一个集合中,如果一个元素的出现次数比其他所有元素的出现次数之和还多,那么就称它为这个集合的绝对众数(等价地说,绝对众数的出现次数大于总元素数的一半)。例如,在{1,2,3,3,4}这组数据中,3就是众数,因为它出现了两次,而其他值都只出现了一次,但是没有绝对众数。寻找众数可以帮助我们了解数据的主要特征和分布情况,在某些场合下也可以作为数据代表或近似值。例如,在民意调查中,我们可能会关注哪个候选人得到了最多人的支持;原创 2023-03-27 11:00:00 · 996 阅读 · 0 评论 -
重温数据结构与算法之宽度优先搜索
广度优先搜索(,简称BFS),是一种遍历图存储结构的一种算法,它既适用于无向图,也适用于有向图。BFS 算法的基本思想是从一个起始顶点开始,依次访问其相邻的未被访问过的顶点,并将它们加入到一个队列中,然后从队列中取出一个顶点作为新的起始顶点,重复上述过程,直到队列为空或者找到目标顶点为止。从一个顶点开始,按层次访问其相邻的顶点,然后再访问下一层的顶点,直到遍历完所有的顶点。使用队列来存储待访问的顶点,保证先进先出的顺序。能够找到最短路径,适用于寻路等问题。原创 2023-03-14 11:29:05 · 903 阅读 · 0 评论 -
重温数据结构与算法之深度优先搜索
深度优先搜索(DFS)是一种遍历或搜索树或图数据结构的算法。该算法从根节点开始(在图的情况下,选择一些任意的节点作为根节点),并在回溯之前尽可能地沿着每个分支进行探索。需要额外的内存,通常是一个堆栈,来跟踪到目前为止沿着指定分支发现的节点,这有助于回溯。从一个起始节点开始,沿着一条路径不断访问邻接节点,直到没有未访问的邻接节点为止,然后回溯到上一个节点,继续访问其他邻接节点。利用栈或递归来实现。可以产生目标图的相应拓扑排序表。简单易实现。占用空间少。原创 2023-03-08 10:00:24 · 2000 阅读 · 0 评论 -
重温数据结构与算法之约瑟夫问题
约瑟夫问题,是一个计算机科学和数学中的问题,在计算机编程的算法中,类似问题又称为约瑟夫环,又称“丢手绢问题”。据说著名犹太历史学家 Josephus 有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。原创 2023-01-29 23:41:24 · 1503 阅读 · 0 评论 -
重温数据结构与算法之并查集
并查集是一种树型的数据结构。它的特点是由子结点找到父亲结点,用于处理一些不交集()的合并及查询问题。Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。Union:将两个子集合并成同一个集合。摘自 Wiki在计算机科学中,不相交集数据结构(Disjoint Sets),也称为并查集或合并查找集(),是存储不相交(非重叠)集合的数据结构。同样地,它将一个集合的一个分区存储为不相交的子集。它提供添加新集、合并集合(用联合替换它们)和查找集合成员的操作。原创 2022-11-09 22:33:14 · 426 阅读 · 0 评论 -
重温数据结构与算法之单调栈
单调栈(monotonous stack)是指栈的内部从栈底到栈顶满足单调性的栈结构。其实单调栈就是“栈 + 维护单调性”,根据元素依次增大/减小可分为两种递增单调栈:栈中元素从栈底到栈顶依次增大递减单调栈:栈中元素从栈底到栈顶依次减小单调栈通常用来解决这种问题:给出n个数,用 O(n) 的时间求出每个数左/右边第一个比它小/大的数.。原创 2022-10-10 12:14:44 · 616 阅读 · 0 评论 -
重温数据结构与算法之动态规划
摘自 LeetcodeDP 在笔试和面试中经常会遇到,而 DP 最重要有三点:状态定义,初始状态和状态转移方程。下面会通过 Leetcode 上一些题目来练习 DP原创 2022-10-07 13:40:12 · 525 阅读 · 2 评论 -
重温数据结构与算法之AVL树可视化
当连续并且有序的数据陆续插入一棵二叉搜索树()时,这时树就会退化为链表,查找、插入和删除都需要花费O(n)O(n)O(n)时间,这时二叉搜索树的优势就没有了,AVL树的发明就是为了解决这种问题。在计算机科学中,AVL树是一种自平衡的二叉搜索树。在AVL树中,任何节点的两个子树的高度最多相差一,如果在插入或删除时,它们相差大于一时,会进行自平衡以恢复此属性。在平均和最坏情况下,查找、插入和删除都需要O(logn)时间。...原创 2022-07-20 18:14:47 · 414 阅读 · 0 评论 -
重温数据结构与算法之排序算法可视化
根据百度百科和维基百科可以看出排序算法就是将一组元素以递增或递减的顺序重新排列的方法。作用方便查找在一个无序的数组中查找需要O(n)O(n)O(n)的时间,而在一个有序的数组中使用二分法查找只需要O(logn)O(logn)O(logn)时间。你可能不会想到这其中的差异,举个栗子:一个数组中有 2322^{32}232 个数,无序数组查找平均需要21亿次,而有序数组只需要32次计算机执行效率更快stackoverflow上有一个高赞问题: why-is-processing-a-sorted-array-.原创 2022-07-07 18:29:48 · 489 阅读 · 0 评论