Questions tagged «subsequences»

1
字符串中最长的重复(分散)子序列
非正式问题陈述: 给定一个字符串(例如,我们希望将一些字母成红色,将一些字母成蓝色(有些根本不),这样,从左到右仅读取红色字母会产生与仅读取蓝色字母相同的结果。ACCABBABACCABBABACCABBAB 在示例中,我们可以为它们着色:ACCABBABACCABBABA\color{blue}{C}\color{red}{CAB}B\color{blue}{AB} 因此,我们说是的重复子。它也是最长的重复子序列(易于检查)。A C C A B B A BCABCABCABACCABBABACCABBABACCABBAB 我们可以有效地计算最长的重复子序列吗? 正式问题: 确定字符串和某个是否难为NP,字符串中是否存在长度为的重复子序列?ķkkkkkk 如果是这样:哪个问题可以减少到这个问题? 如果不是:什么是有效算法?(显然,此算法可用于计算最长的重复子序列) 奖励问题: 如果字母的大小受常数限制,它们将始终是长度为的重复子序列吗?n/2−o(n)n/2−o(n)n/2 - o(n) (这对于二进制字母来说是正确的。) 编辑2:对于奖金问题的否定答案,众所周知的是大小至少为字母。实际上,对于大小为Σ的字母,存在具有最长重复子序列且长度仅为O(n·Σ^ {-1/2})的字符串。随机字符串足以证明这一点。结果已经存在,但我忽略了它。555ΣΣΣO(n⋅Σ−1/2)O(n·Σ−1/2)O(n · Σ^{-1/2}) 编辑: 注意: 有些人说“子序列”时,其意思是“子串”。我不。这不是找到子字符串两次的问题。

3
是否有一种算法可以在
此问题是从理论计算机科学堆栈交换迁移而来的,因为可以在计算机科学堆栈交换上回答。 迁移 7年前。 我想证明或反对一种算法的存在,该算法在给定整数数组下找到三个索引和,使得且(或发现没有这样的三元组)线性时间。AAAi,ji,ji, jkkki&lt;j&lt;ki&lt;j&lt;ki < j < kA[i]&lt;A[j]&lt;A[k]A[i]&lt;A[j]&lt;A[k]A[i] < A[j] < A[k] 这不是一个作业问题。我在一个编程论坛上看到它是“尝试实现这种算法”。我怀疑经过各种实验后这是不可能的。我的直觉告诉我,但这并不算什么。 我想正式证明这一点。你怎么做呢?理想情况下,我希望逐步看到一个证明,然后,如果您愿意,可以对如何证明/证明这样的简单问题进行一些解释。如果有帮助,请举一些例子: [1,5,2,0,3] → (1,2,3) [5,6,1,2,3] → (1,2,3) [1,5,2,3] → (1,2,3) [5,6,1,2,7] → (1,2,7) [5,6,1,2,7,8] → (1,2,7) [1,2,999,3] → (1,2,999) [999,1,2,3] → (1,2,3) [11,12,8,9,5,6,3,4,1,2,3] → (1,2,3) [1,5,2,0,-5,-2,-1] → (-5,-2,-1) 我以为有人可以遍历,并且每次有一个(即我们当前的)时,我们都会创建一个新的三元组并将其推入数组。我们继续步进并比较每个三元组,直到完成其中一个三元组。所以,这就像,!但是我认为这比仅仅更复杂,因为在最坏的情况下,我们的三元组数组中三元组的数量将对应于输入列表的大小。AAAi&lt;ji&lt;ji < jjjj[1,5,2,0,-5,-2,-1] → 1..2.. -5.. -2.. -1[1,5,2,0,-5,-2,3,-1] …

4
如何使用贪心算法找到最接近给定序列的非递减序列?
a1,…,ana1,…,ana_1, \ldots, a_n000lllaiaia_ibibib_i000lllbibib_ib i O (n 4max(|a1−b1|,…,|an−bn|)max(|a1−b1|,…,|an−bn|)\max(|a_1-b_1|, \ldots, |a_n-b_n|)bibib_iO(nl√4)O(nl4)O(n\sqrt[4]{l}) 老实说,我根本不知道如何开始解决这个问题。在我看来,这似乎是一个动态编程问题,但这位教授说,应该使用贪婪算法解决该问题。如果有人可以给我一点点提示就可以指出正确的方向,那将不胜感激。

1
寻找最长的重复子序列
给定字符串,我想找到最长的重复(至少两次)子序列。也就是说,我想找到一个字符串,它是的子序列(不一定是连续的),使得。也就是说,是一个字符串,其一半连续出现两次。请注意,是的子序列,但不一定是子字符串。ssswwwsssw=w′⋅w′w=w′⋅w′w=w' \cdot w' wwwwwwsss 例子: 对于“ ababccabdc”,它将是“ abcabc”,因为“ abc” =“ abc”和“ abc”在“ ababccabdc”中(至少)出现了两次(至少)。 对于“ addbacddabcd”,一个选项为“ dddd”,因为“ dd”出现两次(我不能多次使用相同的字母,但是这里我有4个“ d”,所以还可以),但其值为4。我可以找到更好的一个长度8:“ abcdabcd”,因为“ abcd”是“ addbacddabcd”的子字符串,该子字符串出现两次。 我有兴趣找到最长的重复子序列。这也称为“找到最长/最大的平方”,但我读过许多文章,其中为子字符串而不是子序列定义了平方。 我可以轻松地使用蛮力算法,该算法通过迭代字符串中的断点的所有选项来获取,然后我将在两个字符串中寻找最大/最长的公共子序列,但是使用动态编程技术每次检查将花费,因此整个时间将是。我发现了最长公共子序列更有效的算法,该算法采用,因此运行时间将为。O(n3)O(n3)O(n^3)O(n2)O(n2)O(n^2)O(n3)O(n3)O(n^3)O(n2logn)O(n2log⁡n)O(\frac{n^2}{\log n})O(n3logn)O(n3log⁡n)O(\frac{n^3}{\log n}) 我正在寻找一种更有效的算法来解决最长重复子序列问题。也许我对所有断点进行迭代的想法浪费了太多时间,并且可以减少为更少的迭代。或者也许以不同的态度解决这个问题。 我搜索了许多期刊和以前的问题,发现的大多数结果都与子字符串有关,而不是与子序列有关。 我还读到可以使用后缀树来完成此操作,但这也与子字符串有关,我不确定是否可以将这种想法扩展到子序列。 我正在寻找可以在时间中运行的解决方案。如果在时间上存在一个会更好(我不确定是否存在)。O(n2)O(n2)O(n^2)O(n⋅logn)O(n⋅log⁡n)O(n \cdot \log n)

1
查找字符串中最长的重复模式
我正在寻找一种有效的算法来查找字符串中最长的重复模式。 例如,考虑以下数字字符串: 5431428571428571428571428571427623874534。 如您所见,142857142857是最长的模式,它在此字符串中重复了两次(至少两次)。 重复的字符串不应该包含任何想法,而应该不是蛮力的?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.