Mercurial > hg > toys
changeset 8:b2c93de84b36
Add a small caching optimisation
author | Jordi Gutiérrez Hermoso <jordigh@gmail.com> |
---|---|
date | Sat, 01 Jan 2011 04:05:10 -0600 |
parents | feead6f50850 |
children | 7ce081b92ff9 |
files | bk-tree.c++ |
diffstat | 1 files changed, 8 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/bk-tree.c++ +++ b/bk-tree.c++ @@ -10,6 +10,8 @@ struct bk_tree { std::string word; + //For caching levenshtein distances + std::map<std::string, size_t> lev_cache; std::map<size_t, bk_tree*> children; }; typedef std::map<size_t, bk_tree*> branches; @@ -101,7 +103,12 @@ bool query_tree( bk_tree & tree, std::string& word, size_t m) { size_t d; - if( (d = levenshtein(tree.word,word)) <= m) + if( tree.lev_cache.find(word) != tree.lev_cache.end()) + d = tree.lev_cache[word]; + else + tree.lev_cache[word] = d = levenshtein(tree.word,word); + + if( d <= m) return true; bool found = false;