算法
文章平均质量分 92
generalfyx
这个作者很懒,什么都没留下…
展开
-
哈密尔顿路径问题解析
问题描述哈密尔顿路径属于旅行商问题,是一个NP完全问题,即没有一个合适的算法来解决它,只能用朴素算法(也就是通常所说的暴力算法)去进行优化。但这类问题的时间复杂度是极其可怕的O(n!),当n比较小的时候,还可以通过暴力法解决,但当n=15的时候,15!=1307674368000;已经达到了万亿级别;你可以想象下就算以计算机的计算能力,也要跑多久才能解出答案;所以NP问题最常用的解法是近似解,即无解,寻找大概率出现的近似解;Hamilton路径的定义:在一张图中,从点0到点n-1不重不漏的恰好经过每原创 2020-07-31 16:31:41 · 5235 阅读 · 0 评论 -
KMP算法--字符串匹配
字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算法不太容易理解,网上有很多解释,但读起来都很费劲。直到读到Jake Boxer的文章,我才真正理解这种算法。下面,我用自己的语言,试图写一篇比较好懂的KMP转载 2020-07-02 17:16:20 · 90 阅读 · 0 评论 -
前缀和算法应用
前缀和算法主要应用于连续子数组的问题,包括矩阵;必要条件:连续性,子数组,与和可以联系上一:题目链接:子段求和如果我们不用sum[i]保存前i项的和,那么每次查询都要遍历一遍,如果记录下来,那么后面的查询直接相减就可以了。延伸:子数组的和的问题,具有一定的规律性见 leetcode974 和可被 K 整除的子数组 二:题目链接:最大子矩阵这是我们比赛中的一道题目,没有见过这种题型,所以上来就是各种循环遍历,果然超时了。后来看师哥题解才知道原来这是经..原创 2020-05-27 16:06:27 · 590 阅读 · 0 评论 -
floyed判圈算法
点击查看原文一、算法简述Floyd判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm),是一个可以在有限状态机、迭代函数或者链表上判断是否存在环,以及判断环的起点与长度的算法。二、基本思路本质是设置两个指针,分别为快慢指针,快指针如果检查对象存在环,那么这两个指针肯定会相遇,此时相遇的点满足慢指针走过的节点数*2=快指针走过的节点数;i = m(环的入口距离节点的其实位置) + k(相遇点距离入口转载 2020-05-27 15:51:45 · 211 阅读 · 0 评论