问题标签 [subsequence]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 最长递增子序列的问题 - 朴素方法
我正在学习动态编程的基础知识,并遇到了在数组中查找最长递增子序列的问题。在查找 DP 解决方案之前,我决定自己编写代码并提出以下算法,完整的代码可以在这里找到。
这个想法是创建一个List Array来存储所有增加的子序列,并存储每个子序列的相应最大值以便更快地比较。
代码在 O(n^2) 时间内运行,非常适合中小型输入。但是,当我尝试针对一些在线练习门户(如HackerRank)运行代码时,我得到了 TLE(超出时间限制的错误)和错误答案。我理解 TLE 错误,因为有效的解决方案是 DP O(nlogn) 解决方案,但我对此算法生成的错误答案感到困惑。由于此类情况的输入太大(〜10000),我无法手动验证解决方案出错的地方。
可以在此处找到完整的代码以及其中一个数据集的输出。HackerRank 报告的正确答案应该是 195。
dynamic - 最长回文子序列 VS 反向也是子序列的最长子序列
我试图思考这两个问题之间有什么区别
给定一个序列 S
1) 找到 S 的最长回文子序列。
2)找到S的最长子序列,其反向也是S的子序列。这两个子序列可以相同。
原句是:找到S的最长子序列S',使得有一个与S'相同的子序列和一个与S'相反的子序列。
我为这两个问题推导出的 DP 公式是相同的。
它们实际上是相同的问题吗?我一直在尝试这样想:假设最长的回文子序列是longestP
,那么longestP
它本身显然是 2) 的可能答案。
2)能否有更长的答案?假设有一个,叫做longerP
,那么它的逆也是longerP
S 的一个子序列,叫做 reverseLongerP
无论是否重叠,都可以从longerP
和构造更长的回文reverseLongerP
。因此与我们的假设相矛盾,即longestP
最长回文。
2)能否有更短的答案?我不这么认为,因为 2) 要求我们找到这种最长的子序列,并且longestP
已经是一个可能的答案,任何比longestP
不应该考虑的更短的子序列。
以上是我对这个问题的思考,我缺少什么?
我的结论是它们是相同的问题。然而,我被要求给出一个序列,其中包含一个不是回文的字符串 s 及其相反的子序列,而这个序列没有比 s 更长的回文。我不认为这是可能的。
我的想法是,假设这样一个序列存在,那么 s 和它的反序列可以形成一个长度为 的回文length_of_s + length_of_reverse_s - length_of_overlap
,所以这个回文的最小长度是length_of_s
。但是在那种情况下,length_of_overlap
等于length_of_s
,所以 s 和它的逆必须相同,s 必须是回文数,这就违反了 s 不能是回文数的限制。
algorithm - 使用 Ruby/Python/C++/C 在一个巨大的字符串中查找所有长度大于 1 的重复子串
我手头有一个复杂的问题,即我有一个巨大的(超过 200000 个字符):-
输出类似于:-
使用 ruby/c/c++ 查找最长重复字符串的解决方案有很多,但查找所有重复子字符串的解决方案很少。
我正在寻找一些常规算法来执行此操作。就像我们有弗洛伊德的循环发现算法一样。用于识别周期等。开始使用这类东西会很棒。
algorithm - 在字典中查找String的最长子序列s
查找字符串的最长子序列 s,例如 "abccdde" 并给定字典 {"ab","add","aced"} 。上面示例的结果是“添加”
我在一次采访中被问到,我使用特里树给出了答案,最坏的情况是 O(n*m) ,n 是 s 的长度,m 是字典的长度。但我的平均成本应该很低。我没有通过面试,因为面试官认为我的解决方案不是最好的。有没有人有更好的主意?
java - 查找具有索引的数组的最大子序列
我想S(h,k)
在整数数组中找到最大子序列。我已经有代码(在 Java 中)来找到最大值并且它工作正常,但是我怎样才能得到这两个索引h
和k
从以下?
swift - suffix(from:) 和 dropFirst(_:) 之间有什么区别吗?
我突然想到,在 Swift 中处理子序列时,
func suffix(from: Int)
似乎与 just 相同dropFirst(_:)
(显然,在长度为“10”的数组的情况下,您只需将输入值从“3”更改为“7”。)
只是重复一遍。所以:当然,对于长度为 10 的数组。例如,我的意思是"2"与 "8"func suffix(from: Int)
相同dropFirst(_:)
。
同样upTo
/through
似乎与dropLast(_:)
除了方便,还有什么区别吗?
(也许在错误条件、性能或?)
我想知道,事实上,在 Swift 内部,一个或另一个是否只是通过调用另一个来实现的?
python - 最大单调递增或递减子序列
下面是我的最大单调子序列代码(增加或减少)。在编写此代码之前,我没有做过任何研究,也不知道这是一个常见的计算机科学问题。从我随后的研究来看,似乎普遍接受的最有效的算法是 O(N log N)。这些通常是动态编程类型的解决方案,此时我有点想不通。
我不是算法专家,但下面的代码不是 O(N) 吗?我通过每个列表两次,一次是为了找到增加的序列,一次是为了减少。
我也很感激有关清理它的任何建议。我意识到这些功能非常重复,但是如果不重复第二个功能/通过,我找不到一种一次性完成所有操作的好方法。
r - Split a data-frame based in ordered multi factorial column
I would like to split a data-frame in a list of data-frames. The reasoning to split it is that we will have always father
followed by mother
which in turn is followed by offspring
. However, these family members might have more than one row (which are always subsequent. e.g father
number 1 is in the row 1 and row 2). In my below example I have two families, then I am trying to get a list with two data-frames.
My input:
Thus, my expected output dfout[[1]]
would look like:
python - 我似乎不明白的 Python 语法
因此,我正在查看此 python 代码以查找两个字符串的最长子序列,但我不明白“#line A”为什么第三个参数是 key=len。从我学到的 len 是一个返回字符串长度的函数,但我不明白它是如何在这里使用的。
python - 从序列中提取最大长度的子序列 [PYTHON]
我有一个值序列 [1,2,3,4,1,5,1,6,7],我必须找到长度增加的最长子序列。但是,一旦达到比前一个低的数字,该函数就需要停止计数。在这种情况下,此序列中的答案是 [1,2,3,4]。因为它在重置之前有 4 个值。我将如何为此编写 Python 代码?
注意:找到“最长增加子序列”似乎是一个常见的挑战,所以在网上搜索我发现很多解决方案可以计算整个序列的长度,并返回一个增加值的子序列,忽略任何减少,所以在在这种情况下,它将返回 [1,2,3,4,5,6,7]。那不是我要找的。
它需要对每个子序列进行计数,并在达到低于前一个的数字时重置计数。然后它需要比较所有计数的子序列,并返回最长的一个。
提前致谢。