Talk about optimization in README.md

Code cleaning
master
Frédéric BISSON 9 years ago
parent 07eb8a0ea5
commit 2fe79fe4e0

@ -88,4 +88,60 @@ bases. Par exemple `abcdef` et `defghi` coïncident mais pas `abcdef` et `efghij
Ce comportement peut être changé en modifiant `minbase`. Ce comportement peut être changé en modifiant `minbase`.
Lalgorithme fonctionne uniquement sil existe au moins une solution utilisant Lalgorithme fonctionne uniquement sil existe au moins une solution utilisant
tous les morceaux. tous les morceaux.
Optimisation
------------
Quelques optimisations ont été appliquées sur le code de `wookie.hs`.
### ByteString ###
Tout dabord, des `ByteString` sont utilisées. Elles permettent de recourir à
des fonctions de complexité O(1) pour la plupart.
### Liste inversée ###
La structure contenant les couples `(pièces utilisées, pièces restantes)`
utilise une `List` inversée pour les pièces utilisées. Cest-à-dire que la
suite `[abcd, cdef, efgh]` est stockée sous la forme `[efgh, cdef, abcd]`. Cela
permet de lire le dernier élément de la liste ou dajouter un nouvel élément
en O(1).
### Pièces restantes ###
La structure contenant les couples `(pièces utilisées, pièces restantes)`
utilise un `Set` pour les pièces restantes. Cela permet de supprimer des
pièces en O(log n).
### Coincide ###
La fonction la plus utilisée et la plus consommatrice de `wookie.hs` est la
fonction `coincide` :
COST CENTRE MODULE %time %alloc
coincide Main 89.3 92.8
next Main 5.9 6.5
-+- Main 4.3 0.5
individual inherited
COST CENTRE MODULE no. entries %time %alloc %time %alloc
MAIN MAIN 49 0 0.0 0.0 100.0 100.0
main Main 99 0 0.0 0.0 100.0 100.0
main.solutions Main 106 1 0.0 0.0 100.0 100.0
loopUntilComplete Main 107 47 0.2 0.0 100.0 100.0
complete Main 116 0 0.1 0.0 0.1 0.0
remains Main 117 376104 0.0 0.0 0.0 0.0
loopUntilComplete.ss' Main 108 47 0.0 0.0 99.7 100.0
nexts Main 110 0 0.2 0.1 99.7 100.0
next Main 111 376150 5.9 6.5 99.5 99.9
-+- Main 112 9764492 4.3 0.5 93.6 93.3
coincide Main 113 276308151 89.3 92.8 89.3 92.8
main.starts Main 104 1 0.0 0.0 0.0 0.0
initSequences Main 105 1 0.0 0.0 0.0 0.0
main.rs Main 103 1 0.0 0.0 0.0 0.0
assemble Main 101 0 0.0 0.0 0.0 0.0
Elle serait donc la fonction à optimiser pour encore améliorer la vitesse :o)

@ -4,7 +4,6 @@ import qualified Data.ByteString.Char8 as B
import Data.Set (Set, delete, toList, fromList) import Data.Set (Set, delete, toList, fromList)
import qualified Data.Set as Set import qualified Data.Set as Set
import Data.Maybe (catMaybes) import Data.Maybe (catMaybes)
import Data.List (find)
{-| {-|
Taille minimum pour le recouvrement des `Reads` Taille minimum pour le recouvrement des `Reads`

Loading…
Cancel
Save