Arrays 对于较小的输入空间,检查成员资格时数组或集合是否更快?

Arrays 对于较小的输入空间,检查成员资格时数组或集合是否更快?,arrays,hash,set,big-o,hashset,Arrays,Hash,Set,Big O,Hashset,这个问题困扰了我一段时间:如果我在检查成员资格,而我只有集,那么对于较小的搜索空间,集合的效率要低于数组。我运行了一个测试,检查集合和数组中元素的成员身份,每次检查10000次。元素不存在,因此它必须检查整个数组。 结果是: 1000个元素 设定时间: 1.06799983978 阵列时间: 4.13400006294 100个元素 设定时间: 1.0559999428 阵列时间: 1.1999998927 70个元素 设定时间: 1.09599995613 阵列时间: 1.0920000076

这个问题困扰了我一段时间:如果我在检查成员资格,而我只有集,那么对于较小的搜索空间,集合的效率要低于数组。我运行了一个测试,检查集合和数组中元素的成员身份,每次检查10000次。元素不存在,因此它必须检查整个数组。 结果是:

1000个元素
设定时间: 1.06799983978
阵列时间: 4.13400006294

100个元素
设定时间: 1.0559999428
阵列时间: 1.1999998927

70个元素
设定时间: 1.09599995613
阵列时间: 1.09200000763

10个要素:
设定时间: 1.1360001564
阵列时间: 0.927999973297


因此,对于检查一个元素在少于70个元素的集合中的成员身份,使用数组比使用集合更有效。

这与搜索数量有关,而与集合大小无关。数组搜索具有O(N)复杂度,哈希搜索具有O(1)复杂度。计算散列会给您带来一些开销,所以当您只搜索一次时,它会变慢,是的。但是,当您多次搜索时,哈希搜索显然要多得多efficient@NikolayShevchenko嗯,你是说,如果我只在一个小的输入空间上搜索一次,数组会更快;但在随后的搜索中,无论输入大小如何,哈希集都会更快?这很有趣,它证实了我的想法……为什么你认为当N<70时数组更有效?