本帖最后由 jason680 于 2015-09-06 13:34 编辑
回复 1# substr函数
有想法/算法,才有代码...
dna = 'ACGUAGCU'
AU,CG分组
AU => AUAU
CG => CGGC
简单(AU,CG)组合匹配是容易的......
AUAU => AUAU, AUAU
CGGC => CGGC, CGGC(交叉匹配)
要 优化 符合(不可交叉)条件匹配...
就要费心找出想法/算法...
设权数 A = +1(记号: p), U = -1(记号: n)
AUAU
pnpn <==权数(p=+1, n=-1)
NNNN <==使用(Y=Yes/Used, N=No/No Use)
设权数 C = +1(记号:p), G = -1(记号: n)
CGGC
pnnp <==权数(p=+1, n=-1)
NNNN <==使用(Y=Yes/Used, N=No/No Use)
递归 匹配
a: 找到第一个 未使用AU(或CG)
记录 使用(Y),且设该位置为S点(start开始点)
例:
AUAU
pnpn <==权数(p=+1, n=-1)
YNNN <==使用(Y=Yes/Used, N=No/No Use)
S
b: 向后(向右) 找AU(或CG)匹配 E点(结束点)
AU匹配条件: S到E权数和= 0, 且S,E为匹配AU或UA(权数和=0) 不可为AA(权数和+2)或UU(权数和-2)
CG匹配条件: S到E权数和= 0, 且S,E为匹配GC或CG(权数和=0) 不可为CC(权数和+2)或GG(权数和-2)
S到E权数和= 0, 为 算法 优化 重点...
匹配成功, 例: -------------------------------------------------
AUAU
pnpn <==权数(p=+1, n=-1)
YYNN <==使用(Y=Yes/Used, N=No/No Use)
SE
AU匹配(权数匹配p,n = +1,-1 = 0)
S到E权数和 = p,n = +1,-1 = 0,
匹配(一组)完成,设定 E点为使用(Y)
调用下一个递归......直到全部(未使用N)匹配成功
匹配失败,例: -------------------------------------------
CGGC => CGGC, CGGC(交叉匹配)
第一次CG匹配成功
CGGC
pnnp <==权数(p=+1, n=-1)
YYNN <==使用(Y=Yes/Used, N=No/No Use)
SE
CG匹配(权数匹配p,n = +1,-1 = 0)
S到E权数和 = p,n = +1,-1 = 0,
匹配(一组)完成,设定 E点为使用(Y)
调用下一个递归......直到全部(未使用N)匹配成功
第二次CG匹配失败(优化重点 - 排除交叉匹配)
CGGC
pnnp <==权数(p=+1, n=-1)
YNNN <==使用(Y=Yes/Used, N=No/No Use)
S_E
CG(权数和 0)虽是匹配....
S到E权数和 = p,n,n = +1,-1,-1 = -1 (非交叉匹配检查:失败)
第三次CG匹配失败(CC匹配)
CGGC
pnnp <==权数(p=+1, n=-1)
YNNN <==使用(Y=Yes/Used, N=No/No Use)
S__E
CC(权数和+2) 匹配检查:失败
S到E权数和 = p,n,n,p = +1,-1,-1,+1 = 0
CGGC匹配结束(只有一次匹配成功)
---------------------------------------------------------------------------------------
- --- 0000000001111111
- --- 1234567890123456
- in: ACGUAGCUACGUAGCU
- AU: A UA UA UA U
- CG: CG GC CG GC
- Pos: A(1) U(4) A(5) U(8) A(9) U(12) A(13) U(16)
- Pos: C(2) G(3) G(6) C(7) C(10) G(11) G(14) C(15)
- 1: [ [1,4], [5,8], [9,12], [13,16] ]
- 2: [ [1,4], [5,8], [9,16], [12,13] ]
- 3: [ [1,4], [5,12], [8,9], [13,16] ]
- 4: [ [1,4], [5,16], [8,9], [12,13] ]
- 5: [ [1,4], [5,16], [8,13], [9,12] ]
- 6: [ [1,8], [4,5], [9,12], [13,16] ]
- 7: [ [1,8], [4,5], [9,16], [12,13] ]
- 8: [ [1,12], [4,5], [8,9], [13,16] ]
- 9: [ [1,12], [4,9], [5,8], [13,16] ]
- 10: [ [1,16], [4,5], [8,9], [12,13] ]
- 11: [ [1,16], [4,5], [8,13], [9,12] ]
- 12: [ [1,16], [4,9], [5,8], [12,13] ]
- 13: [ [1,16], [4,13], [5,8], [9,12] ]
- 14: [ [1,16], [4,13], [5,12], [8,9] ]
- AU count: 14
- 1: [ [2,3], [6,7], [10,11], [14,15] ]
- 2: [ [2,3], [6,15], [7,14], [10,11] ]
- 3: [ [2,11], [3,10], [6,7], [14,15] ]
- CG count: 3
- Total count: 42
复制代码
|