trie樹與hash表的查詢速度對比

2021-07-15 13:18:22 字數 1574 閱讀 2024

#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樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比雜湊樹高。常見的可以使用字典樹解決的問題舉例 ...