25得票7回答
R中的最长公共子串:查找两个字符串之间的非连续匹配

我有一个关于在R中查找最长公共子串的问题。在StackOverflow上查看了几篇帖子后,我了解到了qualV包。然而,我发现该包中的LCS函数实际上会找出string1中所有存在于string2中的字符,即使它们不是连续的。 举个例子,如果字符串是: string1: "hello" st...

24得票5回答
3个或更多字符串的最长公共子序列

我正在尝试寻找3个或更多字符串的最长公共子序列。维基百科文章有一个很好的描述,介绍了如何为两个字符串解决此问题,但我不太确定如何将其扩展到3个或更多字符串。 有许多库可以用于查找2个字符串的LCS,因此如果可能的话,我想使用其中之一。 如果我有3个字符串A、B和C,那么将A和B的LCS命名为...

21得票7回答
如何使用C++查找最长公共子串

我在网上搜索了一个C++的最长公共子串实现,但没有找到一个好的。我需要一个返回子串本身的LCS算法,所以不仅仅是LCS。 不过我想知道如何在多个字符串之间做到这一点。 我的想法是检查两个字符串之间的最长字符串,然后去检查所有其他字符串,但这是一个非常缓慢的过程,需要管理许多长字符串的内存,...

20得票1回答
Myers差异算法 vs Hunt-McIlroy算法

最长公共子序列问题是一个经典的计算机科学问题,解决它的算法是版本控制系统和维基引擎的根源。两个基本算法是Hunt-McIlroy算法,它被用来创建diff的原始版本,以及Myers diff算法,它目前被GNU diff实用程序使用。两者似乎都通过在代表两个字符串或文本文件之间编辑空间的图形中...

15得票3回答
diff/patch是如何工作的?它们安全吗?

关于它们的工作原理,我想了解底层工作细节: 什么会触发合并冲突? 上下文是否也被工具用来应用补丁? 它们如何处理实际上不修改源代码行为的更改?例如交换函数定义位置。 关于安全性,说实话,巨大的Linux内核库证明了它们的安全性。但是我想了解以下几点: 用户需要注意哪些与工具有关的提...

14得票3回答
在两个字符变量之间查找共同的子字符串

我有两个字符变量(对象名称),我想提取它们之间最大的共同子字符串。 a <- c('blahABCfoo', 'blahDEFfoo') b <- c('XXABC-123', 'XXDEF-123') I want the following as a result: [...

13得票3回答
更快的算法来计算最长公共子序列(LCS)的长度

问题:需要计算两个字符串的最长公共子序列的长度。字符串的大小最多为100个字符。字母表是通常的DNA字母表,包括4个字符“ACGT”。动态规划方法不够快。 我的问题是,我处理了成千上万对字符串(据我所见,排名在数百万之内)。我认为我已经将LCS_length函数的调用最小化,因此使程序运行更...

12得票2回答
理解最长公共子序列算法的时间复杂度

我不理解递归函数用于“最长公共子序列”算法的O(2^n)复杂度。 通常,我会将此符号与算法的基本操作数(在此情况下为比较次数)联系起来,但是这一次在我的脑海中并没有意义。 例如,对于两个长度都为5的字符串,最坏情况下递归函数会计算251次比较。而2^5与该值相差甚远。 有人能解释一下这个...

12得票3回答
高效的最长公共子序列算法库?

我正在寻找一种在C++程序中使用的LCS算法实现,需要具有高效的空间利用率。输入是两个整数随机访问序列。 我目前正在使用维基百科关于LCS的动态规划算法实现。然而,这种方法的时间和内存都是O(mn),对于较大的输入数据容易出现内存错误。 我了解到Hirschberg算法、Hunt-Szyman...

10得票5回答
将字符串转换为回文字符串的最小插入次数

为了找到将给定字符串(s)转换为回文所需的最小插入次数,我找到该字符串(lcs_string)及其反转字符串的最长公共子序列。因此,需要进行的插入次数为 length(s) - length(lcs_string)。 知道需要进行的插入次数后,应采用什么方法来找到等效的回文字符串? 例如:...