Questions tagged «string-search»

2
最常见的子序列
字符串具有个子序列,但是它们通常并不完全不同。找到任何子序列的最大频率的复杂性是什么?2ñ2ñ2^n 例如,字符串“子序列”包含子序列“ sue”的7个副本,这是最大值。 http://ideone.com/UIp3t上的示例暴力代码 有相关的结构定理吗?这两个都是错误的: 最大频率子序列中最长的序列是唯一的 任何长度的最大频率序列以为单峰ķķkķķk 可能相关的链接: 计算#个不同的子序列http://11011110.livejournal.com/254164.html∈ P∈P\in \mathbf{P} 多个来源的相关比赛问题http://www.spoj.pl/problems/CSUBSEQS/ 相关论文http://dx.doi.org/10.1016/j.tcs.2008.08.035 十天后编辑:感谢您的关注!我想知道这是否会带来一个很好的多项式时间可解决的编程竞赛问题。我猜不是,但是我希望稍后再考虑。

8
快速计算Levenshtein距离
给定一个庞大的允许单词(按字母顺序排序)和单词的数据库,请从数据库中找到就Levenshtein距离而言最接近给定单词的单词。 当然,幼稚的方法是简单地计算给定单词与字典中所有单词之间的levenshtein距离(我们可以在实际计算距离之前在数据库中进行二进制搜索)。 我想知道是否有一个更有效的解决方案。也许可以通过某种启发式方法来减少搜索的单词数,或者对levenshtein距离算法进行优化。 欢迎访问有关该主题论文的链接。

1
斐波那契词
我在旧的捷克算法教科书中遇到以下问题,可惜没有任何提示或解决方案。 “我们定义斐波那契字作为,˚F 1 = b,˚F ñ + 2 = ˚F ñ ˚F ñ + 1,其中一个和b是一般的信件。如何给定的字符串(超过一个潜在的大字母)可以吗找到线性时间最长的斐波那契子词?”F0= 一个F0=aF_{0}=aF1个= bF1=bF_{1}=bFn + 2= FñFn + 1Fn+2=FnFn+1F_{n+2}=F_{n}F_{n+1}aaabbb 我知道二次方的解,但不能将其简化为线性。谁能指出我正确的方向?

2
搜索树木集合的高效算法
我有大量的树木数据集,我想通过指定一个treelet(连接的子图)进行搜索。查询应返回数据集中所有小树的出现。 有有效的算法可以做到吗? 我想到的是后缀数组,但是,天真地将树编码为字符串(按其节点的固定遍历顺序)将不起作用,因为搜索小树可以是任意形状。 更新: 有关我期望的典型实例的一些详细信息: 数据集将至少包含数万棵树,每棵树包含约20至30个节点。树不会不是二叉树,但是每个节点的典型子节点数会很小(通常不大于4或5,尽管在某些退化的情况下可以达到约30)。标签的数量将是数万个。 对于NLP应用程序,我需要这样做:每棵树将成为句子的依存关系分析,每个节点代表一个单词出现,每个标签为一个字典单词(带有某种修饰)。

1
确定一个通配符字符串是否与集合中的另一个通配符字符串完全匹配
这是困扰我一段时间的问题。假设字符串是1和0 的序列,通配符字符串是1、0和?s的序列。所有字符串和通配符字符串具有相同的长度。这些是标准的UNIX通配符。10 ?? 1匹配10011、10111等-a?在该位置匹配1或0。如果和是通配符字符串,那么如果与匹配的每个字符串也与匹配,则我们写。vvvwwwv ≤ w ^v≤wv \leq wvvvwww 问题:给定一组通配符字符串和一个查询(也是通配符字符串),是否存在使得吗?如果不是,我们可以有效地将添加到吗?小号SSvvvw ^ ∈ 小号w∈Sw \in Sv ≤ w ^v≤wv \leq wvvv小号SS 这是显而易见的解决方案(其中是字符串的大小,是RAM的字大小(通常为32或64)):遍历列表中的每个元素并进行测试条件(可以使用位旋转2或3个操作来完成)。还要在扫描时测试是否适合任何。如果未能通过我们的测试,则将添加到集合中,并删除我们标记的。O (ķ米n )O(kmn)O(\frac{k}{m}n)ķkk米mmv ≥ w ^v≥wv \geq wwwwvvvvvvwww 但这还不够快。如果有解决方案,或者在理想情况下,复杂度类似于基数树(),那真的很酷。查询大致正确也可以:即,如果,则返回yes或no;否则,返回false。但是如果条件不成立,则绝对不返回。O (对数n )O(log⁡n)O(\log n)O(k)O(k)O(k)v≤wv≤wv \leq w 尽管这并不能解决最坏的情况,但是您可以假定中的所有元素都由通配符字符串限制;也就是说,存在一些,使得对于所有,。SSSvvvw∈Sw∈Sw \in Sv≥wv≥wv \geq w 我尝试过的想法 通配符字符串形成联接符号。我们可以有一棵包含通配符字符串的n元树;叶子将是通配符字符串,分支将代表所有子代的联接。如果查询和联接是不可比拟的,那么我们不必浪费时间尝试与该分支的所有子代进行比较。此外,如果我们进行更新,而该更新恰好大于联接,则可以简单地删除整个分支。不幸的是,在最坏的情况下,这仍然是,并且在遍历树中添加元素时,我们并不总是找到建立的“最佳”联接。O(n)O(n)O(n) 一个可以形成的基数树根。我们知道由一些通配符字符串限制;假设它是0到0。然后,特里树的所有分支只需位于字符串的第1位和第3位。如果查询的当前位是1,则必须检查?。1个分支;如果为0,我们检查?0个分支;如果是?,我们只检查?。科。因为我们必须潜在地采取多个分支,所以这看起来不太好(出于相同的原因很难更新trie)。由于匹配是非常快速的操作,因此与幼稚的策略相比,在树中进行大量遍历会比较麻烦(遵循一堆指针比进行一些OR和AND的代价高得多)。SSSSSS 相关工作 在网络社区中,此问题表现为“数据包分类”,这是对已知算法和数据结构的良好概述。不幸的是,几乎总是假设通配符字符串仅匹配前缀,并且查询是此类字符串的元组。当然,我们总是可以转换通用通配符字符串来满足以下条件:1?00?1 ?? 是(1,?,0,0,?,1,?,?)。但是,这将是无效的。做出的另一个假设是,这些元组与“颜色”相关联,并且查询应返回颜色(不仅仅是匹配的颜色)。这使问题变得更加困难,因为我们必须对元组进行排序(否则,(0,?)和(?,1)中的哪一个与(0,1)相匹配是模棱两可的)。 在算法社区中,我发现了很多与查找与“无关”匹配的子字符串相关的结果。这是一个相当困难的问题,我无法真正利用任何技术。 结论 谢谢你的帮助!
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.