谁有笛卡尔积的实现算法?
实现至少三个数组的笛卡尔积运算!

解决方案 »

  1.   

    名称定义
    假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。笛卡儿积的运算性质
    由于有序对<x,y>中x,y的位置是确定的,因此A×B的记法也是确定的,不能写成B×A. 
    笛卡儿积也可以多个集合合成,A1×A2×…×An. 
    笛卡儿积的运算性质. 一般不能交换.
    笛卡儿积,把集合A,B合成集合A×B,规定
    A×B={<x,y>&frac12;x&Icirc;A&Ugrave;y&Icirc;B}推导过程
    给定一组域D1,D2,…,Dn,这些域中可以有相同的。D1,D2,…,Dn的笛卡尔积为:
    D1×D2×…×Dn={(d1,d2,…,dn)|diDi,i=1,2,…,n}所有域的所有取值的一个组合不能重复例  给出三个域:
    D1=SUPERVISOR ={ 张清玫,刘逸 }   
    D2=SPECIALITY={计算机专业,信息专业}
    D3=POSTGRADUATE={李勇,刘晨,王敏}
    则D1,D2,D3的笛卡尔积为D:
    D=D1×D2×D3 ={(张清玫,计算机专业,李勇),(张清玫,计算机专业,刘晨),
    (张清玫,计算机专业,王敏),(张清玫,信息专业,李勇), 
    (张清玫,信息专业,刘晨),(张清玫,信息专业,王敏), 
    (刘逸,计算机专业,李勇),(刘逸,计算机专业,刘晨),
    (刘逸,计算机专业,王敏),(刘逸,信息专业,李勇), 
    (刘逸,信息专业,刘晨),(刘逸,信息专业,王敏) }这样就把D1,D2,D3这三个集合中的每个元素加以对应组合,形成庞大的集合群。
    本个例子中的D中就会有2X2X3个元素,如果一个集合有1000个元素,有这样3个集合,他们的笛卡尔积所组成的新集合会达到十亿个元素。假若某个集合是无限集,那么新的集合就将是有无限个元素。 
    序偶与笛卡尔积
    在日常生活中,有许多事物是成对出现的,而且这种成对出现的事物,具有一定的顺序。例如,上,下;左,右;3〈4;张华高于李明;中国地处亚洲;平面上点的坐标等。一般地说,两个具有固定次序的客体组成一个序偶,它常常表达两个客体之间的关系。记作〈x,y〉。上述各例可分别表示为〈上,下〉;〈左,右〉;〈3,4〉;〈张华,李明〉;〈中国,亚洲〉;〈a,b〉等。 
        序偶可以看作是具有两个元素的集合。但它与一般集合不同的是序偶具有确定的次序。在集合中{a,b}={b,a},但对序偶〈a,b〉≠〈b,a〉。 
        设x,y为任意对象,称集合{{x},{x,y}}为二元有序组,或序偶(ordered pairs),简记为<x,y> 。称x为<x,y>的第一分量,称y为第二分量。 
    定义3-4.1 对任意序偶<a,b> , <c, d > ,<a,b> = <c, d > 当且仅当a=c且b = d 。 
    递归定义n元序组 <a1,… , an> 
    <a1,a2> ={{a1},{a1 , a2}} 
    <a1 , a2 , a3 > = { {a1 , a2},{a1 , a2 , a3}} 
    = < <a1 , a2 > , a3 > 
    <a1,…an> = <<a1,…an-1>, an>
    两个n元序组相等 
    < a1,…an >= < b1,…bn >&Ucirc;(a1=b1) ∧ …∧ (an=bn)
         定义3-4.2 对任意集合 A1,A2 , …,An,(1)A1×A2,称为集合A1,A2的笛卡尔积(Cartesian product),定义为
      A1 ×A2={x | $u $v(x = <u,v>∧u &Icirc;A1∧v&Icirc;A2)}={<u,v> | u &Icirc;A1∧v&Icirc;A2} (2)递归地定义 A1 × A2× … × An 
    A1 × A2×… × An= (A1× A2 × …× An-1)×An 
    例题1 若A={α,β},B={1,2,3},求A×B,A×A,B×B以及(A×B)&Ccedil;(B×A)。 
    解 A×B={〈α,1〉,〈α,2〉,〈α,3〉,〈β,1〉,〈β,2〉,<β,3〉}
    B×A={〈1,α〉,〈1,β〉,〈2,α〉,〈2,β〉,〈3,α〉,〈3,β〉}
    A×A={〈α,α〉,〈α,β〉,〈β,α〉,〈β,β〉}
    B×B={〈1,1〉,〈1,2〉,〈1,3〉,〈2,1〉,〈2,2〉,〈2,3〉,〈3,1〉,〈3,2〉,〈3,3〉}
    (A×B)&Ccedil;(B×A)=&AElig; 
    由例题1可以看到(A×B)&Ccedil;(B×A)=&AElig; 
    我们约定若A=&AElig;或B=&AElig;,则A×B=&AElig;。 
    由笛卡尔定义可知: 
    (A×B)×C={〈〈a,b〉,c〉|(〈a,b〉∈A×B)∧(c∈C)}
    ={〈a,b,c〉|(a∈A)∧(b∈B)∧(c∈C)} 
    A×(B×C)={〈a,〈b,c〉〉|(a∈A)∧(〈b,c〉∈B×C)} 
    由于〈a,〈b,c〉〉不是三元组,所以 
    (A×B)×C ≠A×(B×C) 
    定理3-4.1   设A, B, C为任意集合,*表示 &Egrave;,&Ccedil;或 – 运算,那么有如下结论: 
    笛卡尔积对于并、交差运算可左分配。即: 
    A×(B*C)=(A×B)*(A×C) 笛卡尔积对于并、交差运算可右分配。即: 
    (B*C) ×A=(B×A)*(C×A)¤ 当*表示 &Egrave;时,结论(1)的证明思路:(讨论叙述法)      
    先证明A×(B &Egrave; C)&Iacute;(A×B) &Egrave; (A×C) 从<x,y>∈A×(B&Egrave;C)出发,推出<x,y>∈(A ×B) &Egrave; (A×C) 
    再证明(A×B) &Egrave; (A×C) &Iacute; A×(B  &Egrave; C) 
    从<x,y>∈(A×B) &Egrave; (A×C)出发,推出<x,y>∈A×(B&Egrave;C) 
    当*表示  &Egrave;时,结论(2)的证明思路:(谓词演算法) 见P-103页。¤   
    定理3-4.2   设A, B, C为任意集合,若C ≠ F,那么有如下结论: 
    A&Iacute;B&Ucirc;(A×C &Iacute;B×C) &Ucirc; (C×A&Iacute;C×B)   ¤定理前半部分证明思路 :(谓词演算法) 
    先证明A&Iacute;B &THORN; (A×C&Iacute;B×C)
    以A&Iacute;B 为条件,从<x,y>∈A×C出发,推出<x,y>∈B×C
    得出(A×C&Iacute;B×C)结论。 
    再证明(A×C &Iacute;B×C) &THORN;  A&Iacute;B 
    以C≠F为条件,从x∈A出发,对于y∈C,利用&THORN;附加式,推出x∈B 
    得出(A&Iacute;B)结论。   见P-103页。                        ¤
    定理3-4.3   设A, B, C, D为任意四个非空集合,那么有如下结论: 
                   A×B &Iacute; C×D的充分必要条件是A&Iacute; C,B&Iacute; D ¤证明思路:(谓词演算法) 
    先证明充分性: A×B &Iacute; C×D &THORN; A&Iacute; C,B&Iacute; D 
    对于任意的x∈A、y∈B,从<x,y>∈A×B出发,利用条件A×B&Iacute; C×D, <x,y>∈C×D,推出x∈C, y∈D。 
    再证明必要性: A&Iacute; C,B&Iacute; D &THORN;A×B&Iacute; C×D 
    对于任意的x∈A、y∈B,从<x,y>∈A×B出发,推出<x,y>∈C×D。笛卡尔(Descartes)乘积又叫直积。设A、B是任意两个集合,在集合A中任意取一个元素x,在集合B中任意取一个元素y,组成一个有序对(x,y),把这样的有序对作为新的元素,他们的全体组成的集合称为集合A和集合B的直积,记为A×B,即A×B={(x,y)|x∈A且y∈B}。 
      

  2.   

    三个数组 A,B,C
    笛卡尔集 AxBxC 符合结合律 所以只要知道两个数组 (AxB)然后再求(AxB)xC 不就可以解决吗?