|
|
9#

楼主 |
发表于 2013-10-7 09:01:33
|
只看该作者
最野蛮也是最简单的办法:一个一个比。: a A1 r; I1 d) o: _
7 A/ g; A0 H% ]0 Sstring1: TACGGCATGGCTATCGTAGCTAG5 U$ Z! q6 }, p. A, o
* ~- h; C' V* ]string2: GCTAT
' ~5 W7 j; X I1 f& L( m0 f. S9 H# z% b9 Q _% I) {7 A* t& E) N
要求在string1里找到string2的位置,如果存在多个的话,都要找出来。
1 q" r4 `! ~" n4 w2 E7 H5 L0 u
; ^# \! F$ a3 u( y& w- K" u拿string2和string1比,至少需要比string1的长度减去string2的长度再加1次。在实际应用中,如果string1的长度是10^9,而string2只有一二百,那么做一次基本上就是比10^9次。当然如果很幸运,string2在string1开始的地方,那一次就够了。所以平均来说,要比10^9/2次,也就是O(10^9)。
2 F! H$ R+ J6 E0 i) S* e( t( a( s6 [% }# 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年!!!人都死几次还没比完,太郁闷了,所以不可接受。
" {8 M/ t6 v( C; z$ U( o$ K& G* Z% Y5 B) q# Q
那如果是这个样子
Q: v5 s+ U+ m
0 V O! E5 g% o5 {( Y# jstring1: AAAAAATTTTCCCCCGGGTTTTAAAACCCCCCGG0 A) T! D9 R$ |& ]
string2: TTAAA) b8 ~% G& D9 @, @/ C5 c
8 C1 p1 L/ [8 Y# `( D* t是不是会快很多?
% n# A, S. P7 s- G$ _6 n9 [0 x0 @5 c: D9 @, ], a: o4 M4 l
继续扛。 |
|