﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Adley-随笔分类-数学原理</title><link>http://www.blogjava.net/Adley/category/50391.html</link><description>机器，宇宙，编程泛型，JdonMVC(framework)</description><language>zh-cn</language><lastBuildDate>Sat, 17 Dec 2011 09:25:41 GMT</lastBuildDate><pubDate>Sat, 17 Dec 2011 09:25:41 GMT</pubDate><ttl>60</ttl><item><title>用OO写笛卡尔积</title><link>http://www.blogjava.net/Adley/archive/2011/09/26/359543.html</link><dc:creator>Adley</dc:creator><author>Adley</author><pubDate>Mon, 26 Sep 2011 08:02:00 GMT</pubDate><guid>http://www.blogjava.net/Adley/archive/2011/09/26/359543.html</guid><wfw:comment>http://www.blogjava.net/Adley/comments/359543.html</wfw:comment><comments>http://www.blogjava.net/Adley/archive/2011/09/26/359543.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Adley/comments/commentRss/359543.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Adley/services/trackbacks/359543.html</trackback:ping><description><![CDATA[<div style="font-family: arial, 宋体, sans-serif; line-height: 24px; "><strong style="font-family: 'Comic Sans MS'; ">笛卡尔（Descartes）积的定义：</strong><br />设A,B为集合，用A中元素为第一元素，B中元素为第二元素构成的有序对，所有这样的有序对组成的集合叫做A与B的笛卡尔积，记作AxB.</div><div style="font-family: arial, 宋体, sans-serif; line-height: 24px; "><span style="font-family: 'Comic Sans MS'; ">笛卡尔积的符号化为：</span></div><div style="font-family: arial, 宋体, sans-serif; line-height: 24px; "><span style="font-family: 'Comic Sans MS'; ">AxB={&lt;x,y&gt;|x&#8712;A&#8743;y&#8712;B}</span></div><div style="font-family: arial, 宋体, sans-serif; line-height: 24px; "><span style="font-family: 'Comic Sans MS'; ">例如，A={a,b},B={0,1,2},则</span></div><div style="font-family: arial, 宋体, sans-serif; line-height: 24px; "><span style="font-family: 'Comic Sans MS'; ">AxB={&lt;a,o&gt;,&lt;a,1&gt;,&lt;a,2&gt;,&lt;b,0&gt;,&lt;b,1&gt;,&lt;b,2&gt;,}</span></div><div style="font-family: arial, 宋体, sans-serif; line-height: 24px; "><span style="font-family: 'Comic Sans MS'; ">BxA={&lt;0,a&gt;,&lt;0,b&gt;,&lt;1,a&gt;,&lt;1,b&gt;,&lt;2,a&gt;,&lt;2,b&gt;}</span></div><div style="font-family: arial, 宋体, sans-serif; line-height: 24px; "><span style="font-family: 'Comic Sans MS'; ">笛卡尔积的运算性质</span></div><div style="font-family: arial, 宋体, sans-serif; line-height: 24px; "><span style="font-family: 'Comic Sans MS'; ">1.对任意集合A，根据定义有</span></div><div style="font-family: arial, 宋体, sans-serif; line-height: 24px; "><span style="font-family: 'Comic Sans MS'; ">Ax&#934; =&#934; ，&#934; xA=&#934;</span></div><div style="font-family: arial, 宋体, sans-serif; line-height: 24px; "><span style="font-family: 'Comic Sans MS'; ">2.一般地说，笛卡尔积运算不满足交换律，即</span></div><div><span style="line-height: 24px; font-family: 'Comic Sans MS'; ">AxB&#8800;BxA(当A&#8800;&#934; &#8743;B&#8800;&#934;&#8743;A&#8800;B时)</span><br /><br /><font class="Apple-style-span" face="arial, 宋体, sans-serif"><span class="Apple-style-span" style="line-height: 24px;">Java类</span></font><br /><div style="background-color: #eeeeee; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="font-size: 13px; line-height: 24px; color: #0000ff; font-family: 'Comic Sans MS'; ">public</span><span style="font-family: arial, 宋体, sans-serif; font-size: 13px; line-height: 24px; color: #000000; ">&nbsp;</span><span style="font-size: 13px; line-height: 24px; color: #0000ff; font-family: 'Comic Sans MS'; ">final</span><span style="font-family: arial, 宋体, sans-serif; font-size: 13px; line-height: 24px; color: #000000; ">&nbsp;</span><span style="font-size: 13px; line-height: 24px; color: #0000ff; font-family: 'Comic Sans MS'; ">class</span><span style="font-size: 13px; line-height: 24px; color: #000000; font-family: 'Comic Sans MS'; ">&nbsp;Descartes&nbsp;{</span><span style="font-size: 13px; line-height: 24px; color: #000000; font-family: 'Comic Sans MS'; "><div><div><span style="line-height: 24px;">&nbsp; &nbsp; private List&lt;List&lt;Long&gt;&gt; finalSet = new LinkedList&lt;List&lt;Long&gt;&gt;(); //笛卡尔积</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; private List&lt;List&lt;Long&gt;&gt; newStates = new LinkedList&lt;List&lt;Long&gt;&gt;(); //状态集合，被用来计算笛卡尔积的中间状态</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; private boolean abort = false; //遇空终止</span></div><div><span style="line-height: 24px;"><br /></span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; public final Descartes compute(List&lt;Long&gt; inputSet) {</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; if (abort) {</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this;</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; //空集防御</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; if (inputSet == null || inputSet.size() == 0) {</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; finalSet = new LinkedList&lt;List&lt;Long&gt;&gt;();//空集</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; abort = true;</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this;</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; if (finalSet.size() == 0) {//如果finalSet为空，则把输入的集合当做finalSet</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (Long element : inputSet) {</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; List&lt;Long&gt; set = new LinkedList&lt;Long&gt;();</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set.add(element);</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; finalSet.add(set);</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; } else {</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (List&lt;Long&gt; originalSet : finalSet) {</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (Long set : inputSet) {</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; List&lt;Long&gt; newState = new LinkedList&lt;Long&gt;();</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newState.addAll(originalSet); //把初始中的每个集合拿出来和输入的集合的每个元素组合成一个新的集合</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newState.add(set);</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newStates.add(newState);</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (newStates.size() &gt; 0) {</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; finalSet = newStates;</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newStates = new LinkedList&lt;List&lt;Long&gt;&gt;();</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; return this;</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; }</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; public final List&lt;List&lt;Long&gt;&gt; getResult() {</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; &nbsp; &nbsp; return finalSet;</span></div><div><span style="line-height: 24px;">&nbsp; &nbsp; }</span></div></div>}</span></div></div><br /><span style="font-family: 'Comic Sans MS'; ">测试代码</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff; font-family: 'Comic Sans MS'; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; font-family: 'Comic Sans MS'; ">final</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; font-family: 'Comic Sans MS'; ">class</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">&nbsp;DescartesTest&nbsp;{<br /></span><span class="Apple-style-span" style="font-family: 'Comic Sans MS'; line-height: 24px; "><div><span style="line-height: 24px; ">&nbsp; &nbsp; public static void main(String[] args) {</span></div><div><span style="line-height: 24px; ">&nbsp; &nbsp; &nbsp; &nbsp; Descartes descartes = new Descartes();</span></div><div><span style="line-height: 24px; ">&nbsp; &nbsp; &nbsp; &nbsp; List&lt;Long&gt; set1 = new LinkedList&lt;Long&gt;();</span></div><div><span style="line-height: 24px; ">&nbsp; &nbsp; &nbsp; &nbsp; set1.add(1l);</span></div><div><span style="line-height: 24px; ">&nbsp; &nbsp; &nbsp; &nbsp; set1.add(2l);</span></div><div><span style="line-height: 24px; ">&nbsp; &nbsp; &nbsp; &nbsp; List&lt;Long&gt; set2 = new LinkedList&lt;Long&gt;();</span></div><div><span style="line-height: 24px; ">&nbsp; &nbsp; &nbsp; &nbsp; set2.add(2l);</span></div><div><span style="line-height: 24px; ">&nbsp; &nbsp; &nbsp; &nbsp; set2.add(3l);</span></div><div><span style="line-height: 24px; ">&nbsp; &nbsp; &nbsp; &nbsp; List&lt;Long&gt; set3= new LinkedList&lt;Long&gt;();</span></div><div><span style="line-height: 24px; ">&nbsp; &nbsp; &nbsp; &nbsp; set3.add(2l);</span></div><div><span style="line-height: 24px; ">&nbsp; &nbsp; &nbsp; &nbsp; set3.add(3l);</span></div><div><span style="line-height: 24px; ">&nbsp; &nbsp; &nbsp; &nbsp; descartes.compute(set1).compute(set2).compute(set3);</span></div><div><span style="line-height: 24px; ">&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(descartes.getResult());</span></div><div><span style="line-height: 24px; ">&nbsp; &nbsp; }</span></div></span><span style="color: #000000; font-family: 'Comic Sans MS'; "><br /></span><span style="color: #000000; font-family: 'Comic Sans MS'; ">}<br /></span><span style="color: #000000; font-family: 'Comic Sans MS'; ">输出：<br /></span><span style="color: #000000; font-family: 'Comic Sans MS'; ">[[</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">1</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">,&nbsp;</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">2</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">,&nbsp;</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">2</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">],&nbsp;[</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">1</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">,&nbsp;</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">2</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">,&nbsp;</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">3</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">],&nbsp;[</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">1</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">,&nbsp;</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">3</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">,&nbsp;</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">2</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">],&nbsp;[</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">1</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">,&nbsp;</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">3</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">,&nbsp;</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">3</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">],&nbsp;[</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">2</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">,&nbsp;</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">2</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">,&nbsp;</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">2</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">],&nbsp;[</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">2</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">,&nbsp;</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">2</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">,&nbsp;</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">3</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">],&nbsp;[</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">2</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">,&nbsp;</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">3</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">,&nbsp;</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">2</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">],&nbsp;[</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">2</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">,&nbsp;</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">3</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">,&nbsp;</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">3</span><span style="color: #000000; font-family: 'Comic Sans MS'; ">]]</span></div><img src ="http://www.blogjava.net/Adley/aggbug/359543.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Adley/" target="_blank">Adley</a> 2011-09-26 16:02 <a href="http://www.blogjava.net/Adley/archive/2011/09/26/359543.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>