Python设置列表比较算法的哈希表性能
我的印象是Python中的集合是使用哈希表实现的。但是,在下面的代码中,基于集合的版本的性能要比哈希表版本好得多。我想sets实现与我在Python设置列表比较算法的哈希表性能,python,time-complexity,Python,Time Complexity,我的印象是Python中的集合是使用哈希表实现的。但是,在下面的代码中,基于集合的版本的性能要比哈希表版本好得多。我想sets实现与我在count\u common\u elements\u hash\u table()中所做的完全不同。谁能解释一下性能上的差异吗 import random import time import decimal def count_common_elements_sets(l1, l2): common_elements = set(l1).inter
count\u common\u elements\u hash\u table()
中所做的完全不同。谁能解释一下性能上的差异吗
import random
import time
import decimal
def count_common_elements_sets(l1, l2):
common_elements = set(l1).intersection(l2)
return len(common_elements)
def count_common_elements_hash_table(l1, l2):
table = {}
common_elements = []
for v in l1:
table[v] = True
count = 0
for w in l2:
if table.get(w): # Avoid KeyError that would arise with table[w]
common_elements.append(w)
count += 1
return count
l1 = [random.randint(0, 99) for _ in range(1000)]
l2 = [random.randint(0, 99) for _ in range(1000)]
# Time execution
start = time.perf_counter()
count_common_elements_hash_table(l1, l2)
end = time.perf_counter()
print("Hash table version: {:.7f}".format(end - start))
# Time execution
start = time.perf_counter()
count_common_elements_sets(l1, l2)
end = time.perf_counter()
print("Sets version: {:.7f}".format(end - start))
因为您在
集合
对象上使用内置的.intersection
方法。通过您的dict
实现,您基本上获得了交叉点,但它是在Python中实现的。在C中实现的set.intersection
方法。内置函数/方法几乎总是比在python解释器级别执行的等效算法快,因为您在set
对象上使用内置的.intersection
方法。通过您的dict
实现,您基本上获得了交叉点,但它是在Python中实现的。在C中实现的set.intersection
方法。内置函数/方法几乎总是比在python解释器级别执行的等效算法更快