|
|
9#

楼主 |
发表于 2013-10-7 09:01:33
|
只看该作者
最野蛮也是最简单的办法:一个一个比。( P) N0 j9 W8 O8 Z
" U/ w }. o$ ^& m7 G1 D1 pstring1: TACGGCATGGCTATCGTAGCTAG
( n# Y( b! ^* @8 Y
3 t! f, e6 v# F5 T# V1 Nstring2: GCTAT" Y e8 z0 O* V$ y8 c
' E- b7 W- ^. V4 p8 o' q& H. e要求在string1里找到string2的位置,如果存在多个的话,都要找出来。
3 V0 e( \' D: p. Q. ]
1 z# P& O2 r9 J- c+ s- G( _) Q拿string2和string1比,至少需要比string1的长度减去string2的长度再加1次。在实际应用中,如果string1的长度是10^9,而string2只有一二百,那么做一次基本上就是比10^9次。当然如果很幸运,string2在string1开始的地方,那一次就够了。所以平均来说,要比10^9/2次,也就是O(10^9)。8 {4 _, M5 r2 C g3 m4 C5 |
& i' p! e2 S, {3 w' H% m a6 [
但是如果实际情况中,有10^6到10^9个string2s,那总共要比多少次?10^15到10^18次。这什么概念?不考虑所有的overhead,比一次只需一个时钟,那3G的CPU,意味着一秒可以比10^9次,要完成这样一个工作,需要10^6到10^9秒,1年=365天 x 24小时 x 3600秒=31Millon秒。也就是说,最短大约需要12天,最长需要30年。如果这样的操作做十次,一台CPU要算至少120天到300年!!!人都死几次还没比完,太郁闷了,所以不可接受。& Q# @+ N" Z, Z
9 Y" `' T: w5 u0 u6 b那如果是这个样子
& E, _. b5 {/ @! U! S' r- o4 l! w- W0 h( |; z, z
string1: AAAAAATTTTCCCCCGGGTTTTAAAACCCCCCGG
* d- E: d1 n8 H. ?/ j) R) R' w0 Dstring2: TTAAA( f( m! T* {7 N" C' C N- R
$ Q0 H! v4 n* Z$ d6 u& j+ C5 G
是不是会快很多?
, C4 e( P- u9 w/ m' O. a7 C. v, D% K- B, P, U H+ \
继续扛。 |
|