检查Python中两个集合是否相等的时间复杂度

时间:2012-09-12 14:19:24

标签: python time-complexity

阅读this question,我想知道用多少时间(渐近地说)来评估像

这样的表达式
{1,2}=={2,1}

也就是说,检查set class的两个实例是否相等。

1 个答案:

答案 0 :(得分:20)

集合之间的比较由function set_richcompare in setobject.c, line 1848实现。您将看到相等性实现如下:

  1. 如果集合的大小不同,则返回false。

  2. 如果两个集合都已经过哈希处理,并且哈希值不同,则返回false。

  3. 致电set_issubset

  4. 两组的子集测试如下所示:

    while (set_next(so, &pos, &entry)) {
        int rv = set_contains_entry((PySetObject *)other, entry);
        if (rv == -1)
            return NULL;
        if (!rv)
            Py_RETURN_FALSE;
    }
    Py_RETURN_TRUE;
    

    你会看到它的工作原理是迭代第一组的所有元素,然后在另一组中查找每一个元素。所以(除非有很多哈希冲突),这在第一组的大小上是线性的。