|
|
9#

楼主 |
发表于 2013-10-7 09:01:33
|
只看该作者
最野蛮也是最简单的办法:一个一个比。- u$ ?+ t- M5 N4 r
- g) K+ `( i0 B% `3 {$ t6 h' Bstring1: TACGGCATGGCTATCGTAGCTAG
7 f. u1 ?7 `% ~ y4 c4 f" n2 n
5 @; c) L8 h+ D+ G) Dstring2: GCTAT
8 c) W; s- A2 X i" e, q* J2 N
要求在string1里找到string2的位置,如果存在多个的话,都要找出来。 ' s" @6 Z; a) S: w
5 z6 L. A5 \7 V( \拿string2和string1比,至少需要比string1的长度减去string2的长度再加1次。在实际应用中,如果string1的长度是10^9,而string2只有一二百,那么做一次基本上就是比10^9次。当然如果很幸运,string2在string1开始的地方,那一次就够了。所以平均来说,要比10^9/2次,也就是O(10^9)。
, Z3 x6 p5 }! @. s$ i- ^. m# m+ N$ _" e& i8 Y9 I$ P
但是如果实际情况中,有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年!!!人都死几次还没比完,太郁闷了,所以不可接受。$ _! S& S7 z; }, p0 b
7 p) h9 j" X% M那如果是这个样子# T+ ~$ {" g; @ }( G1 A
2 w8 \# m- m, {* V5 N& O3 \string1: AAAAAATTTTCCCCCGGGTTTTAAAACCCCCCGG
" m, G8 P0 Q- f8 p. f$ f, Fstring2: TTAAA
2 t& q! Z- v$ @1 p$ F+ Q4 C1 C9 x# U0 K8 m5 a; M
是不是会快很多?
# y2 `4 R- O2 ]5 @
2 k0 a( ]3 b N% e3 S: {4 B继续扛。 |
|