版权归原作者所有,如有侵权,请联系我们

[科普中国]-笛卡尔乘积

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

背景

笛卡儿1596年3月31日生于法国土伦省莱耳市的一个贵族之家,笛卡儿的父亲是布列塔尼地方议会的议员,同时也是地方法院的法官,笛卡儿在豪华的生活中无忧无虑地度过了童年。

笛卡儿1612年到普瓦捷大学攻读法学,四年后获博士学位。1616年笛卡儿结束学业后,便背离家庭的职业传统,开始探索人生之路。他投笔从戎,想借机游历欧洲,开阔眼界。

在荷兰长达20多年的时间里,笛卡尔对哲学、数学、天文学、物理学、化学和生理学等领域进行了深入的研究,并通过数学家梅森神父与欧洲主要学者保持密切联系。他的主要著作几乎都是在荷兰完成的2。

1628年,笛卡尔写出《指导哲理之原则》,1634年完成了以哥白尼学说为基础的《论世界》。书中总结了他在哲学、数学和许多自然科学问题上的一些看法。1637年,笛卡儿用法文写成三篇论文《折光学》、《气象学》和《几何学》,并为此写了一篇序言《科学中正确运用理性和追求真理的方法论》,哲学史上简称为《方法论》,6月8日在莱顿匿名出版。1641年出版了《形而上学的沉思》,1644年又出版了《哲学原理》等重要著作。

1649年冬,笛卡儿应瑞典女王克里斯蒂安的邀请,来到了斯德哥尔摩,任宫廷哲学家,为瑞典女王授课。由于他身体孱弱,不能适应那里的气候,1650年初便患肺炎抱病不起,同年二月病逝。终年54岁。1799年法国大革命后,笛卡儿的骨灰被送到了法国历史博物馆2。

定义

笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X×Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员3。

假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。A表示所有声母的集合,B表示所有韵母的集合,那么A和B的笛卡尔积就为所有可能的汉字全拼。

设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成有序对,所有这样的有序对组成的集合叫做A与B的笛卡尔积,记作AxB.

笛卡尔积的符号化为:

A×B={(x,y)|x∈A∧y∈B}

例如,A={a,b}, B={0,1,2},则

A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}

B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}

运算1.对任意集合A,根据定义有

AxΦ =Φ , Φ xA=Φ

2.一般地说,笛卡尔积运算不满足交换律,即

AxB≠BxA(当A≠Φ ∧B≠Φ∧A≠B时)

3.笛卡尔积运算不满足结合律,即

(AxB)xC≠Ax(BxC)(当A≠Φ ∧B≠Φ∧C≠Φ时)

4.笛卡尔积运算对并和交运算满足分配律,即

Ax(B∪C)=(AxB)∪(AxC)

(B∪C)xA=(BxA)∪(CxA)

Ax(B∩C)=(AxB)∩(AxC)

(B∩C)xA=(BxA)∩(CxA)

案例给出三个域:

D1=SUPERVISOR = { 张清玫,刘逸 }

D2=SPECIALITY= {计算机专业,信息专业}

D3=POSTGRADUATE = {李勇,刘晨,王敏}

则D1,D2,D3的笛卡尔积为D:

D=D1×D2×D3 ={(张清玫, 计算机专业, 李勇), (张清玫, 计算机专业, 刘晨),

(张清玫, 计算机专业, 王敏), (张清玫, 信息专业, 李勇),

(张清玫, 信息专业, 刘晨), (张清玫, 信息专业, 王敏),

(刘逸, 计算机专业, 李勇), (刘逸, 计算机专业, 刘晨),

(刘逸, 计算机专业, 王敏), (刘逸, 信息专业, 李勇),

(刘逸, 信息专业, 刘晨), (刘逸, 信息专业, 王敏)}

这样就把D1,D2,D3这三个集合中的每个元素加以对应组合,形成庞大的集合群。

本个例子中的D中就会有2X2X3个元素,如果一个集合有1000个元素,有这样3个集合,他们的笛卡尔积所组成的新集合会达到十亿个元素。假若某个集合是无限集,那么新的集合就将是有无限个元素2。

代码C#源代码using System;using System.Collections;using System.Collections.Generic;using System.Text;using System.Linq;public class Descartes{public static void run(List dimvalue, List result, int layer, string curstring){if (layer