ADPfusion: Efficient, high-level dynamic programming.
ADPfusion combines stream-fusion (using the stream interface provided by the vector library) and type-level programming to provide highly efficient dynamic programming combinators.
From the programmers' viewpoint, ADPfusion behaves very much like the original ADP implementation http://bibiserv.techfak.uni-bielefeld.de/adp/ developed by Robert Giegerich and colleagues, though both combinator semantics and backtracking are different.
The library internals, however, are designed not only to speed up ADP by a large margin (which this library does), but also to provide further runtime improvements by allowing the programmer to switch over to other kinds of data structures with better time and space behaviour. Most importantly, dynamic programming tables can be strict, removing indirections present in lazy, boxed tables.
As an example, even rather complex ADP code tends to be completely optimized to loops that use only unboxed variables (Int# and others, indexIntArray# and others).
Completely novel (compared to ADP), is the idea of allowing efficient monadic combinators. This facilitates writing code that performs backtracking, or samples structures stochastically, among others things.
This version is still highly experimental and makes use of multiple recent improvements in GHC. This is particularly true for the monadic interface.
Long term goals: Outer indices with more than two dimensions, specialized table design, a combinator library, a library for computational biology.
Two algorithms from the realm of computational biology are provided as examples on how to write dynamic programming algorithms using this library: http://hackage.haskell.org/package/Nussinov78 and http://hackage.haskell.org/package/RNAFold.
Changes since 0.0.1.0:
compatibility with GHC 7.4
note: still using fundeps & and TFs together. The TF-only version does not optimize as well (I know why but not yet how to fix it)
[Skip to Readme]
Downloads
- ADPfusion-0.0.1.2.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
- No Candidates
Versions [RSS] | 0.0.1.0, 0.0.1.1, 0.0.1.2, 0.1.0.0, 0.2.0.0, 0.2.0.1, 0.2.0.2, 0.2.0.3, 0.2.0.4, 0.2.1.0, 0.4.0.0, 0.4.0.1, 0.4.0.2, 0.4.1.0, 0.4.1.1, 0.5.0.0, 0.5.1.0, 0.5.2.0, 0.5.2.2, 0.6.0.0 (info) |
---|---|
Dependencies | base (>=4 && <5), primitive (>=0.4 && <0.5), PrimitiveArray (==0.2.2.0), vector (>=0.9 && <0.10) [details] |
License | BSD-3-Clause |
Copyright | Christian Hoener zu Siederdissen, 2011-2012 |
Author | Christian Hoener zu Siederdissen, 2011-2012 |
Maintainer | choener@tbi.univie.ac.at |
Category | Algorithms, Data Structures, Bioinformatics |
Home page | http://www.tbi.univie.ac.at/~choener/adpfusion |
Source repo | head: git clone git://github.com/choener/ADPfusion |
Uploaded | by ChristianHoener at 2012-07-08T01:13:47Z |
Distributions | |
Reverse Dependencies | 15 direct, 1 indirect [details] |
Downloads | 19909 total (45 in the last 30 days) |
Rating | (no votes yet) [estimated by Bayesian average] |
Your Rating | |
Status | Docs uploaded by user Build status unknown [no reports yet] |