J'ai implémenté une petite fonction bruteforce code>, en utilisant une évaluation paresseuse pour trouver la première solution valide pour un problème:
$ ./brute +RTS -s -M200M
Heap exhausted;
Current maximum heap size is 209715200 bytes (200 MB);
use `+RTS -M<size>' to increase it.
4 Réponses :
Vous pouvez ignorer tous ces Ceci est probablement aussi bien en mémoire de la mémoire. comme La fonction Génératrice code> peut être réécrite comme ceci: juste code> s et
SO code> s je suppose ...
bruteforce code> peut obtenir; Tous les autres problèmes sont en raison de la fonction
f code> qui est brute-forcée. p>
"aa"
"ba"
...
"za"
"ab"
"bb"
Quel est le problème avec bruteforce f = listtomaybe. Filtre f code>? Il ne sert à rien d'être excessivement inutile. :)
Être inutile est par définition inutile, n'est-ce pas? : P Je choisirai certainement de ne pas être complètement inutile dans ce cas au cas où elle rend la solution plus claire.
Bien que j'aime vos suggestions, il a presque la même utilisation de la mémoire: /
Si la consommation de mémoire est la principale préoccupation, arrêtez le partage Remplacer P> avec p> et dites au compilateur que vous êtes sérieux À propos de ne pas le partager: p> qui fonctionne dans p> petite mémoire résident. Bien entendu, la recomutation signifie que l'allocation totale est beaucoup plus élevée et il faut également beaucoup plus de temps pour calculer le résultat. P> Un meilleur algorithme pourrait réduire la consommation de temps et em>. P > p> NextGen code>. C'est une énorme liste.
+1 Parce que c'est l'algorithme avec un meilleur comprimé de mémoire de loin si la mémoire est la principale préoccupation.
Merci! Je ne savais pas que où code> est tellement explicite sur le partage. À un moment donné, le partage est toujours utile dans
GeneratorString Code>, donc je le forte à le partager le premier par exemple. Cinq récursions, ce qui est une grande vitesse.
Je pense que votre générateur est un peu trop strict. Un générateur optimal est censé donner autant que possible la liste des résultats avec autant d'informations sur le résultat de l'application récursive.
Permettez-nous de la ligne suivante. P>
$ ./brute +RTS -s zabcde 4,165,170,696 bytes allocated in the heap 5,569,320 bytes copied during GC 29,848 bytes maximum residency (5 sample(s)) 26,560 bytes maximum slop 2 MB total memory in use (0 MB lost due to fragmentation)
Puisque personne ne semble l'avoir mentionné pour le moment, j'aimerais simplement souligner que p>
bruteforce = data.list.find p>