|
|
1
2
嗯,这里有几件事。
关于测试渐进复杂性的旁注——您应该始终检查增长的幅度,原始数据毫无意义。即。
所以你们可以清楚地看到线性和常数的关系。 |
|
|
2
2
和
搜索。让我们再做一次实验,但只做一次
与搜索缺少的值一样:
正如所料,订购并不重要:
|
|
|
3
1
集合查找平均是一个O(1)操作。除了在一定程度上随机地改变性能外,它不应该始终随检查集合的哪个元素而改变性能,因为某些值可能与其他值发生哈希冲突,因此需要更长的时间才能找到。在小集合中查找不同值时所看到的时间差几乎肯定是巧合,或者是误认为是数据的噪声。
请注意,在测试中,您不仅仅是计时集成员。每次都要创建一个新的集合,这通常是一个O(N)操作(其中N是集合中的值数)。在某些特殊情况下,当Python编译器进行优化以替换可变文本时,可以在O(1)时间内创建一个集合文本
在CPython的最新版本中,此处的set文本将始终引用常量
但这不能解释你在计时中看到了什么。我怀疑在您的环境中有一些工件可以解释这个问题,或者这可能只是一个随机的机会,即集合中的最小值碰巧没有任何哈希冲突,而最后一个(碰巧)有几个。如果测试集合中的其他值,可能会得到一小部分不同的计时。但这个范围不会随着集合元素的数量而有太大的变化,对于集合的每一个大小,它应该是相当相似的(可能会有小的差异,但远小于N的系数)。 尝试更具体的测试(考虑到集合创建),如下所示:
|
|
|
4
1
我没有得到你的结果:
至于你的问题,关于不同的
输出:
使用函数:
两者都建立了一个
|
|
5
0
你似乎对算法复杂性的含义感到困惑——你还没有测试过这个特性。 复杂性 做 测试最佳和最坏情况。然而,为了解决算法复杂性问题,您需要从计时中提取初始化步骤,然后比较各种输入大小的性能:可能是10的幂,范围从10到10**12。 |