我想计算给定大小n的代码的这一行的big-o(用于在两个数组中查找公共元素),但是我不知道set在Python中的工作方式。也是它们之间的“&”运算符。有人可以帮助我了解他们的确切职责吗?
result = set(arr1) & set(arr2)
答案 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)
复杂度的最坏情况