|
|
9#

楼主 |
发表于 2013-10-7 09:01:33
|
只看该作者
最野蛮也是最简单的办法:一个一个比。
0 i3 `3 L; f* p; S7 R, D2 Z6 r" v9 ]0 J- ~
string1: TACGGCATGGCTATCGTAGCTAG/ R% w; n, Q, e2 i! N. d$ u
2 j; S, B7 I* V0 b1 ^
string2: GCTAT
$ K& y2 \3 X2 a% z
; U* }5 u5 J3 O( M要求在string1里找到string2的位置,如果存在多个的话,都要找出来。
% W& [$ D5 G! M- [$ h
" ]" s; S- |8 w3 w& b( W拿string2和string1比,至少需要比string1的长度减去string2的长度再加1次。在实际应用中,如果string1的长度是10^9,而string2只有一二百,那么做一次基本上就是比10^9次。当然如果很幸运,string2在string1开始的地方,那一次就够了。所以平均来说,要比10^9/2次,也就是O(10^9)。
0 Z7 z; G) [/ h m; J* {/ e
2 ~; V/ X" i' |; W: y7 M但是如果实际情况中,有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年!!!人都死几次还没比完,太郁闷了,所以不可接受。
# [4 ]6 d, g4 Q* J( p- o8 _) l, J9 w. o: L- I
那如果是这个样子2 j' `/ p* G6 |/ t2 w- ] a! o
|9 M* l( W; v+ B+ O* `8 F1 K9 s$ g( M
string1: AAAAAATTTTCCCCCGGGTTTTAAAACCCCCCGG# H6 \3 j$ }! i6 }7 ]9 |( t- m7 w( Y
string2: TTAAA* [: j( G, n; _( U6 q+ z
0 l: F5 l% i& G3 A' \5 h是不是会快很多?
' ~. S& Y: B: {7 I7 g% M7 C. _! ~) U
继续扛。 |
|