精华内容
下载资源
问答
  • 基于GPU实现允许k-差别近似串匹配并行算法.pdf
  • 网络游戏-基于MPI的WM串匹配并行算法的网络信息过滤系统.zip
  • KMP串匹配并行算法

    2011-10-28 23:20:59
    KMP串匹配并行算法。并行开发技术的应用。。
  • 串匹配(String Matching)问题是计算机科学中的一个基本问题,也是复杂性理论中研究的...本章中分别介绍改进的KMP串匹配算法,采用散列技术的随机串匹配算法,基于过滤算法的近似串匹配算法,以及它们的MPI编程实现。
  • 而且,串匹配是这些应用中最耗时的核心问题,好的串匹配算法能显著地提高应用的效率。因此,研究并设计快速的串匹配算法具有重要的理论价值和实际意义。 串匹配问题实际上就是一种模式匹配问题,即在给定的文本中...
  • 面向CPU+GPU异构计算的SIFT特征匹配并行算法.pdf
  • 串匹配算法

    2017-10-31 15:49:16
    第四节 位并行串匹配算法 37 第五节 过滤算法 与 index 41 小结 42 参考文献 43 附录A 算法源码 45 1 BM算法 45 2 BMH算法 46 3 BMHS算法 46 4 . smith 算法 47 5.kmp算法 47 A 6 自动机算法 47 A 7 bom 算法 48 A 8...
  • 为了充分利用多核处理器的硬件资源和计算能力来提高图像匹配应用的实时性,通过对自适应阈值SSDA图像匹配算法原理的分析,基于任务分解的多核并行编程模式思想,设计了一种自适应阈值SSDA图像匹配并行算法,并在多核...
  • 【字符系列】字符串匹配中的位并行算法 最近一段时间看了一点"柔性字符串匹配", 发现位并行算法在字符串匹配这个领域还是很有用的, 下面抒发一下鄙见. 首先, 字符并行算法在acm界用的貌似并不多, ...

    最近一段时间看了一点"柔性字符串匹配", 发现位并行算法在字符串匹配这个领域还是很有用的, 下面抒发一下鄙见.

    首先, 字符串位并行算法在acm界用的貌似并不多, 这跟算法本身的局限和人们对算法的了解有关.

    字符串位并行算法受限于机器字长, 所以不能用于模式串长度超过机器字长的情况, 这局限了该类算法的推广.

    但是由于位并行算法思想比较简单, 一般易于实现, 而且, 位并行这种手段本身也能保证算法性能相当可观.

    在字符串中的位并行算法, 基本是以单字符串匹配中的ShiftAnd算法和BNDM算法为基础, 扩展衍生的, 延伸到了多字符串匹配, 扩展字符串匹配和正则匹配里面.(这里的分类依据柔性字符串匹配)

    做一些变量的声明, 模式串p, p的长度是m, 文本是t.

    ShiftAnd算法, 是单字符串匹配里面的一种前缀匹配算法. 算法维护一个字符串的集合, 集合中的每个字符串既是p的前缀, 同时也是已读文本的后缀.

    而在kmp算法里面, 就是用一个预计算出来的next数组, 来求已读入文本同p的最长后缀, 而ShiftAnd算法里面的集合也是完成类似的功能.

    而, 二进制位是表达集合的一种很好的方式, 只要这样表达恰当的话.

    用一个位掩码D来表示这个集合, D的第j位被置为1, 当且仅当p1...pj是t1...ti的后缀, 而当Dm也是1的时候, 就是说, p本身是t1...ti的后缀, 找到了一个匹配.

    那么在从t中读入一个新的字符时, 如何更新这个后缀集合(即位掩码D)呢?

    首先构造一个表B, 记录字母表(a-z,A-Z)里面每个字符的位掩码, 如果pj==c, 则掩码B[c]的第j位是1, 这里的1, 用于后面说的"与"运算, 这也正是ShiftAnd算法的得名.

    上面这个式子, 就是集合更新过程的本质, 每读入一个新字符t(i+1), 就利用上面这个公式对位掩码D进行更新.

    式子中D<<1, 是要利用读入的新字符, 来构造更长的后缀, 如果能一直构造出更长的串, 那么最终Dm==1, 就找到了一个匹配.

    利用B[t(i+1)]和移位后的D的&运算, 来找那些满足t(i+1)==p(j+1)的位置并置为1.

    位运算可以在常数时间内完成, 那么ShiftAnd的时间复杂度就是O(n).

    下面是伪代码, 来自<<柔性字符串匹配>>:

    其实上面的东西大部分就是从"柔匹"里面抄来的 XDD。

    ShiftAnd算法的一个变体, 就是ShiftOr算法, 你可以看到上面的那个式子里面, D以为的同时, 与1进行了"或"运算, 这是因为空字符串也是文本的后缀, 即空字符串无条件地可以匹配.

    而ShiftOr就是通过使用对位去翻去掉了这个"或"运算的过程,详情见"柔匹"原书.

    在"柔匹"里面, 对单模式串匹配分了3类, 前缀匹配(如kmp和ShiftAnd), 后缀(如BM), 子串(如BNDM, BDM), 当然, 对于多模式串这个分类也适用.

    但是, 后缀匹配分类里面却没有位并行算法的影子, 这是为什么?

    那么, 首先, 字符串算法为什么存在? 为了加速匹配, 尽量在趋近O(n)的时间复杂度内完成匹配, 那么kmp里面的next或者ShiftAnd里面的集合的作用呢, 是为了加速搜索窗口的移动.

    可以理解为, ShiftAnd就是kmp的一个位并行版本, 因为两者都在找p和已读入文本的最长后缀.(关于两者的实质区别, 可以从自动机的角度来考虑.)

    那么反观后缀匹配里面的BM算法, BM本身比较复杂, 即使d1(后缀u在p中出现的位置)可以利用位并行也没什么好说的.

    而Horspool没有利用d1, 即后缀u在模式串p中的出现的位置, 而另外的两个d的计算基本不需要用位并行算法.

    改天再继续介绍一下BNDM(子串匹配里面的位并行算法)..

    在讨论BNDM之前, 从自动机的角度来讨论一下并行算法, 其实并行算法在做的就是个NFA(非确定性自动机), 用位掩码的方式来表达不同的跳转状态, 而通过位运算的方法, 就可以轻易实现多个状态同时进行跳转. 本来NFA就比DFA好理解, 但是NFA编程不好操作, 所以有了DFA, 而位并行算法却可以在一定程度上很好地解决这个问题...

    BNDM算法,其实实现手法, 跟BM里面求d1的方式一样, 利用位并行, 构造出来的自动机, 可以找到已读入的后缀u在p里面的所有子串, 用位1标示.

    那如果读入的后缀的长度==p的长度了, 而且子串集合不为空(即位掩码最高位是1), 那么就是找到了一个匹配.

    下面我最想贴出来的就是不同算法的性能分析表了:

    解释见"柔匹".

    平均时间复杂度最优的是子串匹配, 即BNDM和BOM.

    对于多模式串的匹配, 位并行算法很容易拓展, 这也体现了位并行算法的灵活性.

    但是, 有一个前提是, 所有子串的长度和不要超过一个机器字的长度限制.

    Multiple Shift-And算法的思想, 就是在一个机器字里面对r个模式串进行Shift-And算法的位操作.

    因为位并行可以处理NFA中多个状态的同时跳转, 那么处理多个模式串的匹配自然也是不在话下, 只是需要特殊的掩码来测试一下哪一个模式串被匹配到了, 其实这个掩码就是Shfit-And里面测试掩码的拼接而已.

    但是, 却没有Multiple Shift-Or算法, 因为, Shift-Or需要在末尾给掩码引入0, 可以构造出一个掩码 , 然后拼接一下, 但是这样就没有Shift-Or原来那种只通过移位就引入0的意味了, 也就是, Multi Shift-Or没有存在的意义, so...

    单模式串中的子串匹配也可以扩展到多模式串来, 这就是Multiple BNDM, 基本思想也是对于子串匹配的拼接, 不赘述了XDD.

     PS: 在模式串完全随机的情况下, 其实暴力匹配是最快的, 因为可以做到概率上为O(n)的效率, 而一般的匹配算法都会有比较大的常数.

    下面是证明:

    假定text的长度是n, 而模式串的长度是p, 设字符集为S, |S|=s.

    对于text里面的某个位置i, 从i开始匹配1个格的概率是1/s, 匹配2个格的概率是1/s^2, ..., 匹配p个格的概率是1/s^p.

    那么对于i位置, 如果这个位置匹配失败的话, 需要的代价是, 1+1/s+1/s^2+...+1/s^(p-1)+(s-1)/s^p, 而这是个常数.

    对于某个位置, 从这个位置匹配失败的代价是O(1), 那么最坏情况, 就是跑完了整个text, 代价是O(n).

    而剩下的就是比较哪个算法的常数更大的问题了, 而在绝对随机的情况下, 一般是暴力的常数最小~!~~

    ~~~

    posted on 2013-03-11 22:48  Jackiesteed 阅读( ...) 评论( ...) 编辑 收藏

    转载于:https://www.cnblogs.com/jackiesteed/articles/2954817.html

    展开全文
  • GPU通用计算与基于SIFT特征的图像匹配并行算法研究_年华.caj
  • 一种基于魂芯DSP的单模式位并行串匹配算法
  • GPU通用计算与基于SIFT特征的图像匹配并行算法研究
  • 基于GPU加速的并行字符串匹配算法.pdf
  • 解决近似字符串匹配问题的最佳方法之一
  • 改进的多模式串匹配算法及GPU并行化研究.pdf
  • 网页恶意代码是木马用来传播的主要方式之一,各种有危害性的木马都可以做成网页恶意代码来传播危害用户,通过分析网页恶意代码的运行机理,对其中网页恶意代码实现跨安全域的方法进行深入探讨,分析跨域漏洞形成原因...
  • 匹配并行 基于图匹配的超图匹配并行实现
  • // 【04】StringMatch-Sunday.cpp : Defines the entry point for the console ...// 字符串匹配算法之sunday算法 #include "stdafx.h" #include "string.h" #include "iostream" using namespace std; #define MA
    // 【04】StringMatch-Sunday.cpp : Defines the entry point for the console application.
    //  字符串匹配算法之sunday算法
    
    #include "stdafx.h"
    #include "string.h"
    #include "iostream"
    
    using namespace std;
    
    #define MAX_CHAR_SIZE 256
    
    int* SetCharStep(const char* pattern);
    int StrMatch_BruteForce(const char* text, const char* pattern, int* CharStep);
    int StrMatch_Sunday(const char* text, const char* pattern, int* CharStep);
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	char* text = "this is uestc,welcome to our school!";
    	char* pattern = "wel";
    
    	int* CharStep = SetCharStep(pattern);
    	cout<<StrMatch_Sunday(text, pattern, CharStep)<<endl;
    
    	delete CharStep;
    	CharStep = NULL;
    
    	while(true);
    
    	return 0;
    }
    
    int StrMatch_Sunday(const char* text, const char* pattern, int* CharStep)
    {
    	int m=0, n=0, s=0, step=0;//	m: 模型长度,n: 文本长度	s:有效匹配位置  step:移动步长
    	
    	m = strlen(pattern);
    	n = strlen(text);
    
    	if(m > n)
    		return -1;
    	else
    	{
    		while(s <= (n-m))					//	匹配结束条件
    		{
    			//	开始匹配
    			//	如果匹配,返回当前有效位置值S。如果不匹配,找当前文本中最右边对齐的右一位的那个字符在模式串的位置,
    			//	然后结束本次循环,开始下一次匹配。
    			step = StrMatch_BruteForce(text+s, pattern, CharStep);
    			if(0 == step)
    				return s;
    			else
    			{
    				s += step;
    			}
    		}
    		return -1;
    	}
    }
    
    //	匹配成功返回0
    int StrMatch_BruteForce(const char* text, const char* pattern, int* CharStep)
    {
    	int m=0, n=0;
    
    	m = strlen(pattern);
    	n = strlen(text);
    
    	for(int i=0; i<m; i++)
    	{
    		if( *(text+i) != *(pattern+i) )		//	匹配失败,返回当前文本中最右边对齐的右一位的那个字符在模式串的位置
    		{
    			return CharStep[(unsigned char)text[m]];
    		}
    	}
    	return 0;
    }
    
    //	预处理:事先存储好需要移动的步长
    int* SetCharStep(const char* pattern)
    {
    	int* pCharStep = new int[MAX_CHAR_SIZE];
    	int m=strlen(pattern);
    
    	//memset(pCharStep, 0, sizeof(pCharStep));
    	//之所以默认初始化每个字符的步长为m+1,是因为如果文本中当前对齐右边的字符不在子串中时,要跳过该字符,即移动步长为m+1
    	for(int i=0; i<MAX_CHAR_SIZE; i++)
    		pCharStep[i] = m+1;
    
    	//	注意从左向右扫描一遍 保存子串中每个字符所需移动步长
    	for(int i=0; i<m; i++)
    	{
    		pCharStep[(unsigned char)pattern[i]] = m-i;
    	}
    	return pCharStep;
    }
    

    展开全文
  • 面向CPU GPU异构平台的模板匹配目标识别并行算法.pdf
  • 字符串匹配算法

    2010-10-03 23:29:00
    在网络安全的研究中,字符串匹配是一种使用很普遍的技术,例如杀毒软件和IDS中的特征码匹配,都需要用到字符串匹配。...一 精确字符串匹配 字符的精确匹配算法中,最著名的有KMP算法和BM算法。下...

           在网络安全的研究中,字符串匹配是一种使用很普遍的技术,例如杀毒软件和IDS中的特征码匹配,都需要用到字符串匹配。作为字符串匹配中的一种特殊情况,近似字符串匹配的研究也同样重要。这里将对字符串匹配算法进行简要分析和总结。


    本文的主要参考了《柔性字符串匹配》一书。下面对各种算法进行简要的总结。

    一 精确字符串匹配
           字符串的精确匹配算法中,最著名的有KMP算法和BM算法。下面分别对几种常用的算法进行描述。

    1:KMP算法
    KMP算法,即Knuth-Morris-Pratt算法,是一种典型的基于前缀的搜索的字符串匹配算法。Kmp算法的搜索思路应该算是比较简单的:模式和文件进行前缀匹配,一旦发现不匹配的现象,则通过一个精心构造的数组索引模式向前滑动的距离。这个算法相对于常规的逐个字符匹配的方法的优越之处在于,它可以通过数组索引,减少匹配的次数,从而提高运行效率。

    详细算法介绍参考:KMP算法详解(matrix67原创)

    2:Horspool算法
           和KMP算法相反,Horspool算法采用的是后缀搜索方法。Horspool算法可以说是BM算法的意见简化版本。在进行后缀匹配的时候,若发现不匹配字符,则需要将模式向右移动。假设文本中对齐模式最后一个字符的元素是字符C,则Horspool算法根据C的不同情况来确定移动的距离。实际上,Horspool算法也就是通过最大安全移动距离来减少匹配的次数,从而提高运行效率的。

    算法参考:《算法设计与分析基础》 第二版 清华大学出版社

    3:BM算法
    BM算法采用的是后缀搜索(Boyer-Moore算法)。BM算法预先计算出三个函数值d1、d2、d3,它们分别对应三种不同的情形。当进行后缀匹配的时候,如果模式最右边的字符和文本中相应的字符比较失败,则算法和Horspool的操作完全一致。当遇到不匹配的字符并非模式最后字符时,则算法有所不同。

    算法参考:《算法设计与分析基础》 第二版 清华大学出版社

    4:Shift-And算法
           这种算法比KMP简单,不过它的特点在于运用了位并行技术,提高程序运行效率。Shift-And算法首先构造一个表,记录字母表中每个字符的位掩码。然后每读取一个文本字符的时候,通过计算公式的运算,获取新的位向量。

    二 近似字符串匹配
           近似字符串匹配主要有四种方法。第一种是动态规划方法,这是最古老,同时也是最灵活的近似匹配算法。第二种是基于自动机公式模拟文本搜索。第三种方式采用位并行方法来模拟其他方法,号称是“最成功”的一种方法。最后则是通过简单的过滤文本中不相关文本时间快速搜索。

    1:动态规划算法
           动态规划算法是基于“编辑距离”的概念实现近似字符串匹配。通俗地说,编辑距离表示将一个字符串变换成另一个字符串所需要进行的最少的编辑次数。这里的编辑操作包括添加、删除、替换。通过计算编辑距离矩阵,可以得出最佳匹配。

           编辑矩阵的初始化和计算是动态规划算法的关键。初始化数值直接决定是全局匹配还是局部匹配,而在计算公式中所采用的增量,则表示了各种操作的权值。


    上面公式中,这三种编辑操作的权值都为1,但是实际上可以修改权值以限制各种编辑操作出现的频率。例如,在PI项目中,就采用了不同的权值进行计算。详细描述参考”Network Protocol Analysis using Bioinformatics Algorithms”。

           算法描述中提到,为了减少空间复杂度,没有必要保存整个编辑矩阵。但是,貌似如果不保存整个编辑矩阵的话,就很难通过回溯的方法找到最优匹配。

    2:基于自动机的算法
           关于基于自动机的方法,相关资料比较少,而中文资料则更少。在《柔性字符串匹配》一书中稍微提到的这种方法,但是并没有深入讲解其中的原理和实现步骤。


    上面这个状态转换图让人感觉莫名其妙,不知道这个自动机是如何转换的。实际上,这是通过公式计算出来的。


    详细介绍请参考:Faster Approximate String Matching

    3:位并行算法
           实际上,与其说位并行算法是一种近似搜索方法,倒不如说它是一种加速实现的手段。位并行算法是用来模拟经典算法的。在搜索中,通过并行模拟,可以加快经典算法的运行速度。位并行算法非常适合模式串比较短的情况。

           位并行实际上利用了计算机的并行性原理,将若干不同的值打包到一个长度为w的计算机字中,这样就可以利用一次操作或运算来实现原本需要若干次操作或运算才能完成的功能。

    参考:《用位并行法进行过滤的中文近似串匹配算法》

    4:文本快速过滤算法
           过滤算法是基于这种思想:判断文中某个位置的字串和模式串不匹配,可能比判断而这相匹配更容易。所以过滤算法的思路为:通过过滤算法过滤文本中不能产生成功匹配的区域,然后结合非过滤文本搜索算法,最终实现快速字符串匹配。当错误水平比较低时,文本过滤算法的运行效果很好,否则就很差。

           过滤算法比较多,当字母表不是太小的时候,PEX方法运行效果最好。当字母表很小的时候,ABNDM算法比较好。

    5 总结
           以上讨论了四种近似字符串匹配方法的主要思路。实际上,我们可以看到,字符串匹配方法的关键计算编辑距离。动态规划直接计算编辑距离矩阵,而自动机方法则以另一种方式表示了文本输入后的编辑距离向量。位并行算法主要是利用计算机的并行性,模拟经典近似匹配算法,加快运算速度。文本过滤算法则通过过滤不可能成功匹配的文本,然后结合经典近似匹配算法实现快速字符串匹配。

    转载于:https://www.cnblogs.com/diewcs/archive/2010/10/03/1841781.html

    展开全文
  • 针对大数据量导致模板匹配目标识别算法计算时间长,难以满足快速检测的实际需求问题,在采用最新NVIDIA Tesla GPU构建的CPU+GPU异构平台上,设计了一种模板匹配目标识别并行算法。通过对模板图像数据常量化、输入...
  • GPU并行匹配追踪算法中的应用.pdf
  • 最直接,最易于理解的设计方法,发掘和利用现有串行算法中的并行性,直接将串行算法改造为并行算法。 Case 1:快速排序 ​ 快速排序的串行算法思想为随机选取主元进行划分,之后递归排序。直接并行化思路即每次划分...

    串行算法的直接并行

    最直接,最易于理解的设计方法,发掘和利用现有串行算法中的并行性,直接将串行算法改造为并行算法。

    Case 1:快速排序

    ​ 快速排序的串行算法思想为随机选取主元进行划分,之后递归排序。直接并行化思路即每次划分后将子任务分配给新的处理器。不过由于划分操作还是由单个处理器串行执行的,因此平均时间复杂度为 T ( n ) = T ( n / 2 ) + n = O ( n ) T(n)=T(n/2)+n=O(n) T(n)=T(n/2)+n=O(n)

    ​ 为了使Partition可以并行处理,重新考虑归并排序:划分操作可以看做是构造一个二叉树结构。选取的主元即为子树的根节点,且左子树小于右子树,因此可以将每个处理器看作一个节点,保存着A[i]的数值。

    ​ 引入新的数组LC[1…n]和RC[1…n],其中LC[i]和RC[i]分别表示第i个处理器的左右子树根节点,这样n个处理器即构成一个二叉树。并且每个处理器保存父节点在LC的下标fi。初始时,设置第一个处理器的值为根节点,并通知所有处理器。在接下来的每轮中:

    • 如果自己的值小于等于父节点,则应该在左子树中,将自己的下标填入LC[fi]中,直到所有左子树的节点都完成上述操作。此时最后一个填写的处理器i即被选为划分依据,该处理器退出计算,其余所有节点都将i更新为自己的父节点。
    • 如果自己的值大于父节点的值,则应该在右子树中,将自己的下标填入RC[fi]中,更新父节点。

    伪代码如下:

    Repeat for each processor i!=root do
    if(A[i]<A[fi] or A[i]=A[fi] and i<fi) then
    	LC[fi]=i
    	wait()
    	if(i=LC[fi])
    		exit
    	else
    		fi=LC[fi]
    	endif
    else
    	RC[fi]=i
    	wait()
    	if(i=RC[fi])
    		exit
    	else
    		fi=RC[fi]
    	endif
    EndReqeat
    

    在算法执行后,根据LC和RC即可构造出一棵二叉树,通过前序遍历即可完成排序。此算法每一层树的构造用时为 O ( 1 ) O(1) O(1),平均树高为 O ( l o g n ) O(logn) O(logn),因此平均时间复杂度为 O ( l o g n ) O(logn) O(logn),最坏情况时树高为n,时间复杂度为 O ( n ) O(n) O(n)

    Case2:枚举排序

    ​ 枚举排序为最简单的排序算法,每个数通过一次遍历比较出有多少排在自己前面的数作为自己的下标,之后通过一次遍历利用下标排序。串行时间复杂度为 O ( n 2 ) O(n^2) O(n2)

    ​ 最直接的思维即为每个数并行的计算下标,这样每个数的时间开销为 O ( n ) O(n) O(n),并行算法时间复杂度为 O ( n ) O(n) O(n),由于每个处理器都需要读取整个数组,因此通讯复杂度为 O ( n 2 ) O(n^2) O(n2)

    从问题描述开始设计算法

    ​ 即从问题本身描述出发,不考虑相应的串行算法,设计一个全新的并行算法。

    Case1:串匹配算法

    ​ 串行算法中著名的串匹配算法是KMP算法,算法时间复杂度为 O ( m + n ) O(m+n) O(m+n)当模式串为常数级时算法具有线性时间复杂度。其核心思想为提前计算出next数组,记录当匹配失败时后移的长度,因此通过避免回溯去除了重复比较。

    ​ 不过KMP算法显然无法直接并行化,因此需要按照其思路重新设计算法。字符串是否具有周期性对后续算法的选择非常关键,因此首先对待匹配串P做周期性判断。定义失效见证函数(Witness Function)表征周期性,其定义如下:

    • 对于 j ( 1 ≤ j ≤ m / 2 ) j(1\leq j\leq m/2) j(1jm/2),如果 P [ j : m ] ≠ P [ 1 : m − j + 1 ] P[j:m]\neq P[1:m-j+1] P[j:m]̸=P[1:mj+1],则存在 w ( 1 ≤ w ≤ m − j + 1 ) , s = j − 1 + 2 , s . t . P ( w ) ≠ P ( s ) w(1\leq w\leq m-j+1),s=j-1+2,s.t.P(w)\neq P(s) w(1wmj+1),s=j1+2,s.t.P(w)̸=P(s),则WIT(j)=w。

    • 否则WIT(j)=0

    显然当字符串不具有周期性时, W I T ( j ) ≠ 0 , 2 ≤ j ≤ m / 2 WIT(j)\neq0,2\leq j\leq m/2 WIT(j)̸=0,2jm/2

    非周期算法举例

    ​ 按照指数次序,P分割为大小为 ( 2 1 , 2 2 , . . . ) (2^1,2^2,...) (21,22,...)的小块,并行和T的前缀匹配,淘汰失配的位置,最后对所有剩余位置进行全串T匹配。

    借用已有算法求解新问题

    矩阵乘法

    ​ 许多算法都需要矩阵乘法运算,这里记一下矩阵乘法的并行算法。待求矩阵 C = A B C=AB C=AB,其中B为列向量,则可通过分割矩阵A计算C:

    A B = [ A 1 A 2 ⋮ A m ] B = ∑ A i B AB=\left[\begin{array}{ccc}A_1 \\A_2 \\ \vdots \\ A_m \end{array} \right ]B=\sum A_iB AB=A1A2AmB=AiB,其中 A i B A_iB AiB可并行计算。

    ​ 如果B不是列矩阵,同样可以通过列分解计算。

    展开全文
  • BM字符串匹配算法

    2012-12-21 01:31:00
    BM字符串匹配算法 在用于查找子字符算法当中,BM(Boyer-Moore)算法是目前相当有效又容易理解的一种,一般情况下,比KMP算法快3-5倍。 BM算法在移动模式的时候是从左到右,而进行比较的时候是从右到...
  • 多视密集匹配并行传播GPU-PatchMatch算法.pdf
  • 多视密集匹配并行传播GPU-PatchMatch算法.docx
  • CELL处理器并行实现立体匹配算法
  • 字符串匹配算法 之 BM(Boyer-Moore)

    千次阅读 2016-07-29 11:52:14
    背景各种文本编辑器的”查找”功能(Ctrl+F),大多采用Boyer-Moore算法。... Boyer教授和J Strother Moore教授发明了这种效率高,构思巧妙,容易理解的字符串匹配算法算法特征假设文本text长度为n,模式p

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,906
精华内容 21,962
关键字:

串匹配并行算法