
算法与数据结构
文章平均质量分 83
哥布林军团
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
约瑟夫环问题的数学解法
问题描述:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。当m和n不太大时,可以构造循环链表模拟,实现简单,容易理解,但是时间复杂度较高。这里主要研究一下数学解法(比较绕,我花了很久才想明白)。以下是转载自别人博客,对我有帮助的一篇讲解:原文 https://www.cnblogs.com/cmmdc/p/7216726.html为了简化出列的过程转载 2021-06-13 22:57:30 · 1057 阅读 · 0 评论 -
Java中前缀树(Trie)的简介与使用 LeetCode 力扣 720 词典中最长的单词
Trie树是一种特殊的N叉树,又称字典树,单词查找树,键树等。一般用于字符串的储存,查找,比较,偶尔也会用于删除。除根节点外,Trie树的每一个节点包含一个字符,每个节点的子节点字符不重复(但不同节点可以有相同的子节点,比如表示字符串“aa”和“ba”)。从根节点到某一节点的路径为该节点对应的字符串,因此每条路径上的字符排列应该是唯一的。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销,对字符串的查找通常效率高于哈希表。画一棵前缀树:可以看到前缀树的几个要点:黄色的是根原创 2020-06-27 11:58:34 · 382 阅读 · 0 评论 -
算法与数据结构学习笔记-最优二叉搜索树(optimal binary search tree)的动态规划实现详解
一串字符中可能进行多次查找,每个字符被查找到的频率都不同,如何根据字符被查找到的频率,建立一个二叉搜索树,使得花费时间最少呢?题目:给定一列按升序排列的键值K=[k1,k2,...,kn]K=[k_1,k_2,...,k_n]K=[k1,k2,...,kn]和它们被搜索到的频率P=[p1,p2,...,pn]P=[p_1,p_2,...,p_n]P=[p1,p2,...,pn],建立...原创 2020-01-30 03:14:46 · 4065 阅读 · 1 评论 -
算法与数据结构学习笔记-字符串之最长公共子序列,LCS问题的动态规划解法
问题:给定两个字符串,找出它们的最长公共子序列。首先了解题目,子序列和字串是不同的。在字符串匹配里,子串通常指的是给定字符串的一部分,是连续的不可断开的。而子序列是不同的,是在给定字符串里,按照顺序取字符,可以连续可以断开,然后组合构成新的字符串。通常子序列都不是给定字符串的子串,但是子串也可以称为子序列。另外公共子序列不一定是最长公共子序列的子串。不同的取字符方式可以构建出相同的子序列,如...原创 2020-01-29 03:21:25 · 448 阅读 · 0 评论 -
数据结构与算法学习笔记-动态规划(dynamic programming)不适用之有向图问题
前文提到动态规划的适用条件:1.最优子结构2.重叠子问题3.无后效性。有的时候明明看起来题目可以用动态规划来解答,实际上用这种方式找不到最优答案。第3条同样适用于贪心算法。首先看一道可以用动态规划解决的问题:给定一有向未加权图(directed unweightd graph),找到从u点到v点的最短路径。这条路径一定是没有环的简单路径,否则去掉环就从多条路变为一条路,可以使路径更短。...原创 2020-01-29 00:12:20 · 931 阅读 · 0 评论 -
数据结构与算法之字符串匹配(string matching)学习笔记 朴素算法,自动机,KMP
文本编辑过程中的查找,替换功能,在一段DNA中查找特定序列等,都要用到字符串匹配。简单地说,就是在一大段字符里(可能是英文或数字)找一小段目标字串(子串,是否存在,存在多少次)。《算法导论》里用了复杂的命名法解释这个问题与相应算法,这里尽量简化。A B A C A B A C C AA B A A B A子串ABC出现2次,位置0(或1,如果把第一个位置看作1),或位置4(或5,如果把...原创 2020-01-28 04:29:32 · 631 阅读 · 2 评论 -
算法与数据结构之动态规划(dynamic programming)学习笔记及矩阵连乘问题详解
在所有的面试题目里,动态规划题目算是较难的一类了。其实只要了解其本质,你会发现动态规划不过是recursion的加强版,这一类问题的解决方式都比较类似,如果能找到暴力的递归(recursion)解法,就能将其转化为动态规划解法。首先要了解,什么是动态规划?当我们能够用递归解决一个问题,但是发现在递归的过程中,很多子问题重叠(subproblems share subproblems),相同的解被...原创 2020-01-28 04:15:04 · 321 阅读 · 0 评论