#include
#include
#include
#include
#include "trie_tree.h"
using
namespace
std;
int trie_null(void * v, int f)
class strhash
return (hash & 0x7fffffff);
}};class ignorecasecomparator
};typedef
std::tr1::unordered_map
std::string, unsigned
long, strhash,
ignorecasecomparator> nametblmetamap;
int main()
; sprintf(buf, "%ld", i);
m_tables[string(buf)] = i;
insert_trie_tree(&m_table, (unsigned
char*) buf, (void*) i);
}string *slist = new
string[1000];
char ** plist = new
char*[1000];
for (int i = 0; i < 1000; i++)
struct timespec s, e;
clock_gettime(clock_realtime, &s);
for (int i = 0; i < 100000; i++)
}clock_gettime(clock_realtime, &e);
printf("trie %lu\n",
(e.tv_sec - s.tv_sec) * 1000000000 + e.tv_nsec - s.tv_nsec);
clock_gettime(clock_realtime, &s);
for (int i = 0; i < 100000; i++)
}clock_gettime(clock_realtime, &e);
printf("unordered_map %lu\n",
(e.tv_sec - s.tv_sec) * 1000000000 + e.tv_nsec - s.tv_nsec);
}
插入10000條記錄,對其中的1000條記錄進行查詢,做100000輪。
trie樹的耗時為3251830320ns
stl unordered_map耗時為7080112117ns
多次執行時間波動較小,可見此情況下trie樹的速度超過unordered_map兩倍
調小插入的記錄數至1000時
trie樹的耗時為3195810157
stl unordered_map耗時為7020927158
變化不大
分別注釋掉trie樹和unordered_map的插入,不做查詢,然後插入11100000-11170000共7萬條後,使用pmap檢視記憶體占用
Trie樹實現詞頻統計與查詢
encoding utf 8 from collections import defaultdict import sys reload sys sys.setdefaultencoding utf8 class lbtrie implemention of trie in python.def i...
Trie樹分析及其查詢的實現
trie樹是在查詢問題中以空間換取時間的做法,時間複雜度為o n 所以存在空間的大量消耗。本文trie樹的應用便是查詢某個詞綴在字典中出現的頻率。1 根節點不儲存任何字元 2 以某乙個字串結束標誌節點為止,根節點至該節點所構成的路徑內所有節點字元順序構成乙個字串 3 節點的所有子節點應包含不同的字元...
字典(trie)樹的應用與實現
字典樹又稱單詞查詢樹,trie樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比雜湊樹高。常見的可以使用字典樹解決的問題舉例 ...