set()函数算法和“&”运算符一起使用时的复杂性

时间:2019-01-22 22:36:02

标签: python algorithm big-o code-complexity

我想计算给定大小n的代码的这一行的big-o(用于在两个数组中查找公共元素),但是我不知道set在Python中的工作方式。也是它们之间的“&”运算符。有人可以帮助我了解他们的确切职责吗?

result = set(arr1) & set(arr2)

1 个答案:

答案 0 :(得分:1)

给出两组$postsWithoutCategories = new WP_Query(array( 'post_type' => 'post', 'category__not_in' => get_terms('category', array( 'fields' => 'ids' )), )); $required_category_ID = 123; if ( $postsWithoutCategories->have_posts() ) { while ( $postsWithoutCategories->have_posts() ) { $postsWithoutCategories->the_post(); $post_ID = get_the_ID(); wp_set_post_categories( $post_ID, $required_category_ID ); } } s1,平均s2运算符为&

O(min(len(s1), len(s2))运算符计算两个集合之间的交集。这意味着结果集将仅包含来自&s1的元素。

例如:

s2

输出:

{1, 2, 3, 4} & {3, 4, 5}

该操作大致等于:

{3, 4}

此时间复杂度源自以下内容。要构建结果集,必须迭代其中一个元素中的每个元素,并检查该元素是否在另一个元素中。

对一组中的所有元素进行def intersection(s1, s2): # make s1 the smaller set no matter what if len(s1) > len(s2): s1, s2 = s2, s1 res = set() # iterate over all items in the smaller set and add if they are common to both sets for item in s1: if item in s2: res.add(item) return res 的迭代,而O(N)操作的平均结果为in,从而导致整个O(1)运行时。

由于要迭代的集合实际上并不重要,因此python通过迭代较小的集合以使O(N)中的N尽可能小,从而节省了一些时间,从而导致{{1 }}的复杂性。

请注意,这只是平均情况下的复杂性。如果集合中的每个元素都具有相同的哈希值,则O(N)操作的最坏情况(但极为罕见)的复杂度是O(min(len(s1), len(s2))。这会给in操作带来O(N)复杂度的最坏情况