Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 序列比对_String_Algorithm_Data Structures_Sequence Alignment - Fatal编程技术网

String 序列比对

String 序列比对,string,algorithm,data-structures,sequence-alignment,String,Algorithm,Data Structures,Sequence Alignment,关于序列比对,我有以下问题: 我们知道,当您想要强制两个序列在其整个长度上对齐时,全局对齐算法非常有用,局部对齐查找两个序列之间最相似的区域,并从那里向外构建对齐 当我们有一个很长的序列和一个小序列库时,在一个库中找到小序列串联的最佳算法是什么?一种简单的方法是尝试每一种排列。如果S是库中每个小序列的排列集,则可以逐个将大序列与S中的每个序列对齐,并查看哪一个具有最小对齐成本。不幸的是,这对CPU不友好,因为S的大小与小序列的数量成指数关系∑ 是字母表(例如,{A,C,g,T})。让我⊆ ∑*

关于序列比对,我有以下问题:

我们知道,当您想要强制两个序列在其整个长度上对齐时,全局对齐算法非常有用,局部对齐查找两个序列之间最相似的区域,并从那里向外构建对齐


当我们有一个很长的序列和一个小序列库时,在一个库中找到小序列串联的最佳算法是什么?一种简单的方法是尝试每一种排列。如果
S
是库中每个小序列的排列集,则可以逐个将大序列与
S
中的每个序列对齐,并查看哪一个具有最小对齐成本。不幸的是,这对CPU不友好,因为
S
的大小与小序列的数量成指数关系∑ 是字母表(例如,{A,C,g,T})。让我⊆ ∑* 是一组短库序列。计算最小状态DFA(Q,∑, ∂, q0,F)表示L*

我们扫描长序列x∈ ∑* 一次一封信。设x'为已使用的x的前缀。我们保持,对于每个状态q∈ Q、 [每个序列y]上的最小cq(x')∈ ∑* 以致∂(q0,y)=x'和y之间Levenshtein距离的q]

对于空前缀ε,对于每个状态q∈ Q、 它认为cq(ε)=min{y}:y∈ ∑*, ∂(q0,y)=q},因为y和ε之间的距离是y的长度。使用转换图上的宽度优先搜索计算初始表

给定x'和字母s的表格,我们计算cq(x)作为y的几种可能性的最小值,其中x=x's

  • 字符串y=y的z,对齐s。这种情况下的成本为minq',z:∂(q',sz)=q(cq'(x')+| z |),可通过| q |广度优先搜索计算

  • 字符串y=y',删除x中的s。这种情况下的成本为cq(x')+1

  • 字符串y=y't,其中t是一个字母,用s代替t(反之亦然)。这种情况下的成本为minq',t:∂(q',t)=q(cq'(x')+1)

  • 最后,最优对准代价为minq∈ F cq(x)。对齐可以用动态程序的常用方法重建