首页 > 解决方案 > 你如何为两个圆的维恩图的并集、交集和乘积编写伪代码?

问题描述

维恩图

假设我们有两个圆的维恩图。我们必须找到它们的并集、交集和乘积。例如我们有集合:

A=[a,b,f,g]
B=[b,e,f,h]

联盟

AUB=[a,b,e,f,g,h]

路口

A∩B = [f,g]

产品

A*B=[ab, ae, af, ah, bb, be, bf, bh, fb, fe, ff, fh, gb, ge, gf, gh]

我的问题是,我们如何在伪代码中编写这些操作?我不知道该怎么做。

标签: mathsetpseudocodediscrete-mathematics

解决方案


A 联合 B:

C := empty set
for each a in A:
    C.add(a)
for each b in B:
    if not C.contains(b) then C.add(b)

如果使用列表/数组实现,这具有二次运行时间。如果使用哈希表/字典,它具有线性运行时间。

A相交B:

C := empty set
for each a in A:
    if B.contains(a) then C.add(a)

与工会相同的表现。

甲×乙:

C := empty set
for each a in A:
    for each b in B:
        C.add((a,b))

这具有二次运行时间,但这是不可避免的,因为返回的结果包含 n^2 个元素的顺序。


推荐阅读