集合与关系的幂

  集合的概念无需多说,但是集合上有些运算我们是没学过的,比如幂运算。假设这个集合: A = 1 , 2 , 3 A={1,2,3} A=1,2,3,它的平方 A 2 A^2 A2是什么呢?它的三次方 A 3 A^3 A3又是什么呢?

多重笛卡尔积

  首先要看A是什么,如果A是普通的集合,那么A的n次方这种写法其实是多重笛卡尔积,比如 A 3 A^3 A3其实是 A × A × A A\times A \times A A×A×A这样一个笛卡尔积。生成笛卡尔积的代码可以用递归简单实现:

# 笛卡尔积
def cartesian_product(left, right):
    result = []
    for l in left:
        for r in right:
            result.append((l, r))
    return result

# 集合的n次方,用递归实现
def pow(list, n):
    if n == 1:
        return list
    if n == 2:
        return cartesian_product(list, list)
    return cartesian_product(pow(list, n - 1), list)


if __name__ == '__main__':
    print(pow([1, 2], 3))

  输出结果为:

[((1, 1), 1), ((1, 1), 2), ((1, 2), 1), ((1, 2), 2), ((2, 1), 1), ((2, 1), 2), ((2, 2), 1), ((2, 2), 2)]

  把上面输出中的括号改成尖括号就是数学里标准的输出了。

关系的N次方

  笛卡尔积没什么好说的,难得是关系的N次方。首先关系一般指二元关系,而二元关系是两个集合的笛卡尔积的子集。假如用python来研究关系,可以用元组的列表来表示关系。而关系的幂是这样定义的:

  1. 关系的零次方为恒等关系
  2. R n + 1 = R n ∘ R R^{n+1}=R^n\circ R Rn+1=RnR

  上面公式里的符号 ∘ \circ 是复合函数的符号,注意复合函数是先计算右边再计算左边的,比如 f = x + 1 , g = x 2 f=x+1,g=x^2 f=x+1,g=x2,那么 f ∘ g = x 2 + 1 f\circ g=x^2+1 fg=x2+1.
  假设存在这样的关系:
F = { < 1 , 2 > , < 2 , 3 > , < 3 , 4 > , < 4 , 5 > } G = { < 1 , 1 > , < 2 , 4 > } F=\{<1,2>,<2,3>,<3,4>,<4,5>\}\\ G=\{<1,1>,<2,4>\} F={<1,2>,<2,3>,<3,4>,<4,5>}G={<1,1>,<2,4>}
  那么复合后就是:
F ∘ G = { < 1 , 2 > , < 2 , 5 > } F\circ G=\{<1,2>,<2,5>\} FG={<1,2>,<2,5>}
  对于关系的幂运算,如果太复杂了,可以用python计算,代码如下:

def compound(r1, r2):
    result = []
    for r2e in r2:
        x = r2e[0]
        y = r2e[1]
        z = None
        for r1e in r1:
            if r1e[0] == y:
                z = r1e[1]
        if z is not None:
            result.append((x, z))
    return result


def pow(r, n):
    if n == 0:
        return [(e[0], e[0]) for e in r]
    if n == 1:
        return r
    return compound(pow(r, n - 1), r)


if __name__ == '__main__':
    r = [(1, 2), (2, 3), (3, 4), (4, 5)]
    print(pow(r, 0))
    print(pow(r, 1))
    print(pow(r, 2))
    print(pow(r, 3))

  上述测试数据运算结果为:

[(1, 1), (2, 2), (3, 3), (4, 4)]
[(1, 2), (2, 3), (3, 4), (4, 5)]
[(1, 3), (2, 4), (3, 5)]
[(1, 4), (2, 5)]

关系幂的性质

  对于上述关系 { < 1 , 2 > , < 2 , 3 > , < 3 , 4 > , < 4 , 5 > } \{<1,2>,<2,3>,<3,4>,<4,5>\} {<1,2>,<2,3>,<3,4>,<4,5>},5次幂已经是空关系 ∅ \varnothing 了。但是对于一个能成环的关系,比如这个关系 { < 1 , 2 > , < 2 , 3 > , < 3 , 4 > , < 4 , 1 > } \{<1,2>,<2,3>,<3,4>,<4,1>\} {<1,2>,<2,3>,<3,4>,<4,1>},它的五次方会等于一次方,周而复始。以下是运算结果:
R 0 = { < 1 , 1 > , < 2 , 2 > , < 3 , 3 > , < 4 , 4 > } R 1 = { < 1 , 2 > , < 2 , 3 > , < 3 , 4 > , < 4 , 1 > } R 2 = { < 1 , 3 > , < 2 , 4 > , < 3 , 1 > , < 4 , 2 > } R 3 = { < 1 , 4 > , < 2 , 1 > , < 3 , 2 > , < 4 , 3 > } R 4 = { < 1 , 1 > , < 2 , 2 > , < 3 , 3 > , < 4 , 4 > } R 5 = { < 1 , 2 > , < 2 , 3 > , < 3 , 4 > , < 4 , 1 > } R^ 0 = \{<1, 1>, <2, 2>, <3, 3>, <4, 4>\}\\ R^ 1 = \{ <1, 2>, <2, 3>, <3, 4>, <4, 1>\}\\ R^ 2 = \{ <1, 3>, <2, 4>, <3, 1>, <4, 2>\}\\ R^ 3 = \{<1, 4>, <2, 1>, <3, 2>, <4, 3>\}\\ R^ 4 = \{<1, 1>, <2, 2>, <3, 3>, <4, 4>\}\\ R^ 5 = \{<1, 2>, <2, 3>, <3, 4>, <4, 1>\} R0={<1,1>,<2,2>,<3,3>,<4,4>}R1={<1,2>,<2,3>,<3,4>,<4,1>}R2={<1,3>,<2,4>,<3,1>,<4,2>}R3={<1,4>,<2,1>,<3,2>,<4,3>}R4={<1,1>,<2,2>,<3,3>,<4,4>}R5={<1,2>,<2,3>,<3,4>,<4,1>}
  这个性质就是对于有限集合的关系 R R R,必存在不相同的两个自然数 s , t s,t s,t,使得 R s = R t R^s=R^t Rs=Rt.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醒过来摸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值