roo*_*ook 10 python algorithm performance data-structures
我正在构建一个非常大的字典,我正在执行许多检查以查看密钥是否在结构中,然后添加它是否唯一或递增计数器(如果它是相同的).
Python使用哈希数据结构来存储字典(不要与加密哈希函数混淆).查找是O(1),但如果哈希表已满,则必须重新进行,这非常昂贵.
我的问题是,我会更好地使用AVL二进制搜索树 还是哈希表足够好?
Gar*_*ees 24
唯一可以肯定的方法是实现和检查,但我的通知猜测是字典会更快,因为二进制搜索树的成本为O(log(n)),用于查找和插入,我认为除了在最不重要的情况下(例如大规模哈希冲突),哈希表的O(1)查找将超过偶尔的大小调整.
如果你看一下Python字典的实现,你会看到:
PyDict_MINSIZE
)开头;(" 优化字典的注意事项 "也值得一读.)
因此,如果您的词典有1,000,000个条目,我相信它将被调整大小十一次(8→32→128→512→2048→8192→32768→131072→262144→524288→1048576→2097152),额外插入成本为2,009,768调整大小.这似乎远远低于将1,000,000次插入到AVL树中所涉及的所有重新平衡的成本.