算法入门
海里真的有鱼
每次发版,必把数据库搞炸了的程序员
展开
-
关键词查找【Knuth-Morris-Pratt (KMP) 算法】
KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。原创 2024-07-25 09:35:54 · 248 阅读 · 0 评论 -
关键词查找【Aho-Corasick 算法】
【代码】关键词查找【Aho-Corasick 算法】原创 2024-07-25 09:31:54 · 566 阅读 · 0 评论 -
关键词查找【Boyer-Moore 算法】
BM算法的精华就在于BM(text, pattern),也就是BM算法当不匹配的时候一次性可以跳过不止一个字符。通常搜索关键字越长,算法速度越快。它的效率来自于这样的事实:对于每一次失败的匹配尝试,算法都能够使用这些信息来排除尽可能多的无法匹配的位置。BM算法实际上包含两个并行的算法(也就是两个启发策略):坏字符算法(bad-character shift)和好后缀算法(good-suffix shift)。这两种算法的目的就是让模式串每次向右移动尽可能大的距离(即上面的BM( )尽可能大)。原创 2024-07-25 09:26:20 · 416 阅读 · 0 评论 -
快速排序【示例】
们的计算机每秒钟可以运行 10 亿次,那么对 1 亿个数进行排序,桶排序只需要 0.1 秒,而冒。空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到了 O(N2)。设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全。快速排序之所以比较快,是因为相比冒泡排序,每次交换是跳跃式的。冒泡排序可以说是我们学习的第一个真正的排序算法,并且解决了桶排序浪费。因此快速排序的最差时间复杂度和冒泡排序是一样的,都是 O(N2),然在最坏的情况下,仍可能是相邻的两个数进行了交换。原创 2024-07-20 13:40:12 · 250 阅读 · 0 评论 -
冒泡排序【示例】
冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。第二个循环O(n-1 + n-2 +n-3 +....1)这种排序空间复杂度较堆排序少,但是时间复杂度高。答案:不要走开,请看下节——快速排序。那还有没有更好的排序算法呢?:只需要借助一个temp,第一个循环O(n-1)原创 2024-07-20 13:31:40 · 340 阅读 · 0 评论 -
最简单的桶排序【示例其实是简化版的桶排序算法,真正的桶排序算法要比这个更加复杂】
简化版的桶排序:它非常浪费空间!即便只给你 5 个数进行排序(例如这 5 个数是 1、1912345678、2100000000、18000000 和 912345678),你也仍然需要 2100000001 个“桶”,这真是太浪费空间了!还有,如果现在需要排序的不再是整数而是一些小数,比如将 5.56789、2.12、1.1、3.123、4.1234这五个数进行从小到大排序又该怎么办呢?小哼的班上只有 5 个同学,这 5 个同学分别考了 5 分、3 分、5 分、2 分和 8 分。原创 2024-07-20 13:14:42 · 145 阅读 · 0 评论