
算法
不会程序的JAVA程序媛
I'm willing to do anything but ordinary
展开
-
JAVA实现trie树(前缀树,字典树)进行敏感词检测/过滤
JAVA实现trie树(前缀树,字典树)进行敏感词检测/过滤文章目录JAVA实现trie树(前缀树,字典树)进行敏感词检测/过滤定义优点:缺点:应用敏感词检测开始构建敏感词Trie树时间复杂度敏感词去重敏感词检测去特殊字符方法结束标识符JAVA实现完整代码初始化词库定义在计算机科学中,trie树,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而原创 2020-06-19 19:25:04 · 3655 阅读 · 2 评论 -
算法学习之算法效率分析
算法效率分析基础文章目录算法效率分析基础输入规模的度量运行时间的度量单位增长次数算法的最优、最差和平均效率分析框架概要渐进符号和基本效率类型符号О符号Ω符号Θ利用极限比较增长次数基本的效率类型关于渐进时间效率:非递归算法的数学分析分析非递归算法效率的通用方案**考虑一下元素惟一性问题:验证给定数组中的元素是否全部惟一。****计算两个n阶方阵乘积的例子**递归算法的数学分析递归的思路分析递归算法效率的通用方案汉诺塔(Tower of Hanoi)问题斐波那契数列输入规模的度量几乎所有的算法,对于规模更原创 2020-06-17 15:52:03 · 4953 阅读 · 0 评论 -
算法学习之蛮力法
蛮力法蛮力法一种简单直接地解决问题的方法,常常直接基于问题的描述和所涉及的概念定义。虽然巧妙和高效的算法很少来自于蛮力法,但我们不应该忽略它作为一种重要的算法设计策略的地位。第一,和其他某些策略不同,我们可以应用蛮力法来解决广阔领域的各种问题。第二,对于一些重要的问题来说(比如:排序、查找、矩阵乘法和字符串匹配),蛮力法可以产生一些合理的算法,它们多少具备上些实用价值,而且并不限制实例的规模。第三,如果要解决的问题实例不多,而且蛮力法可以用一种能够接受速度对实例求解,那么,设计一个更高效算法所花费的代价原创 2020-06-17 15:22:37 · 2041 阅读 · 1 评论 -
算法学习之分治法
分治法文章目录分治法分治法的基本思想合并排序合并排序的递归算法合并排序举例合并排序的效率分析快速排序数组的分区算法:快速排序的例子(双向扫描)快速排序的例子快速排序效率分析折半查找折半查找伪代码折半查找举例:二叉树遍历及其相关特性二叉树遍历中序遍历(Inorder Traversal)前序遍历(Preorder Traversal)前序遍历执行过程图二叉树的构造大整数乘法和Strassen矩阵乘法改进的乘法Strassen矩阵乘法分治法解最近点对问题快包算法分治法的基本思想将规模为N的问题分解为k个原创 2020-06-17 14:48:14 · 1958 阅读 · 0 评论 -
算法学习之减治法
算法学习之减治法文章目录算法学习之减治法减治法的基本思想插入排序直接插入排序举例直接插入排序伪代码直接插入排序效率分析深度优先DFS的伪代码深度优先举例广度优先查找BFS的伪代码BFS举例DFS与BFS的比较拓扑排序求拓扑序列的方法1求拓扑序列的方法2生成组合对象的算法生成排列下面介绍三种生成方法:插入法生列排列Johnson-Trotter 法生成排列字典顺序生成排列生成子集减治法生成幂集位串法生成幂集减常因子法**假币问题**用减治法(减半)用减治法(减n/3)约瑟夫斯问题约瑟夫斯问题分析减可变规模算原创 2020-06-16 23:03:00 · 3065 阅读 · 0 评论 -
变治法
变治法文章目录变治法变治法的基本思想预排序Gauss消去法一般的线性方程组是指如下形式的方程组LU分解法计算矩阵的逆平衡查找树AVL树的平衡旋转右单旋转先左后右旋转2-3树2-3树的搜索与插入堆和堆排序堆的构建与堆结点的插入堆结点的删除堆排序Horner法则计算n次多项式的值的算法。二进制幂问题化简求最小公倍数lcm(m,n)计算图中的路径数优化问题的化简线性规划简化为图论问题变治法的基本思想首先是”变“, 将问题的实例变得更容易求解;然后是”治“,对问题的实例进行求解。变治法有三个变形:实例原创 2020-06-16 21:04:36 · 2835 阅读 · 0 评论 -
算法学习之时空权衡
时空权衡文章目录时空权衡空间换时间的技术计数排序计数排序举例计数排序算法的效率分布计数举例待排序序列:{13,11,12,13,12,12}串匹配中的输入增强技术模式匹配中的好算法大都使用了输入增强技术,最著名的算法有:朴素模式匹配算法朴素模式匹配算法的时间复杂度改进算法-KMP算法KMP算法的时间复杂度Horspool算法对每个字符c,其移动距离t (c)为:Horspool算法小结Horspool算法伪代码Boyer-Moore算法散列法开散列(分离链)闭散列(开式寻址)B树空间换时间的技术通常原创 2020-06-16 19:28:02 · 3525 阅读 · 0 评论 -
算法学习之动态规划(Dynamic programming)
动态规划(Dynamic programming)文章目录动态规划(Dynamic programming)基本思路与分治法比较斐波那契计算二项式系数时间效率分析Warshall算法定义Floyd算法最优二叉查找树二叉查找树(Binary Search Tree)背包问题记忆功能基本思路解决若干个(交叠)子问题将子问题的解用表格记录下来,避免子问题的重复计算上述表格的最终状态即为(包含)最终解与分治法比较都将问题划分为若干个子问题分治法中各子问题相互独立,而动态规划中各子问题允许相互交原创 2020-06-16 15:01:23 · 1630 阅读 · 0 评论 -
算法学习之贪婪技术(贪心算法)
贪婪技术(贪心算法)定义贪婪法建议通过一系列步骤来构造问题的解,每一步对目前构造的部分解做一个扩展,直到获得问题的完整解为止。这个技术的核心是,所做的每一步选择都必须满足:可行的:即它必须满足问题的约束。局部最优:它是当前步骤中所有可行选择中最佳的局部选择。不可取消:即选择一旦做出,在算法的后面步骤中就无法改变了理解这种方法模式一般将求解过程分成若干个步骤,在每个步骤都应用贪心原则,选取当前状态下最好的或最优的选择(局部最有利的选择),并以此希望最后对跌出的结果也是最好的或最优的解。贪心原创 2020-06-15 23:55:49 · 3954 阅读 · 0 评论