因子复杂度
因子复杂度算法的概念来自“字符串的代数组合”,在自然语言处理,模块识别 和密码理论等领域有着广泛的应用。简单来说,因
子复杂度算法通过分析子字符串的组合获取字符串的特征,该特征的主要特征是子字符串组合的复杂度以及拓扑熵。 下面给出因子复杂度的具体算法。对于一个字母表 &,& ={ A T C G }
假定一条基于字母表&的序列|W|,它的长度为 |W|。
我们知道,计算拓扑熵并不容易,因为拓扑熵算法随着有限长度序列的长度变化而变化。 因此,我们以 100 bp 长度的序列为例,阐述拓扑熵的算法。首先获取到 100 bp 长度序列的因子复杂度函数,观察该因子复杂度函数的函数图像可以发现,前 7 维的因子复杂度函数值呈指数水平递增,在第 7 维特征达到顶峰,然后数值缓慢线性下降。值得一提的是,拓扑熵本身就是与因子复杂度特征的非线性变化有关系,因此需要关注的是这前 7 维的因子复杂度特征。 Koslicki(Koslicki 2011) 等提出了选择拓扑
熵的公式如下:
其中 w 为序列长度,当 w 为 100 时,根据公式可以算出, n 等于 3。Jin提出另外一个选择拓扑熵的公式,该公式如下:
其中将 k 和 n0 结合起来分析拓扑熵。本研究根据拓扑熵的原始定义,结合前人的研究,提出一种从因子复杂度中选取拓扑熵的计算方法。前面提到,拓扑熵就是用来描述因子复杂度函数的指数增长速度,因此通过分析因子复杂度的二阶差分来寻找拓扑熵位点,公式如下:
阿贝尔复杂度
Abelian 复杂度,作为因子复杂度的衍生复杂度方法,最早被用来研究无限长度序列的复杂度(Balková et al 2011)。对于无限长度的序列,它的 abelian 复杂度会呈现规律的周期性(Richomme et al 2009),但是有限长度序列的 abelian 复杂度研究
的并不多。下面给出 abelian 复杂度的具体算法:
下面用一个例子加以说明:以 DNA 序列片段 = AAGCAGTCGG为例子,说明 abelian 复杂度的具体计算方法,
步骤一:获取序列片段 的所有子字符串,定义 S n ( ) 为所有子字符串的集合。
子字符串长 相应的子字符集合
步骤二:计算步骤一中获取的所有长度的子字符串集合的帕里克向量。例如,
子字符串 CAGT 与 AGTC 的帕里克向量都是(1, 1, 1, 1)。
步骤三:统计所有长度的子字符串集合的帕里克向量个数。例如,长度为 3 的
子字符串集合为 AAG, AGC, GCA, CAG, AGT, GTC, TCG, CGG
对应的帕里克向量为 (2, 0, 0, 1), (1, 1, 0, 1), (1, 0, 1, 1), (0, 1, 1, 1), (0, 1, 0, 2).