|
9#
楼主 |
发表于 2013-10-7 09:01:33
|
只看该作者
最野蛮也是最简单的办法:一个一个比。, l v4 c& M3 ~! m
" ?) o7 h v' D" C2 n9 p) w% istring1: TACGGCATGGCTATCGTAGCTAG9 j( x2 c' \( S5 F* G6 G
1 s' }% e+ _* _3 Dstring2: GCTAT& N) j( W* M2 a
2 C2 m! g% r# M( C& p/ G% E要求在string1里找到string2的位置,如果存在多个的话,都要找出来。
8 J1 G0 U: Z q- q" V' D' H+ u
8 T/ U1 u. L9 y2 Y) [( r拿string2和string1比,至少需要比string1的长度减去string2的长度再加1次。在实际应用中,如果string1的长度是10^9,而string2只有一二百,那么做一次基本上就是比10^9次。当然如果很幸运,string2在string1开始的地方,那一次就够了。所以平均来说,要比10^9/2次,也就是O(10^9)。
8 c$ T. h; h/ Q. x1 l
" e9 m9 M/ {7 k+ K但是如果实际情况中,有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年!!!人都死几次还没比完,太郁闷了,所以不可接受。, _ N# N' S }, m h3 _9 _- O
/ j9 U2 [0 e& t$ ~+ \* H, v; D- A那如果是这个样子
0 V, d2 X+ k# E' R5 b2 O/ n
6 T" h1 s8 e1 V) Hstring1: AAAAAATTTTCCCCCGGGTTTTAAAACCCCCCGG
0 O, C0 ?0 K- |string2: TTAAA4 J! F) i! t& E7 I ^5 m- r' l
/ _4 p% [" e8 k是不是会快很多?0 ]4 p6 o4 K( P- i6 T
: P7 y* t( a1 z6 ^4 m5 g4 F. B
继续扛。 |
|