algorithm - 具有挑战性的生物信息学模式匹配字符串算法

标签 algorithm

<分区>

friend 告诉我下面的挑战题。

给定{A, T, G, C}作为我们的字母表,我们想知 Prop 有指定长度的有效短语的数量 n具有以下递归模式定义:

  • pat=pat1pat2 ,即将两个模式连接在一起形成一个新模式 pat .
  • pat=(pat1|pat2) ,即选择其中一种模式 pat1pat2形成新格局pat .
  • pat=(pat1*) ,即重复模式 pat1任意次数(可以为 0)以形成新模式 pat .

由字母集 {A, T, G, C} 组成的短语如果可以通过上述模式定义形成,则称其满足模式;它的长度是字母的数量。

几个例子:

  • 给定一个模式((A|T|G)*)n=2 , 有效短语的数量 是 9,因为有 AA , AT , AG , TA , TT , TG , GA , GT , GG .
  • 给定一个模式(((A|T)*)|((G|C)*))n=2 , 有效短语的数量 是 8,因为有 AA , AT , TA , TT , GG , GC , CG , CC .
  • 给定一个模式((A*)C(G*))n=3 , 有效短语的数量 是 3,因为有 AAC , ACG , CGG .

如果您曾经遇到过这个问题,请指出问题的根源以及解决它的想法。

最佳答案

字母 A、C、G 和 T 的选择让我想到了 DNA 碱基对序列。但正如 thiton 所写,显然这个问题是从常规语言的研究中解脱出来的。 Google“常规语言枚举”,您应该可以找到大量的研究论文和代码来帮助您入门。如果为这些模式计算匹配字符串的数量不是#P-complete 问题,我会感到惊讶,所以预计运行时间是 n 的指数。

关于algorithm - 具有挑战性的生物信息学模式匹配字符串算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8780328/

相关文章:

c++ - 用 2 x 1 多米诺骨牌填充 3xN 瓷砖的方法数 (SPOJ : M3TILE)

php - 在PHP中计算两个X,Y坐标之间的距离

algorithm - 使用 Lat Long、major、minor 和 Rotation 的边界椭圆

javascript - 如何计算两点之间的 3D Angular ?

c# - 如何比较 2 组数组的不同匹配项

c++ - 清晰缩放图像的算法

arrays - 点阵算法

python - 在至少 'x' 列中包含非零值的最大行集

algorithm - 查找字符串是否与 Python 中该类型对象列表中对象的属性值匹配的最短方法

Javascript Array.sort 实现?