| Literature DB >> 16156887 |
Peter Steffen1, Robert Giegerich.
Abstract
BACKGROUND: Dynamic programming is a widely used programming technique in bioinformatics. In sharp contrast to the simplicity of textbook examples, implementing a dynamic programming algorithm for a novel and non-trivial application is a tedious and error prone task. The algebraic dynamic programming approach seeks to alleviate this situation by clearly separating the dynamic programming recurrences and scoring schemes.Entities:
Mesh:
Substances:
Year: 2005 PMID: 16156887 PMCID: PMC1261154 DOI: 10.1186/1471-2105-6-224
Source DB: PubMed Journal: BMC Bioinformatics ISSN: 1471-2105 Impact factor: 3.169
Figure 1Typical elements found in RNA secondary structure.
Figure 2Two candidates in the search space for the best secondary structure for the sequence gucaugcaguguca.
Figure 3Tree grammar nussinov78. Terminal symbols in italics.
Figure 4Tree grammar wuchty98. Terminal symbols in italics.
Figure 5Four evaluation algebras for grammar wuchty98. Arguments a and b denote bases, (i, j) represents the input subword w.... w, and s denotes answer values. Function dots(r) in algebra pretty yields a string of r dots ('.').
Applications of grammars wuchty98 and nussinov78 with different individual algebras on input w = cgggauaccacu.
| Application | Result |
| wuchty98(enum, w) | [Str (Ul (Bl (0,1) (Sr 'g' (Hl 'g' (3,10) 'c') 'u'))), Str (Ul (Bl (0,2) (Sr 'g' (Hl 'g' (4,10) 'c') 'u'))), Str (Cons (Bl (0,1) (Sr 'g' (Hl 'g' (3,7) 'c') 'c')) (Ul (Ss (9,12)))), Str (Cons (Bl (0,2) (Sr 'g' (Hl 'g' (4,7) 'c') 'c')) (Ul (Ss (9,12)))), Str (Ul (Ss (0,12)))] |
| wuchty98(pretty, w) | [".((.......))", "..((......))", ".((....))...", "..((...))...", "............"] |
| wuchty98(bpmax, w) | [2] |
| wuchty98(count,w) | [5] |
| nussinov78(count,w) | [9649270] |
Measuring time and space requirements of the product operation. All results are for a C implementation of wuchty98, running on a 900 MHz Ultra Sparc 3 CPU under Sun Solaris 10. The space requirements were measured using a simple wrapper function for malloc, that counts the number of allocated bytes. Times were measured with gnu time.
| |w| | wuchty98(bpmax,w) | wuchty98(bpmax***bpmax,w) | % | |
| time (sec) | 200 | 0.58 | 0.69 | + 18.97 |
| space (MB) | 200 | 1.88 | 2.06 | + 9.57 |
| time (sec) | 400 | 4.65 | 6.02 | + 29.46 |
| space (MB) | 400 | 4.60 | 5.37 | + 16.74 |
| time (sec) | 800 | 52.04 | 65.54 | + 25.94 |
| space (MB) | 800 | 15.61 | 18.77 | + 20.24 |
| time (sec) | 1600 | 590.72 | 725.03 | + 22.74 |
| space (MB) | 1600 | 59.85 | 72.62 | + 21.34 |
Example applications of product algebras with grammar wuchty98 on input w = cgggauaccacu.
| Application | Result |
| wuchty98(bpmax***count,w) | [(2,4)] |
| wuchty98(bpmax***pretty,w) | [(2,".((.......))"), (2,"..((......))"), (2,".((....))..."), (2,"..((...))...")] |
| wuchty98(bpmax***enum,w) | [(2, Str (Ul (Bl (0,1) (Sr 'g' (Hl 'g' (3,10) 'c') 'u')))), (2, Str (Ul (Bl (0,2) (Sr 'g' (Hl 'g' (4,10) 'c') 'u')))), (2, Str (Cons (Bl (0,1) (Sr 'g' (Hl 'g' (3,7) 'c') 'c')) (Ul (Ss (9,12))))), (2, Str (Cons (Bl (0,2) (Sr 'g' (Hl 'g' (4,7) 'c') 'c')) (Ul (Ss (9,12)))))] |
| wuchty98(bpmax***(enum***pretty,w) | [(2,(Str (Ul (Bl (0,1) (Sr 'g' (Hl 'g' (3,10) 'c') 'u'))), ".((.......))")), (2, (Str (Ul (Bl (0,2) (Sr 'g' (Hl 'g' (4,10) 'c') 'u'))), "..((......))")), (2,(Str (Cons (Bl (0,1) (Sr 'g' (Hl 'g' (3,7) 'c') 'c')) (Ul (Ss (9,12)))), ".((....))...")), (2, (Str (Cons (Bl (0,2) (Sr 'g' (Hl 'g' (4,7) 'c') 'c')) (Ul (Ss (9,12)))), "..((...))..."))] |
| wuchty98(shape***count, w) | [("_ [_]", 2), ("_ [_]_", 2), ("_",1)] |
| wuchty98(bpmax(5)***shape, w) | [(2,"_ [_]"), (2,"_ [_]_"), (0,"_")] |
| wuchty98(bpmax(5)***(shape***count), w) | [(2, ("_[_]", 2)), (2, ("_[_]_", 2)), (0, ("_",1))] |
| wuchty98(shape***bpmax, w) | [("_[_]", 2), ("_[_]_", 2), ("_",0)] |
| wuchty98(bpmax***pretty', w) | [(2,".((....))...")] |
| wuchty98(pretty***count, w) | [(".((.......))",1), ("..((......))",1), (".((....))...",1), ("..((....))...",1), ("............",1)] |