集合的概念无需多说,但是集合上有些运算我们是没学过的,比如幂运算。假设这个集合: 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来研究关系,可以用元组的列表来表示关系。而关系的幂是这样定义的:
- 关系的零次方为恒等关系
- R n + 1 = R n ∘ R R^{n+1}=R^n\circ R Rn+1=Rn∘R
上面公式里的符号
∘
\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
f∘g=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>\}
F∘G={<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.