字符串匹配
一、KMP算法
模式串与主串做匹配时,如果是暴力匹配,在主串某趟匹配失败后,模式串要移动第一位,而主串也有苦难需要回退。
在KMP算法中,如果在匹配过程中,主串不需要回退,当匹配失败后,会从当前位置开始继续匹配。而模式串会滑动到某一位开始比较,而不是没都回退到第一位开始比较。
1、前缀表
-
前缀:除最后一个字符以外,字符串的所有头部子串。
-
后缀:除第一个字符以外,字符串的所有尾部子串。
模式串与主串做匹配时,如果是暴力匹配,在主串某趟匹配失败后,模式串要移动第一位,而主串也有苦难需要回退。
在KMP算法中,如果在匹配过程中,主串不需要回退,当匹配失败后,会从当前位置开始继续匹配。而模式串会滑动到某一位开始比较,而不是没都回退到第一位开始比较。
前缀:除最后一个字符以外,字符串的所有头部子串。
后缀:除第一个字符以外,字符串的所有尾部子串。
A*(A-Star)算法是一种静态路网中求解最短路最有效的方法。公式表示为:f(n)=g(n)+h(n),其中f(n)是节点n从初始点到目标点的估价函数,g(n)是在状态空间中从初始节点到n节点的实际代价,h(n)是从n到目标节点最佳路径的估计代价。
Dijkstra算法从物体所在的初始点开始,访问图中的结点。它迭代检查待检查结点集中的结点,并把和该结点最靠近的尚未检查的结点加入待检查结点集。该结点集从初始结点向外扩展,直到到达目标结点。Dijkstra算法保证能找到一条从初始点到目标点的最短路径,只要所有的边都有一个非负的代价值。(我说“最短路径”是因为经常会出现许多差不多短的路径。)在下图中,粉红色的结点是初始结点,蓝色的是目标点,而类菱形的有色区域(注:原文是teal areas)则是Dijkstra算法扫描过的区域。颜色最淡的区域是那些离初始点最远的,因而形成探测过程(exploration)的边境(frontier):
精确覆盖问题(英文:Exact Cover Problem)是指给定许多集合 以及一个集合 ,求满足以下条件的无序多元组 :
例如,若给出
则 为一组合法解。
问题转化
将 中的所有数离散化,可以得到这么一个模型:
给定一个 01 矩阵,你可以选择一些行(row),使得最终每列(column)都恰好有一个 1。 举个例子,我们对上文中的例子进行建模,可以得到这么一个矩阵:
常见算法
一、排序算法
插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序
二、查找算法
顺序查找、二分查找、插值查找、斐波那契查找、树表查找、分块查找、哈希查找
提示