请问有人能够解释一下像Python、Ruby这样的流行编程语言是如何实现哈希表进行符号查找的吗?它们使用经典的“数组和链表”方法,还是使用平衡树?
我需要一种简单(少量代码行)且快速的方法,用于索引用C语言编写的DSL中的符号。想知道其他人发现什么最有效和实用。
请问有人能够解释一下像Python、Ruby这样的流行编程语言是如何实现哈希表进行符号查找的吗?它们使用经典的“数组和链表”方法,还是使用平衡树?
我需要一种简单(少量代码行)且快速的方法,用于索引用C语言编写的DSL中的符号。想知道其他人发现什么最有效和实用。
我见过的每一个实现都使用了你提到的经典的“哈希桶数组”。
其中最有教育意义的版本是Tcl语言中的哈希实现,在文件tcl/generic/tclHash.c中。该文件中超过一半的行都是解释详细说明的注释:分配、搜索、不同的哈希表类型、策略等等。另外,Tcl语言的代码实现真的很易读。
关于“最有效和实用”的问题,使用其他人的哈希库。千万不要为了生产使用而自己编写。已经有成千上万个健壮且高效的哈希库存在。
TreeMap
是基于红黑树实现的,而ConcurrentSkipListMap
则是基于跳表实现的。 - coderzCrashworks 的意思是……
哈希表的目的是实现常数时间的查找、添加和删除。在算法方面,所有操作的时间复杂度都是 O(1) 摊销的。而如果使用树,则平衡树的最坏情况操作时间为 O(log n),其中 n 是节点数。但是,我们真的将哈希实现为树吗?