|
|
9#

楼主 |
发表于 2013-10-7 09:01:33
|
只看该作者
最野蛮也是最简单的办法:一个一个比。, U0 y: T/ @/ k" `( S& s: U2 F
+ }1 s, t: H5 w" X4 fstring1: TACGGCATGGCTATCGTAGCTAG; S% S2 ~. F2 ]9 N8 k" Y2 _: Y3 X
7 T* o7 s9 M. A( g- ?" A( J* a \
string2: GCTAT. O+ r) I7 D* X# ~ Q( `1 e
1 ]' @0 g" _7 h& E; M. M3 j要求在string1里找到string2的位置,如果存在多个的话,都要找出来。 ) V o. l! i. @* y! h
/ l0 N& ?* ]/ S1 U% b/ H" G2 N拿string2和string1比,至少需要比string1的长度减去string2的长度再加1次。在实际应用中,如果string1的长度是10^9,而string2只有一二百,那么做一次基本上就是比10^9次。当然如果很幸运,string2在string1开始的地方,那一次就够了。所以平均来说,要比10^9/2次,也就是O(10^9)。1 T/ r: I0 ?: Q; d* N5 q& O
! y) u# I* B* @6 w# _但是如果实际情况中,有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年!!!人都死几次还没比完,太郁闷了,所以不可接受。: z, ~8 D H! H* T/ P5 B" u$ c1 b3 T
$ N Z# U8 Q( Q# z那如果是这个样子
& C6 ?& u. h p/ ~; R, \: T7 P
4 B3 L* V, Y: O9 p% Q! ystring1: AAAAAATTTTCCCCCGGGTTTTAAAACCCCCCGG
: w d+ ^, c0 }( i; Gstring2: TTAAA9 s8 [7 \; E0 s; M& ~& d
; _* y, Z: R9 S" C- g* Z
是不是会快很多?
& x2 f* K4 X g1 \4 L& D! B- X E4 d4 x* w, [1 ~" H( ?
继续扛。 |
|