﻿<?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-waysun一路阳光-随笔分类-总结备用</title><link>http://www.blogjava.net/1504/category/32285.html</link><description>不轻易服输,不轻言放弃.--心是梦的舞台，心有多大，舞台有多大。踏踏实实做事，认认真真做人。</description><language>zh-cn</language><lastBuildDate>Tue, 30 Mar 2010 20:39:45 GMT</lastBuildDate><pubDate>Tue, 30 Mar 2010 20:39:45 GMT</pubDate><ttl>60</ttl><item><title>struts2中如何获得request.setAttribute("bean", beanObject);的值得在JSP页面显示【自己整理】</title><link>http://www.blogjava.net/1504/archive/2009/06/20/283310.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Fri, 19 Jun 2009 16:27:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/06/20/283310.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/283310.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/06/20/283310.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/283310.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/283310.html</trackback:ping><description><![CDATA[1.action <br />
<p>public class DataMangAction extends ActionSupport implements ServletRequestAware, ModelDriven&lt;DataMangForm&gt; <br />
{<br />
&nbsp;&nbsp; private String str;<br />
&nbsp;&nbsp; private HttpServletRequest request;<br />
&nbsp;&nbsp; private int pageSize = 2;<br />
&nbsp;&nbsp; private DataMangForm model = new DataMangForm();<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;public String execute() throws Exception <br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;System.out.println("ok");<br />
&nbsp;&nbsp;&nbsp;str="execute";<br />
&nbsp;&nbsp;&nbsp;return str;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;public String init() throws Exception <br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;DataMangForm dataMangForm = getModel();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ArrayList baseInfoList;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 获取当前页码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int pageNum = dataMangForm.getPageNum();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataMangOpertion dataMangOpertion=new DataMangOpertion();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; baseInfoList = dataMangOpertion.getAllBaseInfo(pageSize, pageNum);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (baseInfoList != null) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;dataMangForm.setBaseInfoList(baseInfoList);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pagination pagination = dataMangOpertion.getPageInAction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pagination.setShowCurrentState(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pagination.setShowPageNumber("dataMangAction!init.action", "", 10, 5);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataMangForm.setPagination(pagination);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.setAttribute("pagination", pagination);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;str="init";<br />
&nbsp;&nbsp;&nbsp;return str;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;public String toAdd() throws Exception <br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;str="toAdd";<br />
&nbsp;&nbsp;&nbsp;return str;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp; public DataMangForm getModel() <br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;return model;<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; public void setServletRequest(HttpServletRequest request)<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.request = request;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}<br />
2.pagination<br />
</p>
<p>public class Pagination<br />
{</p>
<p>&nbsp; /*<br />
&nbsp; ** pageSize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每页记录数<br />
&nbsp; ** recordCount&nbsp;&nbsp; 总记录数<br />
&nbsp; ** pageNum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当前页<br />
&nbsp; ** pageCount&nbsp;&nbsp;&nbsp;&nbsp; 总页数<br />
&nbsp; */<br />
&nbsp; private int pageSize;<br />
&nbsp; private int recordCount;<br />
&nbsp; private int pageNum;<br />
&nbsp; private int pageCount;<br />
&nbsp; private String showPageNumber="";<br />
&nbsp; private String showCurrentState;</p>
<p>&nbsp; public Pagination()<br />
&nbsp; {<br />
&nbsp; }<br />
&nbsp; public Pagination(int pageNum,int pageSize,int recordCount,int pageCount)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; this.setPageNum(pageNum);<br />
&nbsp;&nbsp;&nbsp; this.setPageSize(pageSize);<br />
&nbsp;&nbsp;&nbsp; this.setRecordCount(recordCount);<br />
&nbsp;&nbsp;&nbsp; this.setPageCount(pageCount);<br />
&nbsp; }<br />
&nbsp; public void setPageSize(int pageSize)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; this.pageSize=pageSize;<br />
&nbsp; }<br />
&nbsp; public int getPageSize()<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; return pageSize;<br />
&nbsp; }<br />
&nbsp; public void setRecordCount(int recordCount)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; this.recordCount=recordCount;<br />
&nbsp; }<br />
&nbsp; public int getRecordCount()<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; return recordCount;<br />
&nbsp; }<br />
&nbsp; public void setPageNum(int pageNum)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; this.pageNum=pageNum;<br />
&nbsp; }<br />
&nbsp; public int getPageNum()<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; return pageNum;<br />
&nbsp; }<br />
&nbsp; public void setPageCount(int pageCount)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; this.pageCount=pageCount;<br />
&nbsp; }<br />
&nbsp; public int getPageCount()<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; return pageCount;<br />
&nbsp; }<br />
&nbsp; //显示分页的当前状态信息<br />
&nbsp; public void setShowCurrentState(boolean bool)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; if(bool)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.showCurrentState = "共有" + recordCount + "条记录数,每页" + pageSize + "条,第&lt;font color=\"red\"&gt;"+ pageNum + "&lt;/font&gt;页,"+"共" +pageCount + "页." ;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.showCurrentState="";<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }<br />
&nbsp; public String getShowCurrentState()<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; return showCurrentState;<br />
&nbsp; }<br />
&nbsp; //显示分页码<br />
&nbsp; public void setShowPageNumber(String path,String parameters,String first,String previous,String next,String last)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; if(pageNum&gt;1)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; showPageNumber="&lt;a href=\"" +path+ "?pageNum=1" +parameters+ "\"&gt;" +first+ "&lt;/a&gt;&amp;nbsp;";<br />
&nbsp;&nbsp;&nbsp;&nbsp; showPageNumber=showPageNumber+"&lt;a href=\"" +path+ "?pageNum=" +(pageNum-1)+parameters+ "\"&gt;" +previous+ "&lt;/a&gt;&amp;nbsp;";<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; if(pageNum&lt;pageCount)<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; showPageNumber=showPageNumber+"&lt;a href=\"" +path+ "?pageNum=" +(pageNum+1)+parameters+ "\"&gt;" +next+ "&lt;/a&gt;&amp;nbsp;";<br />
&nbsp;&nbsp;&nbsp;&nbsp; showPageNumber=showPageNumber+"&lt;a href=\"" +path+ "?pageNum=" +pageCount+parameters+ "\"&gt;" +last+ "&lt;/a&gt;&amp;nbsp;";<br />
&nbsp;&nbsp; }<br />
&nbsp; }<br />
&nbsp; public void setShowPageNumber(String path,String parameters,int middleSize,int kipSize)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; int start=(pageNum/kipSize)*kipSize+1;<br />
&nbsp;&nbsp;&nbsp; int end=start-1+middleSize;<br />
&nbsp;&nbsp;&nbsp; if(end&gt;=pageCount)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end=pageCount;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; if(start&gt;kipSize)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showPageNumber="&lt;a href=" +path+ "?pageNum=" +(start-2)+parameters+ "&gt;" +"&lt;&lt;&lt;"+ "&lt;/a&gt;&amp;nbsp;";<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; while(start&lt;=end)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showPageNumber=showPageNumber+"&lt;a href=" +path+ "?pageNum=" +start+parameters+ "&gt;[" +start+ "]&lt;/a&gt;&amp;nbsp;";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start++;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; if(end&lt;pageCount)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showPageNumber=showPageNumber+"&lt;a href=" +path+ "?pageNum=" +(end+1)+parameters+ "&gt;" +"&gt;&gt;&gt;"+ "&lt;/a&gt;&amp;nbsp;";<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }<br />
&nbsp; public String getShowPageNumber()<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; return showPageNumber;<br />
&nbsp; }<br />
}</p>
3.在JSP页面显示<br />
&nbsp;${pagination.showPageNumber}&nbsp; ，${pagination.showCurrentState}
<img src ="http://www.blogjava.net/1504/aggbug/283310.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-06-20 00:27 <a href="http://www.blogjava.net/1504/archive/2009/06/20/283310.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2调用自定义方法【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/06/18/283069.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Thu, 18 Jun 2009 08:10:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/06/18/283069.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/283069.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/06/18/283069.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/283069.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/283069.html</trackback:ping><description><![CDATA[<span style="color: #ff0000"><strong>声明:此源代码来自网友，目的是为初学者提供一个实例.<br />
<a title="struts2自定义调用方法实例" href="/Files/1504/myStruts2.rar">struts2自定义调用方法实例</a></strong></span>
<img src ="http://www.blogjava.net/1504/aggbug/283069.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-06-18 16:10 <a href="http://www.blogjava.net/1504/archive/2009/06/18/283069.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java倒计时程序【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/16/265904.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Thu, 16 Apr 2009 01:51:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/16/265904.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265904.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/16/265904.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265904.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265904.html</trackback:ping><description><![CDATA[<span  style="font-family: Verdana; font-size: 13px; line-height: 19px; ">今天是北京奥运会倒计时100天，啥也不说了，就发个倒计时程序吧，值得一提的是这个程序是完全手写的代码，(日期选择控件除外)，效果如图：<br />
<img height="238" alt="" src="http://www.blogjava.net/images/blogjava_net/daizhenghenry/countdown1.jpg" width="251" border="0" /><br />
<br />
<img height="240" alt="" src="http://www.blogjava.net/images/blogjava_net/daizhenghenry/countdown2.jpg" width="248" border="0" /><br />
<br />
点击下载源代码及可执行文件<a href="http://www.blogjava.net/Files/daizhenghenry/src.rar" style="text-decoration: none; color: #666666; background-image: initial; background-repeat: initial; background-attachment: initial; background-color: transparent; background-position: initial initial; ">/Files/daizhenghenry/src.rar</a></span>
<div><font  face="Verdana" size="3"><span  style="font-size: 13px; line-height: 19px;">本站下载</span></font></div>
<img src ="http://www.blogjava.net/1504/aggbug/265904.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-16 09:51 <a href="http://www.blogjava.net/1504/archive/2009/04/16/265904.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 倒计时【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/16/265903.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Thu, 16 Apr 2009 01:50:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/16/265903.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265903.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/16/265903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265903.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265903.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://haidii.javaeye.com/blog/284821最近用java编写了一个倒计时的程序，贴出来与大家共享。先看看截图吧：1.开始打开程序时的界面2.设定好时间，点击&#8220;开始计时&#8221;时的界面3.定时时间到时的界面4.退出程序时的界面5.同时，本程序具有检测功能，对您的时间输入进行检测...&nbsp;&nbsp;<a href='http://www.blogjava.net/1504/archive/2009/04/16/265903.html'>阅读全文</a><img src ="http://www.blogjava.net/1504/aggbug/265903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-16 09:50 <a href="http://www.blogjava.net/1504/archive/2009/04/16/265903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JGA 【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265882.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 15:19:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265882.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265882.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265882.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265882.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265882.html</trackback:ping><description><![CDATA[<a href="http://hi.baidu.com/litertiger/blog/item/3798546625f86224aa184c30.html">http://hi.baidu.com/litertiger/blog/item/3798546625f86224aa184c30.html</a>
<div><span  style="color: #333333; font-family: Arial; font-size: 14px; line-height: 20px; ">
<p style="line-height: normal; ">书上给的的一个算法,实现了一下</p>
<p style="line-height: normal; ">无约束条件 max f(x1,x2)=21.5+x1*sin(4*pi*x1)+x2sin(20*pi*x2)</p>
<p style="line-height: normal; ">-3.0&lt;x1&lt;12.1</p>
<p style="line-height: normal; ">4.1&lt;x2&lt;5.8</p>
<p style="line-height: normal; ">1%的变异</p>
<p style="line-height: normal; ">25%交叉</p>
<p style="line-height: normal; ">旋转转轮选择</p>
<p style="line-height: normal; ">/**<br style="line-height: normal; " />
&#160;* 实现Michalewicz<br style="line-height: normal; " />
&#160;*&#160;<br style="line-height: normal; " />
&#160;* @author not attributable<br style="line-height: normal; " />
&#160;* @version 1.0<br style="line-height: normal; " />
&#160;*/</p>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">public class JGA {</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;bestindival bd = null;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;String[] ipop = new String[10];</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;int gernation = 0;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;public JGA() {<br style="line-height: normal; " />
&#160;&#160;this.ipop = inialPops();<br style="line-height: normal; " />
&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;double calculatefitnessvalue(String str) { // str为染色体，前面18个为x1表示部分，后面15个为x2表示部分<br style="line-height: normal; " />
&#160;&#160;String str1 = str.substring(0, 18);<br style="line-height: normal; " />
&#160;&#160;// System.out.println(str1);<br style="line-height: normal; " />
&#160;&#160;String str2 = str.substring(18);<br style="line-height: normal; " />
&#160;&#160;// System.out.println(str2);<br style="line-height: normal; " />
&#160;&#160;int b1 = Integer.parseInt(str1, 2);<br style="line-height: normal; " />
&#160;&#160;// System.out.println(b1);<br style="line-height: normal; " />
&#160;&#160;int b2 = Integer.parseInt(str2, 2);<br style="line-height: normal; " />
&#160;&#160;// System.out.println(b2);<br style="line-height: normal; " />
&#160;&#160;double x1 = -3.0 + b1 * (12.1 - (-3.0)) / (Math.pow(2, 18) - 1);<br style="line-height: normal; " />
&#160;&#160;// System.out.println(x1);<br style="line-height: normal; " />
&#160;&#160;double x2 = 4.1 + b2 * (5.8 - 4.1) / (Math.pow(2, 15) - 1);<br style="line-height: normal; " />
&#160;&#160;// System.out.println(x2);<br style="line-height: normal; " />
&#160;&#160;double fitness = 21.5 + x1 * Math.sin(4 * 3.1415926 * x1) + x2<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;* Math.sin(20 * 3.1415926 * x2);<br style="line-height: normal; " />
&#160;&#160;//System.out.println("eval=f(" + x1 + "," + x2 + ")=" + fitness);<br style="line-height: normal; " />
&#160;&#160;return fitness;<br style="line-height: normal; " />
&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;String inialPop() { // 初始化10个字符串<br style="line-height: normal; " />
&#160;&#160;String res = "";<br style="line-height: normal; " />
&#160;&#160;for (int i = 0; i &lt; 33; i++) {<br style="line-height: normal; " />
&#160;&#160;&#160;if (Math.random() > 0.5) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;res += "0";<br style="line-height: normal; " />
&#160;&#160;&#160;} else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;res += "1";<br style="line-height: normal; " />
&#160;&#160;&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;return res;<br style="line-height: normal; " />
&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;String[] inialPops() {<br style="line-height: normal; " />
&#160;&#160;String[] ipop = new String[10];<br style="line-height: normal; " />
&#160;&#160;for (int i = 0; i &lt; 10; i++) {<br style="line-height: normal; " />
&#160;&#160;&#160;ipop[i] = inialPop();<br style="line-height: normal; " />
&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;return ipop;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;void select() {<br style="line-height: normal; " />
&#160;&#160;double evals[] = new double[10];// 所有染色体适应值<br style="line-height: normal; " />
&#160;&#160;double p[] = new double[10];// 各染色体选择概率<br style="line-height: normal; " />
&#160;&#160;double q[] = new double[10];// 累计概率<br style="line-height: normal; " />
&#160;&#160;double F = 0;<br style="line-height: normal; " />
&#160;&#160;for (int i = 0; i &lt; 10; i++) {<br style="line-height: normal; " />
&#160;&#160;&#160;evals[i] = calculatefitnessvalue(ipop[i]);<br style="line-height: normal; " />
&#160;&#160;&#160;if (bd == null) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;bd = new bestindival();<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;bd.fitness = evals[i];<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;bd.generations = 0;<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;bd.str = ipop[i];<br style="line-height: normal; " />
&#160;&#160;&#160;} else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;if (evals[i] > bd.fitness)// 最好的记录下来<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;{<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;bd.fitness = evals[i];<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;bd.generations = gernation;<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;bd.str = ipop[i];<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;&#160;F = F + evals[i];// 所有染色体适应值总和</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;for (int i = 0; i &lt; 10; i++) {<br style="line-height: normal; " />
&#160;&#160;&#160;p[i] = evals[i] / F;<br style="line-height: normal; " />
&#160;&#160;&#160;if (i == 0)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;q[i] = p[i];<br style="line-height: normal; " />
&#160;&#160;&#160;else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;q[i] = q[i - 1] + p[i];<br style="line-height: normal; " />
&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;for (int i = 0; i &lt; 10; i++) {</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;&#160;double r = Math.random();<br style="line-height: normal; " />
&#160;&#160;&#160;if (r &lt;= q[0]) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;ipop[i] = ipop[0];</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;&#160;} else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;for (int j = 1; j &lt; 10; j++) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;if (r &lt; q[j]) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;ipop[i] = ipop[j];<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;break;<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;void cross() { // 交叉率为25%，平均为25%的染色体进行交叉<br style="line-height: normal; " />
&#160;&#160;String temp1, temp2;<br style="line-height: normal; " />
&#160;&#160;for (int i = 0; i &lt; 10; i++) {<br style="line-height: normal; " />
&#160;&#160;&#160;if (Math.random() &lt; 0.25) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;double r = Math.random();<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;int pos = (int) (Math.round(r * 1000)) % 33;<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;if (pos == 0) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;pos = 1;<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;temp1 = ipop[i].substring(0, pos)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;+ ipop[(i + 1) % 10].substring(pos);<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;temp2 = ipop[(i + 1) % 10].substring(0, pos)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;+ ipop[i].substring(pos);<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;ipop[i] = temp1;<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;ipop[(i + 1) / 10] = temp2;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;}<br style="line-height: normal; " />
&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;void mutation() {<br style="line-height: normal; " />
&#160;&#160;// 1%基因变异m*pop_size 共330个基因，为了使每个基因都相投机会发生变异，需要产生[1--330]上均匀分布的<br style="line-height: normal; " />
&#160;&#160;for (int i = 0; i &lt; 4; i++) {<br style="line-height: normal; " />
&#160;&#160;&#160;int num = (int) (Math.random() * 330 + 1);<br style="line-height: normal; " />
&#160;&#160;&#160;int chromosomeNum = (int) (num / 33) + 1; // 染色体号<br style="line-height: normal; " />
&#160;&#160;&#160;int mutationNum = num - (chromosomeNum - 1) * 33; // 基因号<br style="line-height: normal; " />
&#160;&#160;&#160;if (mutationNum == 0)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;mutationNum = 1;<br style="line-height: normal; " />
&#160;&#160;&#160;//System.out.println(num + "," + chromosomeNum + "," + mutationNum);<br style="line-height: normal; " />
&#160;&#160;&#160;chromosomeNum = chromosomeNum - 1;<br style="line-height: normal; " />
&#160;&#160;&#160;if(chromosomeNum>=10)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;chromosomeNum=9;<br style="line-height: normal; " />
&#160;&#160;&#160;//System.out.println("变异前" + ipop[chromosomeNum]);<br style="line-height: normal; " />
&#160;&#160;&#160;String temp;<br style="line-height: normal; " />
&#160;&#160;&#160;if (ipop[chromosomeNum].charAt(mutationNum - 1) == '0') {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;if (mutationNum == 1) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;temp = "1" + ipop[chromosomeNum].substring(mutationNum);<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;} else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;if (mutationNum != 33) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;temp = ipop[chromosomeNum]<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.substring(0, mutationNum - 1)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;+ "1"<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;+ ipop[chromosomeNum].substring(mutationNum);<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;} else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;temp = ipop[chromosomeNum]<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.substring(0, mutationNum - 1)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;+ "1";<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;&#160;} else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;if (mutationNum == 1) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;temp = "0" + ipop[chromosomeNum].substring(mutationNum);<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;} else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;if (mutationNum != 33) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;temp = ipop[chromosomeNum]<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.substring(0, mutationNum - 1)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;+ "0"<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;+ ipop[chromosomeNum].substring(mutationNum);<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;} else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;temp = ipop[chromosomeNum]<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.substring(0, mutationNum - 1)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;+ "1";<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;&#160;ipop[chromosomeNum] = temp;<br style="line-height: normal; " />
&#160;&#160;&#160;//System.out.println("变异后" + ipop[chromosomeNum]);</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;}<br style="line-height: normal; " />
&#160;<br style="line-height: normal; " />
&#160;void process()<br style="line-height: normal; " />
&#160;{<br style="line-height: normal; " />
&#160;&#160;for(int i=0;i&lt;1000000;i++)<br style="line-height: normal; " />
&#160;&#160;{<br style="line-height: normal; " />
&#160;&#160;&#160;select();<br style="line-height: normal; " />
&#160;&#160;&#160;cross();<br style="line-height: normal; " />
&#160;&#160;&#160;mutation();<br style="line-height: normal; " />
&#160;&#160;&#160;gernation=i;<br style="line-height: normal; " />
&#160;&#160;&#160;<br style="line-height: normal; " />
&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;System.out.println("最优值"+bd.fitness+",代数"+bd.generations);<br style="line-height: normal; " />
&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;public static void main(String args[]) {<br style="line-height: normal; " />
&#160;&#160;JGA j = new JGA();<br style="line-height: normal; " />
&#160;&#160;// System.out.println(j.calculatefitnessvalue("000001010100101001101111011111110"));<br style="line-height: normal; " />
&#160;&#160;j.process();</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;}<br style="line-height: normal; " />
}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">class bestindival { // 存储最佳的<br style="line-height: normal; " />
&#160;public int generations;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;public String str;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;public double fitness;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">}<br style="line-height: normal; " />
</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; "><font size="2" style="line-height: normal; "></font>&#160;</div>
<div align="left" style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; "><font size="2" style="line-height: normal; "><hr size="2" style="width: 122px; height: 2px; line-height: normal; " />
</font></div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; "><font color="#c0c0c0" style="line-height: normal; "><font size="2" style="line-height: normal; ">litertiger</font></font></div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; "><font size="2" style="line-height: normal; ">2006-12-09</font></div>
</span></div>
<img src ="http://www.blogjava.net/1504/aggbug/265882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 23:19 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>蚁群算法java实现[收藏]</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265878.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 15:12:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265878.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265878.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265878.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265878.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265878.html</trackback:ping><description><![CDATA[<div>http://qzone.qq.com/blog/5128646-1214662948</div>
import java.io.File; <br />
import static java.lang.Math.pow; <br />
import static
java.lang.Math.sqrt; <br />
import static java.lang.Math.random; <br />
import
java.util.HashMap; <br />
import java.io.FileReader; <br />
import
java.io.BufferedReader; <br />
/** <br />
* <br />
* @author dvdface <br />
*/
<br />
<br />
public class ACOforTSP { <br />
<br />
<br />
//城市的距离表 <br />
private double[][]
distance; <br />
//距离的倒数表 <br />
private double[][] heuristic; <br />
//启发信息表 <br />
private
double[][] pheromone; <br />
//权重 <br />
private int alpha, beta; <br />
//迭代的次数
<br />
private int iterationTimes; <br />
//蚂蚁的数量 <br />
private int numbersOfAnt;
<br />
//蒸发率 <br />
private double rate; <br />
<br />
ACOforTSP (String file, int
iterationTimes, int numbersOfAnt, int alpha, int beta, double rate) {
<br />
<br />
//加载文件 <br />
this.initializeData(file); <br />
//初始化参数
<br />
this.iterationTimes = iterationTimes; <br />
//设置蚂蚁数量 <br />
this.numbersOfAnt =
numbersOfAnt; <br />
//设置权重 <br />
this.alpha = alpha; <br />
this.beta = beta;
<br />
//设置蒸发率 <br />
this.rate = rate; <br />
} <br />
<br />
private void
initializeData(String filename) { <br />
<br />
//定义内部类 <br />
class City { <br />
<br />
int
no; <br />
double x; <br />
double y; <br />
<br />
City(int no, double x, double y) {
<br />
<br />
this.no = no; <br />
this.x = x; <br />
this.y = y; <br />
} <br />
<br />
private
double getDistance(City city) { <br />
<br />
return sqrt(pow((x - city.x), 2) +
pow((y - city.y), 2)); <br />
} <br />
} <br />
<br />
try { <br />
//定义HashMap保存读取的坐标信息
<br />
HashMap&lt;Integer, City> map = new HashMap&lt;Integer, City>();
<br />
//读取文件 <br />
BufferedReader reader = new BufferedReader(new FileReader(new
File(filename))); <br />
for (String str = reader.readLine(); str != null; str =
reader.readLine()) { <br />
//将读到的信息保存入HashMap <br />
if
(str.matches("([0-9]+)(\\s*)([0-9]+)(.?)([0-9]*)(\\s*)([0-9]+)(.?)([0-9]*)")) {
<br />
<br />
String[] data = str.split("(\\s+)"); <br />
City city = new
City(Integer.parseInt(data[0]), <br />
Double.parseDouble(data[1]),
<br />
Double.parseDouble(data[2])); <br />
<br />
map.put(city.no, city); <br />
} <br />
}
<br />
//分配距离矩阵存储空间 <br />
distance = new double[map.size() + 1][map.size() + 1];
<br />
//分配距离倒数矩阵存储空间 <br />
heuristic = new double[map.size() + 1][map.size() + 1];
<br />
//分配信息素矩阵存储空间 <br />
pheromone = new double[map.size() + 1][map.size() + 1];
<br />
for (int i = 1; i &lt; map.size() + 1; i++) { <br />
for (int j = 1; j &lt;
map.size() + 1; j++) { <br />
//计算城市间的距离，并存入距离矩阵 <br />
distance<em><wbr>[j] =
map.get(i).getDistance(map.get(j)); <br />
//计算距离倒数，并存入距离倒数矩阵
<br />
heuristic<em><wbr>[j] = 1 / distance<em><wbr>[j]; <br />
//初始化信息素矩阵
<br />
pheromone<em><wbr>[j] = 1; <br />
} <br />
} <br />
<br />
} catch (Exception exception)
{ <br />
<br />
System.out.println("初始化数据失败！"); <br />
} <br />
} <br />
<br />
class Ant {
<br />
<br />
//已访问城市列表 <br />
private boolean[] visited; <br />
//访问顺序表 <br />
private int[]
tour; <br />
//已访问城市的个数 <br />
private int n; <br />
//总的距离 <br />
private double total;
<br />
<br />
Ant() { <br />
//给访问顺序表分配空间 <br />
tour = new int[distance.length+1];
<br />
//已存入城市数量为n，刚开始为0 <br />
n = 0; <br />
//将起始城市1,放入访问结点顺序表第一项 <br />
tour[++n] = 1;
<br />
//给已访问城市结点分配空间 <br />
visited = new boolean[distance.length];
<br />
//第一个城市为出发城市，设置为已访问 <br />
visited[tour[n]] = true; <br />
} <br />
<br />
private int
chooseCity() { <br />
<br />
//用来random的随机数 <br />
double m = 0;
<br />
//获得当前所在的城市号放入j,如果和j相邻的城市没有被访问，那么加入m <br />
for (int i = 1, j = tour[n]; i &lt;
pheromone.length; i++) { <br />
<br />
if (!visited<em><wbr>) { <br />
m +=
pow(pheromone[j]<em><wbr>, alpha) * pow(heuristic[j]<em><wbr>, beta); <br />
} <br />
}
<br />
<br />
//保存随机到的数 <br />
double p = m * random(); <br />
//寻找被随机到的城市 <br />
double k = 0;
<br />
//保存找到的城市 <br />
int q = 0; <br />
for (int i = 1, j = tour[n]; k &lt; p; i++) {
<br />
<br />
if (!visited<em><wbr>) { <br />
<br />
k += pow(pheromone[j]<em><wbr>, alpha) *
pow(heuristic[j]<em><wbr>, beta); <br />
q = i; <br />
} <br />
} <br />
<br />
return q; <br />
}
<br />
<br />
private void constructSolution () { <br />
<br />
while (n !=
(distance.length-1) ) { <br />
<br />
//选取下一个城市 <br />
int p = chooseCity(); <br />
//计算总的距离
<br />
total += distance[tour[n]][p]; <br />
//将选取到的城市放入已访问列表 <br />
tour[++n] = p;
<br />
//将选取到的城市标记为已访问 <br />
visited[p] = true; <br />
} <br />
<br />
//回到起点 <br />
total +=
distance[tour[1]][tour[n]]; <br />
//将起点加入访问顺序表的最后 <br />
tour[++n] = tour[1]; <br />
}
<br />
<br />
private void releasePheromone() { <br />
<br />
//释放信息素的大小 <br />
double t =
1/total; <br />
//释放信息素 <br />
for (int i=1;i&lt;tour.length-1;i++) {
<br />
<br />
pheromone[tour<em><wbr>][tour[i+1]] += t;
<br />
pheromone[tour[i+1]][tour<em><wbr>] += t; <br />
} <br />
} <br />
<br />
}
<br />
<br />
public void go() { <br />
<br />
//保存最好的路径和路径长度 <br />
double bestTotal =
Double.MAX_VALUE; <br />
int[] bestTour = new int[distance.length+1];
<br />
<br />
//新建蚂蚁数组，用来引用所创建的蚂蚁 <br />
Ant[] ant = new Ant[numbersOfAnt];
<br />
<br />
//进行iterationTimes次迭代 <br />
while (iterationTimes != 0) {
<br />
//初始化新的一批蚂蚁（这里用构造新的蚂蚁代替重置蚂蚁状态） <br />
for (int i=0; i&lt;numbersOfAnt; i++) {
<br />
ant<em><wbr> = new Ant(); <br />
} <br />
<br />
//进行一次迭代（即让所有的蚂蚁构建一条路径） <br />
for (int
i=0; i&lt;numbersOfAnt; i++) { <br />
<br />
ant<em><wbr>.constructSolution();
<br />
//如果蚂蚁构建的路径长度比上次最好的还好，那么保存这个长度和它所走的路径 <br />
if
(ant<em><wbr>.total&lt;bestTotal) { <br />
<br />
bestTotal = ant<em><wbr>.total;
<br />
System.arraycopy(ant<em><wbr>.tour, 1, bestTour, 1, bestTour.length-1); <br />
}
<br />
} <br />
<br />
//蒸发信息素 <br />
evaporatePheromone(); <br />
<br />
//释放信息素 <br />
for (int
i=0; i&lt;numbersOfAnt; i++) { <br />
<br />
ant<em><wbr>.releasePheromone(); <br />
}
<br />
<br />
//报告本次迭代的信息
<br />
System.out.format("本次为倒数第%d次迭代,当前最优路径长度为%10.2f\n",iterationTimes,bestTotal);
<br />
<br />
//迭代总数减去1，进行下次迭代 <br />
iterationTimes--; <br />
} <br />
<br />
//输出最好的路径长度
<br />
System.out.format("得到的最优的路径长度为:%10.2f\n",bestTotal); <br />
//输出最好的路径
<br />
System.out.println("最优路径如下："); <br />
for (int i=1; i&lt;bestTour.length; i++)
{ <br />
<br />
System.out.print("&#8594;"+bestTour<em><wbr>); <br />
} <br />
} <br />
<br />
private
void evaporatePheromone() { <br />
<br />
for (int i = 1; i &lt; pheromone.length;
i++) <br />
for (int j = 1; j &lt; pheromone.length; j++) {
<br />
<br />
pheromone<em><wbr>[j] *= 1-rate; <br />
} <br />
<br />
} <br />
}</em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em>
<div><em>1.new一个对象 <br />
ACOforTSP tsp = new
ACPforTSP(tsp数据文件名,迭代次数，蚂蚁数量，信息素权重，路径权重，信息素蒸发率）; <br />
2.用go()方法运行 <br />
tsp.go();
<br />
<br />
ACOforTSP.java</em></div>
<img src ="http://www.blogjava.net/1504/aggbug/265878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 23:12 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>KMP算法的Java实现例子以及测试分析【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265872.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:56:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265872.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265872.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265872.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265872.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265872.html</trackback:ping><description><![CDATA[<span  style="color: #2a2a2a; font-family: Tahoma; font-size: 14px; line-height: 25px; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">背景简介：KMP算法用来处理字符串匹配的。给你A,B两个字符串，检查B串是否是A串的子串，类似于Java的String.indexOf("")。之所以叫做KMP，是因为这个算法是由Knuth、Morris、Pratt三个提出来的，取了这三个人的名字的头一个字母。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">原理介绍：找到匹配失败时的最合适的回退位置，而不是简单的回退到子串的第一个字符（常规的枚举查找方式，是简单的回退到子串的第一个字符，接下来准备写一篇KMP算法的性能分析Java实现实例），即可提高查找的效率。因此为了找到这个合适的位置，先对子串预处理，从而得到一个回退位置的数组。过多的理论就不介绍了。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">总体而言比较简单，KMP算一个经典的算法例子，很多笔试、面试也会问起。现总结一下，放在这里供大家参考、交流，希望对大家有所帮助，下面直接给出实现例子，测试与分析也包含其中。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">一、一个文件源代码</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">KMP.java</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">源代码为：</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">package algorithm.kmp;</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">/**<br />
* KMP算法的Java实现例子与测试、分析<br />
* @author 崔卫兵<br />
* @date 2009-3-25<br />
*/<br />
public class KMP {<br />
/**<br />
* 对子串加以预处理，从而找到匹配失败时子串回退的位置<br />
* 找到匹配失败时的最合适的回退位置，而不是回退到子串的第一个字符，即可提高查找的效率<br />
* 因此为了找到这个合适的位置，先对子串预处理，从而得到一个回退位置的数组<br />
* @param B，待查找子串的char数组<br />
* @return<br />
*/<br />
public static int[] preProcess(char [] B) {<br />
int size = B.length;<br />
int[] P = new int[size];<br />
P[0]=0;<br />
int j=0;<br />
//每循环一次，就会找到一个回退位置<br />
for(int i=1;i<size;i++){><br />
//当找到第一个匹配的字符时，即j>0时才会执行这个循环<br />
//或者说p2中的j++会在p1之前执行（限于第一次执行的条件下）<br />
//p1<br />
while(j>0 %26amp;%26amp; B[j]!=B[i]){<br />
j=P[j];<br />
}<br />
//p2，由此可以看出，只有当子串中含有重复字符时，回退的位置才会被优化<br />
if(B[j]==B[i]){<br />
j++;<br />
}<br />
//找到一个回退位置j，把其放入P[i]中<br />
P[i]=j;<br />
}<br />
return P;<br />
}<br />
<br />
/**<br />
* KMP实现<br />
* @param parStr<br />
* @param subStr<br />
* @return<br />
*/<br />
public static void kmp(String parStr, String subStr) {<br />
int subSize = subStr.length();<br />
int parSize = parStr.length();<br />
char[] B = subStr.toCharArray();<br />
char[] A = parStr.toCharArray();<br />
int[] P = preProcess(B);<br />
int j=0;<br />
int k =0;<br />
for(int i=0;i
<parsize;i++){><br />
//当找到第一个匹配的字符时，即j>0时才会执行这个循环<br />
//或者说p2中的j++会在p1之前执行（限于第一次执行的条件下）<br />
//p1<br />
while(j>0 %26amp;%26amp; B[j]!=A[i]){<br />
//找到合适的回退位置<br />
j=P[j-1];<br />
}<br />
//p2 找到一个匹配的字符<br />
if(B[j]==A[i]){<br />
j++;<br />
}<br />
//输出匹配结果，并且让比较继续下去<br />
if(j==subSize){<br />
j=P[j-1];<br />
k++;<br />
System.out.printf("Find subString '%s' at %d\n",subStr,i-subSize+1);<br />
}<br />
}<br />
System.out.printf("Totally found %d times for '%s'.\n\n",k,subStr);<br />
}<br />
<br />
public static void main(String[] args) {<br />
//回退位置数组为P[0, 0, 0, 0, 0, 0]<br />
kmp("abcdeg, abcdeh, abcdef!这个会匹配1次","abcdef");<br />
//回退位置数组为P[0, 0, 1, 2, 3, 4]<br />
kmp("Test ititi ititit! Test ititit!这个会匹配2次","ititit");<br />
//回退位置数组为P[0, 0, 0]<br />
kmp("测试汉字的匹配，崔卫兵。这个会匹配1次","崔卫兵");<br />
//回退位置数组为P[0, 0, 0, 1, 2, 3, 4, 5, 6]<br />
kmp("这个会匹配0次","it1it1it1");<br />
}<br />
}</parsize;i++){>
</size;i++){></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">二、输出结果</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">Find subString 'abcdef' at 16<br />
Totally found 1 times for 'abcdef'.</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">Find subString 'ititit' at 11<br />
Find subString 'ititit' at 24<br />
Totally found 2 times for 'ititit'.</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">Find subString '崔卫兵' at 8<br />
Totally found 1 times for '崔卫兵'.</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">Totally found 0 times for 'it1it1it1'.</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">三、总结</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">总体而言，KMP算法通过找到合适的回退位置从而可以提高匹配效率，但是如果匹配位置都是第一个字符呢？例如测试代码中的</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">//回退位置数组为P[0, 0, 0, 0, 0, 0]<br />
kmp("abcdeg, abcdeh, abcdef!这个会匹配2次","abcdef");</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">接下来准备写一篇KMP算法的性能分析Java实现实例，下文再见。^_^</p>
<div style="text-indent: 28px;"><br />
</div>
</span>
<img src ="http://www.blogjava.net/1504/aggbug/265872.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:56 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265872.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用java实现RSA算法【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265871.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:47:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265871.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265871.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265871.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265871.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265871.html</trackback:ping><description><![CDATA[<a href="http://developer.51cto.com/art/200612/36279.htm">http://developer.51cto.com/art/200612/36279.htm</a>
<div><span  style="font-family: 宋体; font-size: 12px; ">
<div class="m_l_cont_note1" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-style: initial; border-color: initial; border-left-color: #d3d3d3; background-color: #ffffff; padding-top: 6px; padding-right: 12px; padding-bottom: 4px; padding-left: 12px; line-height: 24px; color: #006600; ">
<ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; list-style-type: none; list-style-position: initial; list-style-image: initial; ">
    <li style="background-image: url(http://www.51cto.com/images/art/images/dt.gif); background-repeat: no-repeat; background-attachment: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; list-style-type: none; list-style-position: initial; list-style-image: initial; background-position: 0% 50%; "><span class="fa" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 12px; color: #cc0000; ">摘要：</span>本文先介绍RSA算法的原理,然后在Eclipse的开发环境下,用JAVA编程语言实现，并给出了源代码。</li>
    <li style="background-image: url(http://www.51cto.com/images/art/images/dt.gif); background-repeat: no-repeat; background-attachment: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; list-style-type: none; list-style-position: initial; list-style-image: initial; background-position: 0% 50%; "><span class="fa" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 12px; color: #cc0000; ">标签：</span><a href="http://www.51cto.com/php/search.php?keyword=Java" target="_blank" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; outline-style: none; color: #0e60ac; text-decoration: underline; ">Java</a>&#160;&#160;<a href="http://www.51cto.com/php/search.php?keyword=RSA" target="_blank" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; outline-style: none; color: #0e60ac; text-decoration: underline; ">RSA</a>&#160;&#160;<a href="http://www.51cto.com/php/search.php?keyword=%CB%E3%B7%A8" target="_blank" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; outline-style: none; color: #0e60ac; text-decoration: underline; ">算法</a></li>
    <li class="m_l_cont_note1_r" style="background-image: url(http://www.51cto.com/images/art/images/dt.gif); background-repeat: no-repeat; background-attachment: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; list-style-type: none; list-style-position: initial; list-style-image: initial; text-align: right; background-position: 0% 50%; ">
    <div align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; "><a href="http://ad.cn.doubleclick.net/clk;202930372;27012168;u" target="_blank" class="font_a" style="font-size: 12px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; outline-style: none; color: #0e60ac; text-decoration: underline; ">Oracle帮您准确洞察各个物流环节</a></div>
    </li>
</ul>
</div>
<div class="m_l_cont_text" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-style: initial; border-color: initial; font-size: 14px; line-height: 26px; padding-top: 6px; padding-right: 0px; padding-bottom: 6px; padding-left: 0px; ">
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">1、RSA算法的原理</strong></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">1.1原理</strong><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
假设我们需要将信息从机器A传到机器B，首先由机器B随机确定一个Key，我们称之为密匙private_key，将这个可KEY始终保存在机器B中而不发出来；然后，由这个private_key计算出另一个Key，我们称之为公匙Public_key。这个Public_key的特性是几乎不可能通过该Key计算生成它的private_key。接下来通过网络把这个Public_key传给机器A，机器A受到Public_key后，利用该key，将信息加密，并把加密后的信息通过网络发送到机器B，最后机器B利用已知的private_key，就可以解开加密信息。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">1.2步骤</strong></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">RSA算法的安全性依赖于大数因数分解的困难性。公匙和私匙都是两个大素数的函数。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">1.2.1首先选择两个大素数p、q,计算n=p*q; m=(p-1)*(q-1);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
1.2.2而后随机选择加密密匙Public_key，要求和m互质，比如Public_key=m-1;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
1.2.3利用欧几里德算法计算解密密匙private_key，使private_key满足</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "></p>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; ">
    <tbody style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
        <tr style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
            <td class="code" bgcolor="#e6e6e6" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; ">
            <pre style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">Public_key*private_key三1(mod m)</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">其中Public_key，n是公匙，private_key是密匙。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
1.2.4加密信息text时，利用公式secretword=text^Public_key (mod n)得到密文secretword。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
1.2.5解密时利用公式word=text^private_key(mod n)得到原文word=text。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">2、程序</strong></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">本算法用JAVA编程语言实现，开发环境为Eclipse。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "></p>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; ">
    <tbody style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
        <tr style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
            <td class="code" bgcolor="#e6e6e6" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; ">
            <pre style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">//BJTU 软件0404&#160; <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            import java.io.*;</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">public class Rsa <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private int p=0;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private int q=0;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private long n=0;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private long m=0;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private long public_key=0;//公匙<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private long private_key=0;//密匙<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private long text=0;//明文<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private long secretword=0;//密文<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private long word=0;//解密后明文<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //判断是否为素数<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public boolean primenumber(long t)<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            long k=0;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            k=(long)Math.sqrt((double)t);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            boolean flag=true;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            outer:for(int i=2;i&lt;=k;i++)<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            if((t%i)==0)<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            flag = false;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            break outer;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            return flag;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //输入PQ<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public void inputPQ()throws Exception<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            do{<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("请输入素数p: ");<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            BufferedReader stdin=new BufferedReader(new InputStreamReader</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">(System.in));<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            String br=stdin.readLine();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.p=Integer.parseInt(br);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            while(!primenumber(this.p));<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            do{<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("请输入素数q: ");<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            BufferedReader stdin=new BufferedReader(new InputStreamReader</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">(System.in));<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            String br=stdin.readLine();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.q=Integer.parseInt(br);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            while(!primenumber(this.q));<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.n=this.p*this.q;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.m=(p-1)*(q-1);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("这两个素数的乘积为p*q："+this.n);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("所得的小于Ｎ并且与Ｎ互素的整数的个数为m=(p-1)(q-1)</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">："+this.m);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //求最大公约数<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public long gcd(long a,long b)<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            long gcd;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            if(b==0)<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            gcd=a;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            else<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            gcd=gcd(b,a%b);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("gcd:"+gcd);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            return gcd;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //输入公匙<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public void getPublic_key()throws Exception<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            do{<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("请输入一个公钥的值，这个值要求小于m并且和m互质</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">： ");<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            BufferedReader stdin=new BufferedReader(new InputStreamReader</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">(System.in));<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            String br=stdin.readLine();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.public_key=Long.parseLong(br);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }while((this.public_key >= this.m) || (this.gcd</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">(this.m,this.public_key)!=1));<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("公钥为："+this.public_key);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //计算得到密匙<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public void getPrivate_key()<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            long value=1;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            outer:for(long i=1;;i++)<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            value=i*this.m+1;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("value:&#160; "+value);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            if((value%this.public_key==0)&amp;&amp; (value/this.public_key &lt; this.m))<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.private_key=value/this.public_key;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            break outer;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("产生的一个私钥为："+this.private_key);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //输入明文<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public void getText()throws Exception<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("请输入明文：");<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            BufferedReader stdin=new BufferedReader(new InputStreamReader</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">(System.in));<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            String br=stdin.readLine();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.text=Long.parseLong(br);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //加密、解密计算<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public long colum(long y,long n,long key)<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            long mul;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            if(key==1)<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            mul=y%n;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            else <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            mul=y*this.colum(y,n,key-1)%n;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            return mul;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //加密后解密<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public void pascolum()throws Exception<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.getText();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("输入明文为: "+this.text);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //加密<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.secretword=this.colum(this.text,this.n,this.public_key);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("所得的密文为："+this.secretword);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //解密<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.word=this.colum(this.secretword,this.n,this.private_key);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("解密后所得的明文为："+this.word);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public static void main(String []args)throws Exception<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            Rsa t = new Rsa();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            t.inputPQ();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            t.getPublic_key();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            t.getPrivate_key();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            t.pascolum();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">}</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">3、试验介绍</strong></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">2.1输入PQ，计算m、n&#160;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
3.2输入公匙，产生密匙&#160;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
3.3输入明文，产生密文，并解密</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">此处时间限制，明文暂时用个数字代替，有兴趣的可以改变程序，变成一段数字。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
请输入素数p：<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
23<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
请输入素数q：<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
29<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
这两个素数的乘积为p*q：667<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
所得的小于N并且与N互素的整数的个数为m=(p-1)(q-1)：616<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
请输入一个公钥的值，这个值要求小于m并且和m互质：&#160;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
611<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
gcd：1<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
gcd：1<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
gcd：1<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
gcd：1<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
公钥为：611<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
产生的一个私钥为：123<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
请输入明文：<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
311<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
输入明文为: 311<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
所得的密文为：653<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
解密后所得的明文为：311</p>
</div>
</span></div>
<img src ="http://www.blogjava.net/1504/aggbug/265871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:47 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265871.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最小二乘法拟合java实现源程序【原创 】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265869.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:28:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265869.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265869.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265869.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265869.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265869.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">因为我所在的项目要用到最小二乘法拟合，所有我抽时间将C++实现的程序改为JAVA实现，现在贴出来，供大家参考使用。<br />
<font size="3">/**<br />
&#160;* &lt;p>函数功能：最小二乘法曲线拟合&lt;/p><br />
&#160;* @param x 实型一维数组，长度为 n 。存放给定 n 个数据点的　X　坐标<br />
&#160;* @param y 实型一维数组，长度为 n 。存放给定 n 个数据点的　Y　坐标<br />
&#160;* @param n 变量。给定数据点的个数<br />
&#160;* @param a 实型一维数组，长度为 m 。返回 m-1　次拟合多项式的 m 个系数<br />
&#160;* @param m 拟合多项式的项数，即拟合多项式的最高次数为 m-1.<br />
&#160;*&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 要求 m&lt;=n 且m&lt;=20。若 m>n 或 m>20 ，则本函数自动按 m=min{n,20} 处理.<br />
&#160;* &lt;p>Date:2007-12-25 16:21 PM&lt;/p><br />
&#160;* @author qingbao-gao<br />
&#160;* @return&#160;<br />
&#160;*/<br />
&#160;public static double[] PolyFit(double x[], double y[], int n, double a[], int m)<br />
&#160;{<br />
&#160;&#160;int i, j, k;<br />
&#160;&#160;double z, p, c, g, q = 0, d1, d2;&#160;<br />
&#160;&#160;double []s=new double[20];<br />
&#160;&#160;double []t=new double[20];<br />
&#160;&#160;double[] b=new double[20];<br />
&#160;&#160;double[]dt=new double[3];<br />
&#160;&#160;for (i = 0; i &lt;= m-1; i++)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;a[i] = 0.0;<br />
&#160;&#160;}<br />
&#160;&#160;if (m > n)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;m = n;<br />
&#160;&#160;}<br />
&#160;&#160;if (m > 20)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;m = 20;<br />
&#160;&#160;}<br />
&#160;&#160;z = 0.0;<br />
&#160;&#160;for (i = 0; i &lt;= n-1; i++)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;z = z+x[i]/(1.0 *n);<br />
&#160;&#160;}<br />
&#160;&#160;b[0] = 1.0;<br />
&#160;&#160;d1 = 1.0 * n;<br />
&#160;&#160;p = 0.0;<br />
&#160;&#160;c = 0.0;<br />
&#160;&#160;for (i = 0; i &lt;= n-1; i++)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;p = p+(x[i]-z);<br />
&#160;&#160;&#160;c = c+y[i];<br />
&#160;&#160;}<br />
&#160;&#160;c = c/d1;<br />
&#160;&#160;p = p/d1;<br />
&#160;&#160;a[0] = c * b[0];<br />
&#160;&#160;if (m > 1)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;t[1] = 1.0;<br />
&#160;&#160;&#160;t[0] = -p;<br />
&#160;&#160;&#160;d2 = 0.0;<br />
&#160;&#160;&#160;c = 0.0;<br />
&#160;&#160;&#160;g = 0.0;<br />
&#160;&#160;&#160;for (i = 0; i &lt;= n-1; i++)<br />
&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;q = x[i]-z-p;<br />
&#160;&#160;&#160;&#160;d2 = d2+q * q;<br />
&#160;&#160;&#160;&#160;c = c+y[i] *q;<br />
&#160;&#160;&#160;&#160;g = g+(x[i]-z) *q * q;<br />
&#160;&#160;&#160;}<br />
&#160;&#160;&#160;c = c/d2;<br />
&#160;&#160;&#160;p = g/d2;<br />
&#160;&#160;&#160;q = d2/d1;<br />
&#160;&#160;&#160;d1 = d2;<br />
&#160;&#160;&#160;a[1] = c * t[1];<br />
&#160;&#160;&#160;a[0] = c * t[0]+a[0];<br />
&#160;&#160;}<br />
&#160;&#160;for (j = 2; j &lt;= m-1; j++)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;s[j] = t[j-1];<br />
&#160;&#160;&#160;s[j-1] = -p * t[j-1]+t[j-2];<br />
&#160;&#160;&#160;if (j >= 3)<br />
&#160;&#160;&#160;&#160;for (k = j-2; k >= 1; k--)<br />
&#160;&#160;&#160;&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;s[k] = -p * t[k]+t[k-1]-q * b[k];<br />
&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;s[0] = -p * t[0]-q * b[0];<br />
&#160;&#160;&#160;d2 = 0.0;<br />
&#160;&#160;&#160;c = 0.0;<br />
&#160;&#160;&#160;g = 0.0;<br />
&#160;&#160;&#160;for (i = 0; i &lt;= n-1; i++)<br />
&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;q = s[j];<br />
&#160;&#160;&#160;&#160;for (k = j-1; k >= 0; k--)<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;q = q *(x[i]-z)+s[k];<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;d2 = d2+q * q;<br />
&#160;&#160;&#160;&#160;c = c+y[i] *q;<br />
&#160;&#160;&#160;&#160;g = g+(x[i]-z) *q * q;<br />
&#160;&#160;&#160;}<br />
&#160;&#160;&#160;c = c/d2;<br />
&#160;&#160;&#160;p = g/d2;<br />
&#160;&#160;&#160;q = d2/d1;<br />
&#160;&#160;&#160;d1 = d2;<br />
&#160;&#160;&#160;a[j] = c * s[j];<br />
&#160;&#160;&#160;t[j] = s[j];<br />
&#160;&#160;&#160;for (k = j-1; k >= 0; k--)<br />
&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;a[k] = c * s[k]+a[k];<br />
&#160;&#160;&#160;&#160;b[k] = t[k];<br />
&#160;&#160;&#160;&#160;t[k] = s[k];<br />
&#160;&#160;&#160;}<br />
&#160;&#160;}<br />
&#160;&#160;dt[0] = 0.0;<br />
&#160;&#160;dt[1] = 0.0;<br />
&#160;&#160;dt[2] = 0.0;<br />
&#160;&#160;for (i = 0; i &lt;= n-1; i++)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;q = a[m-1];<br />
&#160;&#160;&#160;for (k = m-2; k >= 0; k--)<br />
&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;q = a[k]+q *(x[i]-z);<br />
&#160;&#160;&#160;}<br />
&#160;&#160;&#160;p = q-y[i];<br />
&#160;&#160;&#160;if (Math.abs(p) > dt[2])<br />
&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;dt[2] = Math.abs(p);<br />
&#160;&#160;&#160;}<br />
&#160;&#160;&#160;dt[0] = dt[0]+p * p;<br />
&#160;&#160;&#160;dt[1] = dt[1]+Math.abs(p);<br />
&#160;&#160;}<br />
&#160;&#160;return a;<br />
&#160;}<br />
<font size="3">/**<br />
&#160; * &lt;p>对X轴数据节点球平均值&lt;/p><br />
&#160; * @param x 存储X轴节点的数组<br />
&#160; * &lt;p>Date:2007-12-25 20:21 PM&lt;/p><br />
&#160; * @author qingbao-gao<br />
&#160; * @return&#160; 平均值<br />
&#160; */<br />
&#160;public static double ave(double []x)<br />
&#160;{<br />
&#160;&#160;double ave=0;<br />
&#160;&#160;double sum=0;<br />
&#160;&#160;if(x!=null)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;for(int i=0;i&lt;x.length;i++)<br />
&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;sum+=x[i];<br />
&#160;&#160;&#160;}<br />
&#160;&#160;&#160;System.out.println("sum-->"+sum);<br />
&#160;&#160;&#160;ave=sum/x.length;<br />
&#160;&#160;&#160;System.out.println("ave"+ave+"x.length"+x.length);<br />
&#160;&#160;}<br />
&#160;&#160;return ave;<br />
&#160;}<br />
&#160;/**<br />
&#160; * &lt;p>由X值获得Y值&lt;/p><br />
&#160; * @param x&#160; 当前X轴输入值,即为预测的月份<br />
&#160; * @param xx 当前X轴输入值的前X数据点<br />
&#160; * @param a&#160; 存储多项式系数的数组<br />
&#160; * @param m&#160; 存储多项式的最高次数的数组<br />
&#160; * &lt;p>Date:2007-12-25 PM 20:07&lt;/p><br />
&#160; * &lt;P>Author:qingbao-gao&lt;/P><br />
&#160; * @return&#160;&#160; 对应X轴节点值的Y轴值<br />
&#160; */<br />
&#160;public static double getY(double x,double[]xx,double[]a,int m)<br />
&#160;{<br />
&#160;&#160;double y=0;<br />
&#160;&#160;double ave=ave(xx);<br />
&#160;&#160;<br />
&#160;&#160;double l=0;<br />
&#160;&#160;for(int i=0;i&lt;m;i++)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;l=a[0];<br />
&#160;&#160;&#160;if(i>0)<br />
&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;y+=a[i]*Math.pow((x-ave),i );<br />
&#160;&#160;&#160;&#160;System.out.println(i+"--|-->"+y+"--a[i]--"+a[i]);<br />
&#160;&#160;&#160;}<br />
&#160;&#160;&#160;System.out.println("a[0]|"+a[0]);<br />
&#160;&#160;}<br />
&#160;&#160;System.out.println("l--|"+(l));<br />
&#160;&#160;return (y+l);<br />
&#160;}</font><br />
//--------------------------------------------测试代码<br />
<p><font size="3">public static void main(String []args)throws DBException<br />
&#160;{&#160;&#160;</font></p>
<p><font size="3">&#160;&#160;double []x={200401,200402,200403,200404,200405,200406,200407,200408,200409,2004010,2004011,2004012,200501,200502,200503,200504};<br />
&#160;&#160;double []y={51,51,53,53,54,55,57,60,63,64,66,66,69,71,72,75};<br />
&#160;&#160;double[]a=new double[20];<br />
&#160;&#160;double[]aa= PolyFit(x,&#160; y,&#160; 16,a, 3);<br />
&#160;&#160;double yy=0;<br />
&#160;&#160;System.out.println("拟合-->"+getY(200505,x,aa,3));<br />
</font></p>
<p><font size="3">&#160;}</font></p>
测试结果为：<font size="3">拟合-->72.38898870320554</font><br />
效果还可以。<br />
</font></span>
<div><font  color="#4B4B4B" face="Verdana"><span  style="line-height: 19px;"><br />
</span></font></div>
<img src ="http://www.blogjava.net/1504/aggbug/265869.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:28 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265869.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>KMP算法JAVA实现【转】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265868.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:27:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265868.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265868.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265868.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265868.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265868.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">转自：<font size="3">http://www.blogjava.net/javacap/archive/2007/07/10/129405.html</font><br />
<span style="color: #000000; ">/**</span><span style="color: #000000; "><br />
&#160;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&#160;Demonstrate&#160;KMP&#160;algorithm&#160;in&#160;Java<br />
&#160;</span><span style="color: #000000; ">*</span><span style="color: #000000; "><br />
&#160;</span><span style="color: #000000; ">*</span><span style="color: #000000; "><br />
&#160;</span><span style="color: #000000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;KMP&#160;{<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;indexOf(String&#160;target,String&#160;pattern)<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;pLen</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pattern.length();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;tLen</span><span style="color: #000000; ">=</span><span style="color: #000000; ">target.length();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">the&#160;fail&#160;function</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;failFunc[]</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">[pLen];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;failFunc[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">=-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">build&#160;fail&#160;function</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">pLen;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">failFunc[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(pattern.charAt(i)</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">pattern.charAt(j</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">j</span><span style="color: #000000; ">>=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">recursion&#160;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">failFunc[j];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(pattern.charAt(i)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">pattern.charAt(j</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">))<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;failFunc[i]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">j</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; ">&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;failFunc[i]</span><span style="color: #000000; ">=-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;pPos</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,tPos</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(tPos</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">tLen</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">pPos</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">pLen)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(target.charAt(tPos)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">pattern.charAt(pPos))<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">match&#160;,then&#160;do&#160;forward</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tPos</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pPos</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(pPos</span><span style="color: #000000; ">==</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">target&#160;go&#160;forward</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tPos</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">target&#160;postion&#160;don't&#160;change,pattern&#160;go&#160;back&#160;&#160;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pPos</span><span style="color: #000000; ">=</span><span style="color: #000000; ">failFunc[pPos</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(pPos</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">pLen)</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&#160;tPos</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pLen;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;}<br />
<br />
}<br />
</span></span>
<div><font  face="Verdana" size="3"><span  style="font-size: 13px; line-height: 19px;"><br />
</span></font></div>
<img src ="http://www.blogjava.net/1504/aggbug/265868.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:27 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265868.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>图的深度优先搜索【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265867.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:24:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265867.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265867.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265867.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265867.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265867.html</trackback:ping><description><![CDATA[<span style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">来源：<font size="3">http://blog.chinaunix.net/u1/50399/showart_410126.html</font><br />
<table bordercolor="#999999" cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1" style="border-collapse: collapse; ">
    <tbody>
        <tr>
            <td style="color: #454545; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; word-wrap: break-word; line-height: 120%; font-size: 12px; ">
            <p style="margin-top: 5px; margin-right: 5px; margin-bottom: 5px; margin-left: 5px; line-height: 150%; "><code><span style="color: #000000; "><span style="color: #0000ff; ">public</span>&#160;<span style="color: #0000ff; ">class</span>&#160;DFSTest<br />
            <span style="color: #0000cc; ">{</span>&#160;<br />
            &#160;&#160;&#160;<span style="color: #0000ff; ">public</span>&#160;<span style="color: #0000ff; ">static</span>&#160;<span style="color: #0000ff; ">void</span>&#160;main<span style="color: #0000cc; ">(</span><span style="color: #ff0000; ">String</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;args<span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;<span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;graph<span style="color: #0000cc; ">=</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;<span style="color: #ff0000; ">list</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;DFS dfs<span style="color: #0000cc; ">=</span><span style="color: #0000ff; ">new</span>&#160;DFS<span style="color: #0000cc; ">(</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;dfs<span style="color: #0000cc; ">.</span>input<span style="color: #0000cc; ">(</span>graph<span style="color: #0000cc; ">,</span>&#160;0<span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff0000; ">list</span><span style="color: #0000cc; ">=</span>dfs<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">getList</span><span style="color: #0000cc; ">(</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;i<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span>&#160;i<span style="color: #0000cc; ">&lt;</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">;</span>&#160;i<span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff0000; ">System</span><span style="color: #0000cc; ">.</span>out<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">print</span><span style="color: #0000cc; ">(</span><span style="color: #ff0000; ">list</span><span style="color: #0000cc; ">[</span>i<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">+</span><span style="color: #ff00ff; ">" "</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            <span style="color: #0000cc; ">}</span><br />
            <br />
            <span style="color: #0000ff; ">class</span>&#160;DFS<br />
            <span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;graph<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;<span style="color: #ff0000; ">list</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;visited<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span>&#160;j<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">void</span>&#160;input<span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;graph<span style="color: #0000cc; ">,</span>&#160;<span style="color: #0000ff; ">int</span>&#160;v<span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">this</span><span style="color: #0000cc; ">.</span>graph<span style="color: #0000cc; ">=</span>graph<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;visited<span style="color: #0000cc; ">=</span><span style="color: #0000ff; ">new</span>&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff0000; ">list</span><span style="color: #0000cc; ">=</span><span style="color: #0000ff; ">new</span>&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;i<span style="color: #0000cc; ">:</span>&#160;visited<span style="color: #0000cc; ">)</span>&#160;i<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;j<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;calculate<span style="color: #0000cc; ">(</span>v<span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">void</span>&#160;calculate<span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;v<span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;visited<span style="color: #0000cc; ">[</span>v<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>1<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff0000; ">list</span><span style="color: #0000cc; ">[</span>j<span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>v<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;k<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span>&#160;k<span style="color: #0000cc; ">&lt;</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">;</span>&#160;k<span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">if</span><span style="color: #0000cc; ">(</span>graph<span style="color: #0000cc; ">[</span>v<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>k<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span><span style="color: #0000cc; ">=</span>1&#160;<span style="color: #0000cc; ">&amp;</span><span style="color: #0000cc; ">&amp;</span>&#160;visited<span style="color: #0000cc; ">[</span>k<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span><span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;calculate<span style="color: #0000cc; ">(</span>k<span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;<span style="color: #ff0000; ">getList</span><span style="color: #0000cc; ">(</span><span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">return</span>&#160;<span style="color: #ff0000; ">list</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            <span style="color: #0000cc; ">}</span><br />
            </span></code></p>
            <div><font color="#0000CC" face=""><br />
            </font></div>
            </td>
        </tr>
    </tbody>
</table>
</span>
<img src ="http://www.blogjava.net/1504/aggbug/265867.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:24 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265867.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关键路径的java实现【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265866.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:22:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265866.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265866.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265866.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265866.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">
<p>来源：<font size="3">http://blog.chinaunix.net/u1/50399/showart_408864.html</font><br />
</p>
<div id="art" width="560" style="margin-top: 15px; margin-right: 15px; margin-bottom: 15px; margin-left: 15px; ">
<p><font color="#ff0000">/*<br />
&#160;* @title：关键路径<br />
&#160;* @input: 有向带权图，图以邻接表形式表示，头结点只存储该顶点的度，后继结点存储顶点及权值<br />
&#160;* @output: 所有可能关键路径的并集path，path[i][0]及path[i][1]代表边的顶点，path[i][2]代表权值<br />
&#160;*/</font></p>
<p>import java.util.*;<br />
public class CriticalPathTest<br />
{&#160;&#160;<br />
&#160;&#160; public static void main(String[] args)<br />
&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160; int[][] graph={{0, 1,6, 2,4, 3,5,},{1, 4,1,},{1, 4,1},{1, 5,2,},<br />
&#160;&#160;&#160;&#160;&#160;&#160; {2, 6,9, 7,7,},{1, 7,4,},{1, 8,2,},{2, 8,4,},{2,},};<br />
&#160;&#160;&#160;&#160;&#160;&#160; int[][] path;</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160; CriticalPath criticalPath=new CriticalPath();<br />
&#160;&#160;&#160;&#160;&#160;&#160; criticalPath.input(graph);<br />
&#160;&#160;&#160;&#160;&#160;&#160; path=criticalPath.getPath();<br />
&#160;&#160;&#160;&#160;&#160;&#160; for(int i=0; i&lt;criticalPath.getLength(); i++){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println("边：" + path[i][0]+ "-" + path[i][1] +" 权："+ path[i][2]);<br />
&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160; }<br />
}</p>
<p>class CriticalPath<br />
{<br />
&#160;&#160;&#160; private int[][] graph;<br />
&#160;&#160;&#160; private int[][] path;<br />
&#160;&#160;&#160; int len;<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160; void input(int[][] graph)<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.graph=graph;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; path=new int[graph.length-1][];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; len=0;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; calculate();<br />
&#160;&#160;&#160; }</p>
<p>&#160;&#160;&#160; void calculate()<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; int[] ve=new int[graph.length];&#160; //事件的最发生时间<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; Stack stack1=new Stack();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; Stack stack2=new Stack();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; int i,j,v;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(int t : ve) t=0;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; stack1.push(0);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; while(stack1.empty()!=true){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; v=(Integer)stack1.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(i=1; i&lt;graph[v].length; i=i+2){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; j=graph[v][i];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if((--graph[j][0])==0){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; stack1.push(j);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(ve[v]+graph[v][i+1]>ve[j]){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ve[j]=ve[v]+graph[v][i+1];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; stack2.push(v);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; int[] vl=new int[graph.length];&#160; //事件的最迟生时间<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(i=0; i&lt;graph.length; i++) vl[i]=1000;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; vl[graph.length-1]=ve[graph.length-1];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; while(stack2.empty()!=true){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; v=(Integer)stack2.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(i=1; i&lt;graph[v].length; i=i+2){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; j=graph[v][i];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(vl[j]-graph[v][i+1]&lt;vl[v]){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; vl[v]=vl[j]-graph[v][i+1];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(v=0; v&lt;graph.length-1; v++){ //求关键路径的所有边<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(i=1; i&lt;graph[v].length; i=i+2){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; j=graph[v][i];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(ve[v]==(vl[j]-graph[v][i+1])){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; int[][] p={{v, j,graph[v][i+1],},};<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; path[len++]=p[0];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160; int[][] getPath()<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; return path;<br />
&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160; int getLength()<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; return len;<br />
&#160;&#160;&#160; }<br />
}</p>
<p><font color="#0000ff">结果如下：</font></p>
<p><font color="#0000ff">边：0-1 权：6<br />
边：1-4 权：1<br />
边：4-6 权：9<br />
边：4-7 权：7<br />
边：6-8 权：2<br />
边：7-8 权：4</font></p>
<p><font color="#0000ff">易知关键路径有两条：</font></p>
<p><font color="#0000ff">0-1-4-6-8 及 0-1-4-7-8</font></p>
</div>
</span>
<img src ="http://www.blogjava.net/1504/aggbug/265866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:22 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>拓扑排序之java实现【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265865.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:22:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265865.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265865.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265865.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265865.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265865.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">来源：<font size="3">http://blog.chinaunix.net/u1/50399/showart_408098.html</font><br />
<div id="art" width="560" style="margin-top: 15px; margin-right: 15px; margin-bottom: 15px; margin-left: 15px; ">
<div align="left"><font size="2"><font color="#ff0000">/*<br />
&#160;* @title：拓扑排序<br />
&#160;* @input: 一个有向无环图，表述为一个邻接矩阵graph[n][]，其中graph[i][0]为顶点i的入度，其余为其后继结点<br />
&#160;* @output: 一个拓扑序列list<br />
&#160;*/</font><br />
import java.util.*;<br />
public class TopologicalSortTest<br />
{&#160;&#160;<br />
&#160;&#160; public static void main(String[] args)<br />
&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160; int[][] graph={{0,1,2,3,},{2,},{1,1,4,},{2,4,},{3,},{0,3,4,},};<br />
&#160;&#160;&#160;&#160;&#160;&#160; int[] list=new int[graph.length];;</font></div>
<div align="left"><font size="2">&#160;&#160;&#160;&#160;&#160;&#160; TopologicalSort topologicalSort=new TopologicalSort();<br />
&#160;&#160;&#160;&#160;&#160;&#160; topologicalSort.input(graph);<br />
&#160;&#160;&#160;&#160;&#160;&#160; list=topologicalSort.getList();<br />
&#160;&#160;&#160;&#160;&#160;&#160; for(int l : list){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.print(l+" ");<br />
&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160; }<br />
}</font></div>
<div align="left"><font size="2">class TopologicalSort<br />
{<br />
&#160;int[][] graph;<br />
&#160;int[] list;<br />
&#160;<br />
&#160;&#160;&#160; void input(int[][] graph)<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160; &#160;this.graph=graph;<br />
&#160;&#160;&#160; &#160;list=new int[graph.length];<br />
&#160;&#160;&#160; &#160;calculate();<br />
&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160; void calculate()<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; Stack stack=new Stack();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(int i=0; i&lt;graph.length; i++){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;if(graph[i][0]==0){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;stack.push(i);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; int i=0;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; while(stack.empty()!=true){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;list[i]=(Integer)stack.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;for(int j=1; j&lt;graph[list[i]].length; j++){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;int k=graph[list[i]][j];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;if((--graph[k][0])==0){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;stack.push(k);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;i++;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(i&lt;graph.length){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;System.out.println("存在环，不可排序！");<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;System.exit(0);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160; }</font></div>
<div align="left"><font size="2">&#160;&#160;&#160; int[] getList()<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160; &#160;return list;<br />
&#160;&#160;&#160; }<br />
}</font></div>
<div align="left"><font size="2"></font></div>
<div align="left"><font size="2"></font>&#160;</div>
<div align="left"><font color="#0000ff" size="2">运行结果：</font></div>
<div align="left"><font color="#0000ff" size="2">5 0 3 2 4 1</font></div>
</div>
</span>
<img src ="http://www.blogjava.net/1504/aggbug/265865.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:22 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265865.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最小生成树的Java实现【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265864.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:20:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265864.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265864.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265864.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265864.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265864.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">来源：<font size="3">http://blog.chinaunix.net/u1/50399/showart_407408.html</font><br />
<div id="art" width="560" style="margin-top: 15px; margin-right: 15px; margin-bottom: 15px; margin-left: 15px; ">
<div><font size="2">/*<br />
&#160;* @input: 一个有向无环带权图，表述为一个二维数组graph[n][n]<br />
&#160;* @output: 最小生成树tree[n-1][3],tree[i][0]及tree[i][1]为边之顶点，tree[i][2]为权<br />
&#160;*/</font></div>
<div><font size="2">public class MiniSpanTreeTest<br />
{&#160;&#160;<br />
&#160;&#160; static int[][] graph={<br />
&#160;&#160;&#160;&#160;&#160;&#160; {1000,6,1,5,1000,1000},<br />
&#160;&#160;&#160;&#160;&#160;&#160; {6,1000,5,1000,3,1000},<br />
&#160;&#160;&#160;&#160;&#160;&#160; {1,5,1000,5,6,4},<br />
&#160;&#160;&#160;&#160;&#160;&#160; {5,1000,5,1000,1000,2},<br />
&#160;&#160;&#160;&#160;&#160;&#160; {1000,3,6,1000,1000,6},<br />
&#160;&#160;&#160;&#160;&#160;&#160; {1000,1000,4,2,6,1000},<br />
&#160;&#160; };<br />
&#160;&#160; static int v=0;<br />
&#160;&#160; static int[][] tree;</font></div>
<div><font size="2">&#160;&#160; public static void main(String[] args)<br />
&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160; MiniSpanTree miniSpanTree=new MiniSpanTree();<br />
&#160;&#160;&#160;&#160;&#160;&#160; miniSpanTree.input(graph, v);<br />
&#160;&#160;&#160;&#160;&#160;&#160; tree=miniSpanTree.getTree();<br />
&#160;&#160;&#160;&#160;&#160;&#160; for(int i=0; i&lt;graph.length-1; i++){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println("边：" + tree[i][0] + "-" + tree[i][1] + "&#160; 权：" + tree[i][2]);<br />
&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160; }<br />
}</font></div>
<div><font size="2">class MiniSpanTree<br />
{<br />
&#160;&#160;&#160; private int[][] graph;<br />
&#160;&#160;&#160; private int v;<br />
&#160;&#160;&#160; private int[][] tree;<br />
&#160;&#160;&#160; private boolean[] s;</font></div>
<div><font size="2">&#160;&#160;&#160; void input(int[][] graph, int v)<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.graph=graph;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.v=v;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; tree=new int[graph.length-1][];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; s=new boolean[graph.length];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(boolean i : s) i=false;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; s[v]=true;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; calculate();<br />
&#160;&#160;&#160; }</font></div>
<div><font size="2">&#160;&#160;&#160; void calculate()<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(int i=0; i&lt;graph.length-1; i++){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; int[][] edge ={{0,0,1000,},};<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(int j=0; j&lt;graph.length; j++){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(int k=0; s[j]==true &amp;&amp; k&lt;graph.length; k++){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(s[k]==false &amp;&amp; graph[j][k]&lt;edge[0][2]){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; edge[0][0]=j;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; edge[0][1]=k;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; edge[0][2]=graph[j][k];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; tree[i]=edge[0];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; s[tree[i][1]]=true;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160; }</font></div>
<div><font size="2">&#160;&#160;&#160; int[][] getTree()<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; return tree;<br />
&#160;&#160;&#160; }<br />
}</font></div>
<div><font size="2"></font></div>
<div><font size="2"></font>&#160;</div>
<div><font color="#0000ff" size="2">结果如下：</font></div>
<div><font color="#0000ff" size="2">边：0-2&#160; 权：1<br />
边：2-5&#160; 权：4<br />
边：5-3&#160; 权：2<br />
边：2-1&#160; 权：5<br />
边：1-4&#160; 权：3</font></div>
</div>
</span>
<img src ="http://www.blogjava.net/1504/aggbug/265864.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:20 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265864.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最短路径算法之java实现【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265863.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:19:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265863.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265863.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265863.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265863.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265863.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">来源：<font size="3">http://blog.chinaunix.net/u1/50399/showart_405608.html</font><br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td style="color: #454545; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; word-wrap: break-word; line-height: 120%; font-size: 12px; ">
            <p><font size="3"><font color="#0000ff">标题：</font>Single-Source Shortest Paths (Dijkstra's algorithm)<br />
            <font color="#0000ff">输入：</font>n个顶点的有向带权图G，表述为n*n矩阵。<br />
            &#160;&#160;&#160;&#160;&#160; 起始点:v0 其取值范围为0~n-1。<br />
            <font color="#0000ff">输出：</font>最短路径及其长度，表述为一个二维数组path[n-1][3]，每个数组元素由三个数据项组成，其中path[i][0]代表此最短路径之终点，path[i][1]代表此最短路径之长度，path[i][2]代表此最短路径终点之前趋。</font></p>
            </td>
        </tr>
    </tbody>
</table>
<div></div>
<p>&#160;</p>
<div></div>
<div></div>
<table bordercolor="#999999" cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1" style="border-collapse: collapse; ">
    <tbody>
        <tr>
            <td style="color: #454545; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; word-wrap: break-word; line-height: 120%; font-size: 12px; ">
            <p style="margin-top: 5px; margin-right: 5px; margin-bottom: 5px; margin-left: 5px; line-height: 150%; "><code><span style="color: #000000; "><span style="color: #0000ff; ">public</span>&#160;<span style="color: #0000ff; ">class</span>&#160;ShortestPathTest<br />
            <span style="color: #0000cc; ">{</span>&#160;<br />
            &#160;&#160;&#160;<span style="color: #0000ff; ">static</span>&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;graph<span style="color: #0000cc; ">=</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;10&#160;<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;30&#160;<span style="color: #0000cc; ">,</span>&#160;100&#160;<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;5&#160;<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;50&#160;<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;10&#160;<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;20&#160;<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;60&#160;<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;<span style="color: #0000ff; ">static</span>&#160;<span style="color: #0000ff; ">int</span>&#160;<span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;path<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;<span style="color: #0000ff; ">static</span>&#160;<span style="color: #0000ff; ">int</span>&#160;v<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span><br />
            <br />
            &#160;&#160;&#160;<span style="color: #0000ff; ">public</span>&#160;<span style="color: #0000ff; ">static</span>&#160;<span style="color: #0000ff; ">void</span>&#160;main<span style="color: #0000cc; ">(</span><span style="color: #ff0000; ">String</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;args<span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;<span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;ShortestPath sortestPath<span style="color: #0000cc; ">=</span><span style="color: #0000ff; ">new</span>&#160;ShortestPath<span style="color: #0000cc; ">(</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;sortestPath<span style="color: #0000cc; ">.</span>input<span style="color: #0000cc; ">(</span>graph<span style="color: #0000cc; ">,</span>&#160;v<span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;path<span style="color: #0000cc; ">=</span>sortestPath<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">getPath</span><span style="color: #0000cc; ">(</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;i<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span>&#160;path<span style="color: #0000cc; ">[</span>i<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">!</span><span style="color: #0000cc; ">=</span>1000<span style="color: #0000cc; ">;</span>&#160;i<span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff0000; ">System</span><span style="color: #0000cc; ">.</span>out<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">println</span><span style="color: #0000cc; ">(</span><span style="color: #ff00ff; ">"源点："</span>&#160;<span style="color: #0000cc; ">+</span>&#160;v&#160;<span style="color: #0000cc; ">+</span>&#160;<span style="color: #ff00ff; ">"; 终点："</span>&#160;<span style="color: #0000cc; ">+</span>&#160;path<span style="color: #0000cc; ">[</span>i<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span>&#160;<span style="color: #0000cc; ">+</span>&#160;<br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff00ff; ">"; 长度："</span>&#160;<span style="color: #0000cc; ">+</span>&#160;path<span style="color: #0000cc; ">[</span>i<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span>&#160;<span style="color: #0000cc; ">+</span>&#160;<span style="color: #ff00ff; ">"; 终点前趋："</span>&#160;<span style="color: #0000cc; ">+</span>&#160;path<span style="color: #0000cc; ">[</span>i<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>2<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            <span style="color: #0000cc; ">}</span><br />
            <br />
            <span style="color: #0000ff; ">class</span>&#160;ShortestPath<br />
            <span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">private</span>&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;graph<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">private</span>&#160;<span style="color: #0000ff; ">int</span>&#160;v<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">private</span>&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;path<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">void</span>&#160;input<span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;graph<span style="color: #0000cc; ">,</span>&#160;<span style="color: #0000ff; ">int</span>&#160;v<span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">this</span><span style="color: #0000cc; ">.</span>graph<span style="color: #0000cc; ">=</span>graph<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">this</span><span style="color: #0000cc; ">.</span>v<span style="color: #0000cc; ">=</span>v<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;calculate<span style="color: #0000cc; ">(</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">void</span>&#160;calculate<span style="color: #0000cc; ">(</span><span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;path<span style="color: #0000cc; ">=</span><span style="color: #0000ff; ">new</span>&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">-</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;s<span style="color: #0000cc; ">=</span><span style="color: #0000ff; ">new</span>&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;i&#160;<span style="color: #0000cc; ">:</span>&#160;s<span style="color: #0000cc; ">)</span>i<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span>&#160;s<span style="color: #0000cc; ">[</span>v<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>2<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff9900; ">//按路径值从小到大的顺序求解各条最短路径<br />
            </span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;i<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span>&#160;i<span style="color: #0000cc; ">&lt;</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">-</span>1<span style="color: #0000cc; ">;</span>&#160;i<span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff9900; ">//求v到集合s2的最短路径pointToSet[0]<br />
            </span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;pointToSet<span style="color: #0000cc; ">=</span><span style="color: #0000cc; ">{</span><span style="color: #0000cc; ">{</span>1<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;<span style="color: #0000cc; ">-</span>1<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">{</span>1<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;<span style="color: #0000cc; ">-</span>1<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;j<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span>&#160;j<span style="color: #0000cc; ">&lt;</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">;</span>&#160;j<span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">if</span><span style="color: #0000cc; ">(</span>s<span style="color: #0000cc; ">[</span>j<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span><span style="color: #0000cc; ">=</span>0&#160;<span style="color: #0000cc; ">&amp;</span><span style="color: #0000cc; ">&amp;</span>&#160;graph<span style="color: #0000cc; ">[</span>v<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>j<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">&lt;</span>pointToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>graph<span style="color: #0000cc; ">[</span>v<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>j<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>j<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff9900; ">//求集合s1到集合s2的最短路径setToSet[0]<br />
            </span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;setToSet<span style="color: #0000cc; ">=</span><span style="color: #0000cc; ">{</span><span style="color: #0000cc; ">{</span>1<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;<span style="color: #0000cc; ">-</span>1<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;j<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span>&#160;j<span style="color: #0000cc; ">&lt;</span>i<span style="color: #0000cc; ">;</span>&#160;j<span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff9900; ">//求顶点path[j][0]到点集s2的最短路径pointToSet[1]<br />
            </span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>1000<span style="color: #0000cc; ">;</span>&#160;pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>2<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>j<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;k<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span>&#160;k<span style="color: #0000cc; ">&lt;</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">;</span>&#160;k<span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">if</span><span style="color: #0000cc; ">(</span>s<span style="color: #0000cc; ">[</span>k<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span><span style="color: #0000cc; ">=</span>0&#160;<span style="color: #0000cc; ">&amp;</span><span style="color: #0000cc; ">&amp;</span>&#160;graph<span style="color: #0000cc; ">[</span>path<span style="color: #0000cc; ">[</span>j<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>k<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">&lt;</span>pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>graph<span style="color: #0000cc; ">[</span>path<span style="color: #0000cc; ">[</span>j<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>k<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>k<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">+</span>path<span style="color: #0000cc; ">[</span>j<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">if</span><span style="color: #0000cc; ">(</span>pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">&lt;</span>setToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;setToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff9900; ">//比较pointToSet[0]及setToSet[0]，求其小者，作为path[i]之值<br />
            </span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">if</span><span style="color: #0000cc; ">(</span>pointToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">&lt;</span>setToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;path<span style="color: #0000cc; ">[</span>i<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>pointToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">else</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;path<span style="color: #0000cc; ">[</span>i<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>setToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;s<span style="color: #0000cc; ">[</span>path<span style="color: #0000cc; ">[</span>i<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>1<span style="color: #0000cc; ">;</span>&#160;<span style="color: #ff9900; ">//把顶点划为已求最短路终点之点集<br />
            </span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            <br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;<span style="color: #ff0000; ">getPath</span><span style="color: #0000cc; ">(</span><span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">return</span>&#160;path<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            <span style="color: #0000cc; ">}</span></span></code></p>
            </td>
        </tr>
    </tbody>
</table>
<p>&#160;</p>
<p><font color="#0080ff">输出结果：<br />
源点：0; 终点：2; 长度：10; 终点前趋：-1<br />
源点：0; 终点：4; 长度：30; 终点前趋：-1<br />
源点：0; 终点：3; 长度：50; 终点前趋：1<br />
源点：0; 终点：5; 长度：60; 终点前趋：2</font></p>
</span>
<img src ="http://www.blogjava.net/1504/aggbug/265863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:19 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>插入，冒泡，选择，Shell,快速排序[转]</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265862.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:18:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265862.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265862.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265862.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265862.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265862.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">
<p>转自：<font size="3">http://www.blogjava.net/javacap/archive/2007/12/13/167364.html</font><br />
为了便于管理，先引入个基础类：<br />
</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; padding-top: 4px; background-color: #eeeeee; "><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&#160;algorithms;<br />
<br />
</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&#160;yovn<br />
&#160;*<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">abstract</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;Sorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Comparable</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;{<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">abstract</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;sort(E[]&#160;array,</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from&#160;,</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len);<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">final</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;sort(E[]&#160;array)<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sort(array,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,array.length);<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">protected</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">final</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;swap(E[]&#160;array,</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from&#160;,</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;to)<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;E&#160;tmp</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[from];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[from]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[to];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[to]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">tmp;<br />
&#160;&#160;&#160;&#160;}<br />
<br />
}</span></div>
<p>一 插入排序<br />
该算法在数据规模小的时候十分高效，该算法每次插入第K+1到前K个有序数组中一个合适位置，K从0开始到N-1,从而完成排序：<br />
</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; padding-top: 4px; background-color: #eeeeee; "><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&#160;algorithms;<br />
</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&#160;yovn<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;InsertSorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Comparable</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Sorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;{<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&#160;(non-Javadoc)<br />
&#160;&#160;&#160;&#160;&#160;*&#160;@see&#160;algorithms.Sorter#sort(E[],&#160;int,&#160;int)<br />
&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;sort(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;E&#160;tmp</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">len;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tmp</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[i];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(;j</span><span style="color: #000000; ">></span><span style="color: #000000; ">from;j</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(tmp.compareTo(array[j</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[j]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[j</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[j]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">tmp;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;<br />
<br />
}</span></div>
<p><br />
二 冒泡排序<br />
这可能是最简单的排序算法了，算法思想是每次从数组末端开始比较相邻两元素，把第i小的冒泡到数组的第i个位置。i从0一直到N-1从而完成排序。（当然也可以从数组开始端开始比较相邻两元素，把第i大的冒泡到数组的第N-i个位置。i从0一直到N-1从而完成排序。)<br />
<br />
</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; padding-top: 4px; background-color: #eeeeee; "><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&#160;algorithms;<br />
<br />
</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&#160;yovn<br />
&#160;*<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;BubbleSorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Comparable</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Sorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;{<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&#160;&#160;</span><span style="color: #0000ff; ">boolean</span><span style="color: #000000; ">&#160;DWON</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">true</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">final</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;bubble_down(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len)<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">from;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">len;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">len</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;j</span><span style="color: #000000; ">></span><span style="color: #000000; ">i;j</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(array[j].compareTo(array[j</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;swap(array,j</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,j);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">final</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;bubble_up(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len)<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">len</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">>=</span><span style="color: #000000; ">from;i</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">from;j</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">i;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(array[j].compareTo(array[j</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">></span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;swap(array,j,j</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;@Override<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;sort(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(DWON)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;bubble_down(array,from,len);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;bubble_up(array,from,len);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;<br />
}</span></div>
<p><br />
三，选择排序<br />
选择排序相对于冒泡来说，它不是每次发现逆序都交换，而是在找到全局第i小的时候记下该元素位置，最后跟第i个元素交换，从而保证数组最终的有序。<br />
相对与插入排序来说，选择排序每次选出的都是全局第i小的，不会调整前i个元素了。<br />
</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; padding-top: 4px; background-color: #eeeeee; "><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&#160;algorithms;<br />
</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&#160;yovn<br />
&#160;*<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;SelectSorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Comparable</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Sorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;{<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&#160;(non-Javadoc)<br />
&#160;&#160;&#160;&#160;&#160;*&#160;@see&#160;algorithms.Sorter#sort(E[],&#160;int,&#160;int)<br />
&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;@Override<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;sort(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">len;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;smallest</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">from;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(;j</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">len;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(array[j].compareTo(array[smallest])</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;smallest</span><span style="color: #000000; ">=</span><span style="color: #000000; ">j;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;swap(array,i,smallest);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;<br />
}<br />
</span></div>
<p>四 Shell排序<br />
Shell排序可以理解为插入排序的变种，它充分利用了插入排序的两个特点：<br />
1）当数据规模小的时候非常高效<br />
2）当给定数据已经有序时的时间代价为O(N)<br />
所以，Shell排序每次把数据分成若个小块，来使用插入排序，而且之后在这若个小块排好序的情况下把它们合成大一点的小块，继续使用插入排序，不停的合并小块，知道最后成一个块，并使用插入排序。<br />
<br />
这里每次分成若干小块是通过&#8220;增量&#8221; 来控制的，开始时增量交大，接近N/2,从而使得分割出来接近N/2个小块，逐渐的减小&#8220;增量&#8220;最终到减小到1。<br />
<br />
一直较好的增量序列是2^k-1,2^(k-1)-1,.....7,3,1,这样可使Shell排序时间复杂度达到O(N^1.5)<br />
所以我在实现Shell排序的时候采用该增量序列<br />
</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; padding-top: 4px; background-color: #eeeeee; "><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&#160;algorithms;<br />
<br />
</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&#160;yovn<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;ShellSorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Comparable</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Sorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;&#160;{<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&#160;(non-Javadoc)<br />
&#160;&#160;&#160;&#160;&#160;*&#160;Our&#160;delta&#160;value&#160;choose&#160;2^k-1,2^(k-1)-1,<img alt="" src="http://www.blogjava.net/Images/dot.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " /><img alt="" src="http://www.blogjava.net/Images/dot.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " />.7,3,1.<br />
&#160;&#160;&#160;&#160;&#160;*&#160;complexity&#160;is&#160;O(n^1.5)<br />
&#160;&#160;&#160;&#160;&#160;*&#160;@see&#160;algorithms.Sorter#sort(E[],&#160;int,&#160;int)<br />
&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;@Override<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;sort(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">1.calculate&#160;&#160;the&#160;first&#160;delta&#160;value;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">((value</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">len)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(value</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;delta</span><span style="color: #000000; ">=</span><span style="color: #000000; ">value;delta</span><span style="color: #000000; ">>=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;delta</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(delta</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">delta;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;modify_insert_sort(array,from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">i,len</span><span style="color: #000000; ">-</span><span style="color: #000000; ">i,delta);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">final</span><span style="color: #000000; ">&#160;&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;modify_insert_sort(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len,</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;delta)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(len</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;E&#160;tmp</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">delta;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">len;i</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">delta)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tmp</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[i];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(;j</span><span style="color: #000000; ">></span><span style="color: #000000; ">from;j</span><span style="color: #000000; ">-=</span><span style="color: #000000; ">delta)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(tmp.compareTo(array[j</span><span style="color: #000000; ">-</span><span style="color: #000000; ">delta])</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[j]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[j</span><span style="color: #000000; ">-</span><span style="color: #000000; ">delta];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[j]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">tmp;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;}<br />
}</span></div>
<p><br />
五 快速排序<br />
快速排序是目前使用可能最广泛的排序算法了。<br />
一般分如下步骤：<br />
1）选择一个枢纽元素（有很对选法，我的实现里采用去中间元素的简单方法）<br />
2）使用该枢纽元素分割数组，使得比该元素小的元素在它的左边，比它大的在右边。并把枢纽元素放在合适的位置。<br />
3）根据枢纽元素最后确定的位置，把数组分成三部分，左边的，右边的，枢纽元素自己，对左边的，右边的分别递归调用快速排序算法即可。<br />
快速排序的核心在于分割算法，也可以说是最有技巧的部分。<br />
</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; padding-top: 4px; background-color: #eeeeee; "><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&#160;algorithms;<br />
<br />
</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&#160;yovn<br />
&#160;*<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;QuickSorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Comparable</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Sorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;{<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&#160;(non-Javadoc)<br />
&#160;&#160;&#160;&#160;&#160;*&#160;@see&#160;algorithms.Sorter#sort(E[],&#160;int,&#160;int)<br />
&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;@Override<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;sort(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;q_sort(array,from,from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">len</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">final</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;q_sort(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;to)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(to</span><span style="color: #000000; ">-</span><span style="color: #000000; ">from</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;pivot</span><span style="color: #000000; ">=</span><span style="color: #000000; ">selectPivot(array,from,to);<br />
<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pivot</span><span style="color: #000000; ">=</span><span style="color: #000000; ">partion(array,from,to,pivot);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;q_sort(array,from,pivot</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;q_sort(array,pivot</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,to);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;}<br />
<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;partion(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;to,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;pivot)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;E&#160;tmp</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[pivot];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[pivot]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[to];</span><span style="color: #008000; ">//</span><span style="color: #008000; ">now&#160;to's&#160;position&#160;is&#160;available</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(from</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">to)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(from</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">to</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">array[from].compareTo(tmp)</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)from</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(from</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">to)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[to]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[from];</span><span style="color: #008000; ">//</span><span style="color: #008000; ">now&#160;from's&#160;position&#160;is&#160;available</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;to</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(from</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">to</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">array[to].compareTo(tmp)</span><span style="color: #000000; ">>=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)to</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(from</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">to)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[from]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[to];</span><span style="color: #008000; ">//</span><span style="color: #008000; ">now&#160;to's&#160;position&#160;is&#160;available&#160;now&#160;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[from]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">tmp;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&#160;from;<br />
&#160;&#160;&#160;&#160;}<br />
<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;selectPivot(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;to)&#160;{<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&#160;(from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">to)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;}<br />
<br />
}</span></div>
<p><br />
还有归并排序，堆排序，桶式排序，基数排序，下次在归纳。</p>
</span>
<img src ="http://www.blogjava.net/1504/aggbug/265862.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:18 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265862.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>红黑树的Java实现 【转】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265861.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:16:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265861.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265861.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265861.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265861.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265861.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自：http://www.blogjava.net/javacap/archive/2007/12/20/169120.html红黑树可能是要考虑情况最多的BST树了，它有自己的规则（见代码的注释），通过这些规则可以保证花费较小的代价来达到相对平衡。注意，红黑树仍然不是平衡树，但是统计性能要好于AVL树。要保持红黑树的规则，主要通过两类操作，一类是换色，一类还是旋转。红黑树插入主...&nbsp;&nbsp;<a href='http://www.blogjava.net/1504/archive/2009/04/15/265861.html'>阅读全文</a><img src ="http://www.blogjava.net/1504/aggbug/265861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:16 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>排序算法复习（Java实现）(二）： 归并排序，堆排序，桶式排序，基数排序 【转】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265860.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:13:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265860.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265860.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265860.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265860.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265860.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自：http://www.blogjava.net/javacap/archive/2007/12/14/167618.html六 归并排序算法思想是每次把待排序列分成两部分，分别对这两部分递归地用归并排序，完成后把这两个子部分合并成一个序列。归并排序借助一个全局性临时数组来方便对子序列的归并，该算法核心在于归并。package&#160;algorithms;imp...&nbsp;&nbsp;<a href='http://www.blogjava.net/1504/archive/2009/04/15/265860.html'>阅读全文</a><img src ="http://www.blogjava.net/1504/aggbug/265860.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:13 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265860.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>图及其算法复习（Java实现) 一：存储结构，深度优先，广度优先【转】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265858.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:11:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265858.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265858.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265858.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265858.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265858.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自：http://www.blogjava.net/javacap/archive/2007/12/14/167764.html很早就想总结一下了，一直没有时间，OK，进入正题。一 图的基本概念及存储结构图G是由顶点的有穷集合，以及顶点之间的关系组成，顶点的集合记为V，顶点之间的关系构成边的集合EG=(V,E).说一条边从v1,连接到v2,那么有v1Ev2(E是V上的一个...&nbsp;&nbsp;<a href='http://www.blogjava.net/1504/archive/2009/04/15/265858.html'>阅读全文</a><img src ="http://www.blogjava.net/1504/aggbug/265858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:11 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>伸展树与半伸展树Java实现【转】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265857.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:10:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265857.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265857.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265857.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265857.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265857.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自：http://www.blogjava.net/javacap/archive/2007/12/19/168627.html伸展树与半伸展树属于自组织的数据结构，能按访问频率调整节点的位置调整一般通过如下方式：1）绕根的单旋转，跟AVL的单旋转类似2）一字型旋转(ZigZig Rotation)3)之字形旋转(ZigZag Rotation)旋转操作较简单，有点点...&nbsp;&nbsp;<a href='http://www.blogjava.net/1504/archive/2009/04/15/265857.html'>阅读全文</a><img src ="http://www.blogjava.net/1504/aggbug/265857.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:10 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265857.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>表达式求值Java粗糙版【转】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265856.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:05:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265856.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265856.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265856.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265856.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265856.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">转自：<font size="3">http://www.blogjava.net/javacap/archive/2007/10/09/151566.html</font><br />
<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&#160;com.yovn.algo;<br />
<br />
</span><span style="color: #0000ff; ">import</span><span style="color: #000000; ">&#160;java.util.Stack;<br />
</span><span style="color: #0000ff; ">import</span><span style="color: #000000; ">&#160;java.util.Vector;<br />
<br />
</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&#160;yovn<br />
&#160;*<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;Caculator&#160;{<br />
<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;Item<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">boolean</span><span style="color: #000000; ">&#160;ops;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;value;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Character&#160;opVal;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;opPriority;<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;Stack</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Item</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;opStack</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;Stack</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Item</span><span style="color: #000000; ">></span><span style="color: #000000; ">();<br />
&#160;&#160;&#160;&#160;Vector</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Item</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;calcStack</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;Vector</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Item</span><span style="color: #000000; ">></span><span style="color: #000000; ">();<br />
&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;&#160;&#160;&#160;&#160;*&#160;<br />
&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;Caculator()&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;TODO&#160;Auto-generated&#160;constructor&#160;stub</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;calc()<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Stack</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Item</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;tmp</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;Stack</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Item</span><span style="color: #000000; ">></span><span style="color: #000000; ">();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">calcStack.isEmpty())<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Item&#160;it</span><span style="color: #000000; ">=</span><span style="color: #000000; ">calcStack.remove(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">it.ops)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tmp.push(it);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;op2</span><span style="color: #000000; ">=</span><span style="color: #000000; ">tmp.pop().value;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;op1</span><span style="color: #000000; ">=</span><span style="color: #000000; ">tmp.pop().value;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Item&#160;newItem</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;Item();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.ops</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">true</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">switch</span><span style="color: #000000; ">(it.opVal)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">case</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">+</span><span style="color: #000000; ">'</span><span style="color: #000000; ">:<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">op1</span><span style="color: #000000; ">+</span><span style="color: #000000; ">op2;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">case</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">-</span><span style="color: #000000; ">'</span><span style="color: #000000; ">:<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">op1</span><span style="color: #000000; ">-</span><span style="color: #000000; ">op2;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">case</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">*</span><span style="color: #000000; ">'</span><span style="color: #000000; ">:<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">op1</span><span style="color: #000000; ">*</span><span style="color: #000000; ">op2;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">case</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">/</span><span style="color: #000000; ">'</span><span style="color: #000000; ">:<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">op1</span><span style="color: #000000; ">/</span><span style="color: #000000; ">op2;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tmp.push(newItem);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&#160;tmp.pop().value;<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;&#160;&#160;&#160;&#160;*&#160;1)数字直接输出<br />
&#160;&#160;&#160;&#160;&#160;*&#160;2)开括号则压栈<br />
&#160;&#160;&#160;&#160;&#160;*&#160;3）闭括号把栈中元素依次输出直到遇到开括号<br />
&#160;&#160;&#160;&#160;&#160;*&#160;4）运算符时<br />
&#160;&#160;&#160;&#160;&#160;*&#160;&#160;&#160;&#160;&#160;a)循环，当栈非空，并且栈顶元素不是开括号，并且栈顶运算符优先级不低于输入的运算符的优先级，反复将其输出<br />
&#160;&#160;&#160;&#160;&#160;*&#160;&#160;&#160;&#160;&#160;b）把输入运算符压栈<br />
&#160;&#160;&#160;&#160;&#160;*&#160;5）输出栈内剩余元素<br />
&#160;&#160;&#160;&#160;&#160;*&#160;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&#160;in<br />
&#160;&#160;&#160;&#160;&#160;*&#160;</span><span style="color: #808080; ">@return</span><span style="color: #008000; "><br />
&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;String&#160;transInfixToPosfix(String&#160;in)<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">char</span><span style="color: #000000; ">[]&#160;cin</span><span style="color: #000000; ">=</span><span style="color: #000000; ">in.toCharArray();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;StringBuffer&#160;buffer</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;StringBuffer();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cin.length;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Item&#160;newItem</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;Item();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.opPriority</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.ops</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">false</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">switch</span><span style="color: #000000; ">(cin[i])<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">case</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">+</span><span style="color: #000000; ">'</span><span style="color: #000000; ">:<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.opPriority</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.ops</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">true</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.opVal</span><span style="color: #000000; ">=</span><span style="color: #000000; ">'</span><span style="color: #000000; ">+</span><span style="color: #000000; ">'</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;doOps(buffer,&#160;newItem);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">case</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">-</span><span style="color: #000000; ">'</span><span style="color: #000000; ">:<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.opPriority</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.ops</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">true</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.opVal</span><span style="color: #000000; ">=</span><span style="color: #000000; ">'</span><span style="color: #000000; ">-</span><span style="color: #000000; ">'</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;doOps(buffer,&#160;newItem);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">case</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">*</span><span style="color: #000000; ">'</span><span style="color: #000000; ">:<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.opPriority</span><span style="color: #000000; ">=</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.ops</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">true</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.opVal</span><span style="color: #000000; ">=</span><span style="color: #000000; ">'</span><span style="color: #000000; ">*</span><span style="color: #000000; ">'</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;doOps(buffer,&#160;newItem);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">case</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">/</span><span style="color: #000000; ">'</span><span style="color: #000000; ">:<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.opPriority</span><span style="color: #000000; ">=</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.ops</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">true</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.opVal</span><span style="color: #000000; ">=</span><span style="color: #000000; ">'</span><span style="color: #000000; ">/</span><span style="color: #000000; ">'</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;doOps(buffer,&#160;newItem);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">case</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">:<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.ops</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">true</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.opVal</span><span style="color: #000000; ">=</span><span style="color: #000000; ">'</span><span style="color: #000000; ">(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;opStack.push(newItem);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">case</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)</span><span style="color: #000000; ">'</span><span style="color: #000000; ">:<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">boolean</span><span style="color: #000000; ">&#160;meetClose</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">false</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">opStack.isEmpty())<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Item&#160;item</span><span style="color: #000000; ">=</span><span style="color: #000000; ">opStack.peek();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(item.ops</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">item.opVal</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">'</span><span style="color: #000000; ">(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;calcStack.add(item);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;opStack.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;buffer.append(item.opVal);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(item.ops)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;opStack.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;meetClose</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">true</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">meetClose)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">throw</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;RuntimeException();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">default</span><span style="color: #000000; ">:<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(;j</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cin.length</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">cin[j]</span><span style="color: #000000; ">>=</span><span style="color: #000000; ">'</span><span style="color: #000000; ">0</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">cin[j]</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">'</span><span style="color: #000000; ">9</span><span style="color: #000000; ">'</span><span style="color: #000000; ">;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(j</span><span style="color: #000000; ">==</span><span style="color: #000000; ">i)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">throw</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;RuntimeException(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">wrong&#160;input<img alt="" src="http://www.blogjava.net/Images/dot.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " />.</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.ops</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">false</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newItem.value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">Integer.parseInt(</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;String(cin,i,j</span><span style="color: #000000; ">-</span><span style="color: #000000; ">i));<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;buffer.append(newItem.value);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;calcStack.add(newItem);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">j</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">opStack.isEmpty())<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Item&#160;item</span><span style="color: #000000; ">=</span><span style="color: #000000; ">opStack.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;calcStack.add(item);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;buffer.append(item.opVal);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&#160;buffer.toString();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;}<br />
<br />
<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;doOps(StringBuffer&#160;buffer,&#160;Item&#160;newItem)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">opStack.isEmpty())<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Item&#160;item</span><span style="color: #000000; ">=</span><span style="color: #000000; ">opStack.peek();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(item.opVal</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">'</span><span style="color: #000000; ">(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">item.opPriority</span><span style="color: #000000; ">>=</span><span style="color: #000000; ">newItem.opPriority)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;calcStack.add(item);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;opStack.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;buffer.append(item.opVal);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;opStack.push(newItem);<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;&#160;&#160;&#160;&#160;*&#160;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&#160;args<br />
&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;main(String[]&#160;args)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Caculator&#160;calc</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;Caculator();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">1+2*3+7-(4/2+8)/5=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">calc.transInfixToPosfix(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">1+2*3+7-(4/2+8)/5</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">value&#160;is:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">calc.calc());<br />
<br />
&#160;&#160;&#160;&#160;}<br />
<br />
}<br />
</span></span>
<div><font  face="Verdana" size="3"><span  style="font-size: 13px; line-height: 19px;"><br />
</span></font></div>
<img src ="http://www.blogjava.net/1504/aggbug/265856.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:05 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265856.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>树的非递归遍历 粗糙版【转】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265855.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:03:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265855.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265855.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265855.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265855.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265855.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">转自：<font size="3">http://www.blogjava.net/javacap/archive/2007/10/11/152073.html</font><br />
<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
<br />
</span><span style="color: #0000ff; ">import</span><span style="color: #000000; ">&#160;java.util.Stack;<br />
</span><span style="color: #0000ff; ">import</span><span style="color: #000000; ">&#160;java.util.Vector;<br />
<br />
</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&#160;yovn<br />
&#160;*<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;TreeDemo&#160;{<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">interface</span><span style="color: #000000; ">&#160;NodeVistor<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;visit(BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;node);<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;BinaryTree</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;root;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;BinaryTree(BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;root)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">this</span><span style="color: #000000; ">.root</span><span style="color: #000000; ">=</span><span style="color: #000000; ">root;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">no&#160;recursion&#160;,pre-order</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;NLRVisit(NodeVistor&#160;visitor)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">root;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Stack</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;stack</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;Stack</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">>></span><span style="color: #000000; ">();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">stack.isEmpty()</span><span style="color: #000000; ">||</span><span style="color: #000000; ">pointer</span><span style="color: #000000; ">!=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(pointer</span><span style="color: #000000; ">!=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;visitor.visit(pointer);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(pointer.rightChild</span><span style="color: #000000; ">!=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;stack.push(pointer.rightChild);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pointer.leftChild;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">go&#160;to&#160;right&#160;child</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">stack.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">no&#160;recursion&#160;,&#160;in-order</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;LNRVisit(NodeVistor&#160;visitor)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">root;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Stack</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;stack</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;Stack</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">>></span><span style="color: #000000; ">();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">stack.isEmpty()</span><span style="color: #000000; ">||</span><span style="color: #000000; ">pointer</span><span style="color: #000000; ">!=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(pointer</span><span style="color: #000000; ">!=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;stack.push(pointer);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pointer.leftChild;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">no&#160;left&#160;child&#160;here,&#160;then&#160;visit&#160;root&#160;and&#160;then&#160;go&#160;to&#160;right&#160;child</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">stack.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;visitor.visit(pointer);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pointer.rightChild;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">no&#160;recursion&#160;,post-order,this&#160;one&#160;is&#160;the&#160;most&#160;complex&#160;one.<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">we&#160;need&#160;know&#160;from&#160;which&#160;side&#160;,it&#160;back(left&#160;or&#160;right)</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;LRNVisit(NodeVistor&#160;visitor)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(root</span><span style="color: #000000; ">==</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">root;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Stack</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;stack</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;Stack</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">>></span><span style="color: #000000; ">();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">true</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">mark&#160;left&#160;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(pointer</span><span style="color: #000000; ">!=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;stack.push(pointer);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pointer.leftChild;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">stack.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(pointer.visitedRight)</span><span style="color: #008000; ">//</span><span style="color: #008000; ">back&#160;from&#160;right&#160;child,&#160;so&#160;we&#160;can&#160;visit&#160;it&#160;now.</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;visitor.visit(pointer);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(stack.isEmpty())</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">stack.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer.visitedRight</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">true</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;stack.push(pointer);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pointer.rightChild;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;levelOrder(NodeVistor&#160;visitor)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(root</span><span style="color: #000000; ">==</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">root;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Vector</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;queue</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;Vector</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">>></span><span style="color: #000000; ">();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;queue.add(pointer);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">queue.isEmpty())<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;node</span><span style="color: #000000; ">=</span><span style="color: #000000; ">queue.remove(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;visitor.visit(node);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(node.leftChild</span><span style="color: #000000; ">!=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;queue.add(node.leftChild);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(node.rightChild</span><span style="color: #000000; ">!=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;queue.add(node.rightChild);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode(T&#160;data)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">this</span><span style="color: #000000; ">.data</span><span style="color: #000000; ">=</span><span style="color: #000000; ">data;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;T&#160;data;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">boolean</span><span style="color: #000000; ">&#160;visitedRight;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;leftChild;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;rightChild;<br />
&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;&#160;&#160;&#160;&#160;*&#160;<br />
&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;TreeDemo()&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;TODO&#160;Auto-generated&#160;constructor&#160;stub</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;&#160;&#160;&#160;&#160;*&#160;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&#160;args<br />
&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;main(String[]&#160;args)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;root</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">A</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;root.leftChild</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">B</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;root.rightChild</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">C</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;root.leftChild.leftChild</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">D</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;root.rightChild.leftChild</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">E</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;root.rightChild.rightChild</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">F</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;root.rightChild.leftChild.rightChild</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">G</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;root.rightChild.rightChild.leftChild</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">H</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;root.rightChild.rightChild.rightChild</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">I</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;NodeVistor&#160;visitor</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;NodeVistor()<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;@Override<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;visit(BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;node)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.print(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">'</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">node.data</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">'</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;};<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTree</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;tree</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTree</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(root);<br />
<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">pre-order&#160;visit</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tree.NLRVisit(visitor);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">in-order&#160;visit</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tree.LNRVisit(visitor);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">post-order&#160;visit</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tree.LRNVisit(visitor);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">level-order&#160;visit</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tree.levelOrder(visitor);<br />
&#160;&#160;&#160;&#160;}<br />
<br />
}<br />
</span></span>
<div><font  face="Verdana" size="3"><span  style="font-size: 13px; line-height: 19px;"><br />
</span></font></div>
<img src ="http://www.blogjava.net/1504/aggbug/265855.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:03 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265855.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>追加内容到文件末尾的几种常用方法[收藏]</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265853.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 13:59:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265853.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265853.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265853.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265853.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265853.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">
<ol class="dp-j">
    <li><span class="keyword">import&#160;java.io.BufferedWriter; &#160;&#160;</span></li>
    <li><span class="keyword">import</span>&#160;java.io.FileOutputStream; &#160;&#160;</li>
    <li><span class="keyword">import</span>&#160;java.io.FileWriter; &#160;&#160;</li>
    <li><span class="keyword">import</span>&#160;java.io.IOException; &#160;&#160;</li>
    <li><span class="keyword">import</span>&#160;java.io.OutputStreamWriter; &#160;&#160;</li>
    <li><span class="keyword">import</span>&#160;java.io.RandomAccessFile; &#160;&#160;</li>
    <li>&#160;&#160;</li>
    <li><span class="comment">/**&#160;</span>&#160;</li>
    <li><span class="comment">&#160;*&#160;描述：追加内容到文件末尾&#160;&#160;</span></li>
    <li><span class="comment">&#160;*&#160;@author&#160;Administrator&#160;&#160;</span></li>
    <li><span class="comment">&#160;*&#160;&#160;</span></li>
    <li><span class="comment">&#160;*/&#160;&#160;</span></li>
    <li><span class="keyword">public</span>&#160;<span class="keyword">class</span>&#160;WriteStreamAppend&#160;{ &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;<span class="comment">/**&#160;</span>&#160;</li>
    <li><span class="comment">&#160;&#160;&#160;&#160;&#160;*&#160;追加文件：使用FileOutputStream，在构造FileOutputStream时，把第二个参数设为true&#160;&#160;</span></li>
    <li><span class="comment">&#160;&#160;&#160;&#160;&#160;*&#160;&#160;&#160;</span></li>
    <li><span class="comment">&#160;&#160;&#160;&#160;&#160;*&#160;@param&#160;fileName&#160;&#160;</span></li>
    <li><span class="comment">&#160;&#160;&#160;&#160;&#160;*&#160;@param&#160;content&#160;&#160;</span></li>
    <li><span class="comment">&#160;&#160;&#160;&#160;&#160;*/&#160;&#160;</span></li>
    <li>&#160;&#160;&#160;&#160;<span class="keyword">public</span>&#160;<span class="keyword">static</span>&#160;<span class="keyword">void</span>&#160;method1(String&#160;file,&#160;String&#160;conent)&#160;{ &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BufferedWriter&#160;out&#160;=&#160;<span class="keyword">null</span>; &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span class="keyword">try</span>&#160;{ &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;out&#160;=&#160;<span class="keyword">new</span>&#160;BufferedWriter(<span class="keyword">new</span>&#160;OutputStreamWriter( &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span class="keyword">new</span>&#160;FileOutputStream(file,&#160;<span class="keyword">true</span>))); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;out.write(conent); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;<span class="keyword">catch</span>&#160;(Exception&#160;e)&#160;{ &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;e.printStackTrace(); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;<span class="keyword">finally</span>&#160;{ &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span class="keyword">try</span>&#160;{ &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;out.close(); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;<span class="keyword">catch</span>&#160;(IOException&#160;e)&#160;{ &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;e.printStackTrace(); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;} &#160;&#160;</li>
    <li>&#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;<span class="comment">/**&#160;</span>&#160;</li>
    <li><span class="comment">&#160;&#160;&#160;&#160;&#160;*&#160;追加文件：使用FileWriter&#160;&#160;</span></li>
    <li><span class="comment">&#160;&#160;&#160;&#160;&#160;*&#160;&#160;&#160;</span></li>
    <li><span class="comment">&#160;&#160;&#160;&#160;&#160;*&#160;@param&#160;fileName&#160;&#160;</span></li>
    <li><span class="comment">&#160;&#160;&#160;&#160;&#160;*&#160;@param&#160;content&#160;&#160;</span></li>
    <li><span class="comment">&#160;&#160;&#160;&#160;&#160;*/&#160;&#160;</span></li>
    <li>&#160;&#160;&#160;&#160;<span class="keyword">public</span>&#160;<span class="keyword">static</span>&#160;<span class="keyword">void</span>&#160;method2(String&#160;fileName,&#160;String&#160;content)&#160;{ &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span class="keyword">try</span>&#160;{ &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span class="comment">//&#160;打开一个写文件器，构造函数中的第二个参数true表示以追加形式写文件&#160;</span>&#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;FileWriter&#160;writer&#160;=&#160;<span class="keyword">new</span>&#160;FileWriter(fileName,&#160;<span class="keyword">true</span>); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;writer.write(content); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;writer.close(); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;<span class="keyword">catch</span>&#160;(IOException&#160;e)&#160;{ &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;e.printStackTrace(); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;} &#160;&#160;</li>
    <li>&#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;<span class="comment">/**&#160;</span>&#160;</li>
    <li><span class="comment">&#160;&#160;&#160;&#160;&#160;*&#160;追加文件：使用RandomAccessFile&#160;&#160;</span></li>
    <li><span class="comment">&#160;&#160;&#160;&#160;&#160;*&#160;&#160;&#160;</span></li>
    <li><span class="comment">&#160;&#160;&#160;&#160;&#160;*&#160;@param&#160;fileName&#160;&#160;</span></li>
    <li><span class="comment">&#160;&#160;&#160;&#160;&#160;*&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;文件名&#160;&#160;</span></li>
    <li><span class="comment">&#160;&#160;&#160;&#160;&#160;*&#160;@param&#160;content&#160;&#160;</span></li>
    <li><span class="comment">&#160;&#160;&#160;&#160;&#160;*&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;追加的内容&#160;&#160;</span></li>
    <li><span class="comment">&#160;&#160;&#160;&#160;&#160;*/&#160;&#160;</span></li>
    <li>&#160;&#160;&#160;&#160;<span class="keyword">public</span>&#160;<span class="keyword">static</span>&#160;<span class="keyword">void</span>&#160;method3(String&#160;fileName,&#160;String&#160;content)&#160;{ &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span class="keyword">try</span>&#160;{ &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span class="comment">//&#160;打开一个随机访问文件流，按读写方式&#160;</span>&#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;RandomAccessFile&#160;randomFile&#160;=&#160;<span class="keyword">new</span>&#160;RandomAccessFile(fileName,&#160;<span class="string">"rw"</span>); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span class="comment">//&#160;文件长度，字节数&#160;</span>&#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span class="keyword">long</span>&#160;fileLength&#160;=&#160;randomFile.length(); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span class="comment">//&#160;将写文件指针移到文件尾。&#160;</span>&#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;randomFile.seek(fileLength); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;randomFile.writeBytes(content); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;randomFile.close(); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;<span class="keyword">catch</span>&#160;(IOException&#160;e)&#160;{ &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;e.printStackTrace(); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;} &#160;&#160;</li>
    <li>&#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;<span class="keyword">public</span>&#160;<span class="keyword">static</span>&#160;<span class="keyword">void</span>&#160;main(String[]&#160;args)&#160;{ &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(<span class="string">"start"</span>); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;method1(<span class="string">"c:/test.txt"</span>,&#160;<span class="string">"追加到文件的末尾"</span>); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(<span class="string">"end"</span>); &#160;&#160;</li>
    <li>&#160;&#160;&#160;&#160;} &#160;&#160;</li>
    <li>&#160;&#160;</li>
    <li>} &#160;</li>
</ol>
</span>
<img src ="http://www.blogjava.net/1504/aggbug/265853.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 21:59 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265853.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ant-build.xml打包应用程序【总结】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265851.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 13:57:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265851.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265851.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265851.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265851.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265851.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 弄了好久的ant打包终于明白了，贴出来大家分享。&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;project name="gpdi" basedir="." default="deploy"&gt;&nbsp;&lt;!-- Properties and Paths --&gt;&nbsp;&lt;property name="di...&nbsp;&nbsp;<a href='http://www.blogjava.net/1504/archive/2009/04/15/265851.html'>阅读全文</a><img src ="http://www.blogjava.net/1504/aggbug/265851.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 21:57 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265851.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate配置手册【转贴】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265664.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 01:29:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265664.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265664.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265664.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265664.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265664.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; "><font size="3">http://blog.csdn.net/tutugogo/archive/2006/05/17/742323.aspx</font><br />
<p>Hibernate.cfg.xml配置文件：<br />
&lt;?xml version="1.0" encoding="utf-8"?><br />
&lt;!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "hibernate-configuration-2.0.dtd"><br />
&lt;hibernate-configuration><br />
&#160;&#160;&#160; &lt;session-factory><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;!-- properties --><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;!-- jndi --><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="connection.datasource">java:comp/env/jdbc/quickstart&lt;/property><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="connection.provider_class">net.sf.hibernate.connection.DatasourceConnectionProvider&lt;/property><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="dialect">net.sf.hibernate.dialect.SQLServerDialect&lt;/property><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;!-- jdbc<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="connection.url">jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=cursor;DatabaseName=pubs&lt;/property><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver&lt;/property><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="connection.username">sa&lt;/property><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="connection.password">&lt;/property><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; --><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="jdbc.fetch_size">50&lt;/property>&lt;!-- 一次读的数据库记录数 --><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="jdbc.batch_size">30&lt;/property>&lt;!-- 设定对数据库进行批量删除 --><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="show_sql">true&lt;/property>&lt;!-- 将Hibernate发送给数据库的sql显示出来 --><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;!-- Mapping files --><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;mapping resource="cat.hbm.xml"/><br />
&#160;&#160;&#160; &lt;/session-factory><br />
&lt;/hibernate-configuration></p>
<br />
<p>数据库表主键的知识点：<br />
Generator 为每个 POJO 的实例提供唯一标识。一般情况，我们使用&#8220;native&#8221;。class 表示采用由生成器接口net.sf.hibernate.id.IdentifierGenerator 实现的某个实例，其中包括：</p>
<br />
<p>&#8220;assigned&#8221;<br />
主键由外部程序负责生成，在 save() 之前指定一个。</p>
<br />
<p>&#8220;hilo&#8221;<br />
通过hi/lo 算法实现的主键生成机制，需要额外的数据库表或字段提供高位值来源。</p>
<br />
<p>&#8220;seqhilo&#8221;<br />
与hilo 类似，通过hi/lo 算法实现的主键生成机制，需要数据库中的 Sequence，适用于支持 Sequence 的数据库，如Oracle。</p>
<br />
<p>&#8220;increment&#8221;<br />
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量，以保存着当前的最大值，之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是：不能在集群下使用。</p>
<br />
<p>&#8220;identity&#8221;<br />
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。</p>
<br />
<p>&#8220;sequence&#8221;<br />
采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。</p>
<br />
<p>&#8220;native&#8221;<br />
由 Hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。</p>
<br />
<p>&#8220;uuid.hex&#8221;<br />
由 Hibernate 基于128 位 UUID 算法 生成16 进制数值（编码后以长度32 的字符串表示）作为主键。</p>
<br />
<p>&#8220;uuid.string&#8221;<br />
与uuid.hex 类似，只是生成的主键未进行编码（长度16），不能应用在 PostgreSQL 数据库中。</p>
<br />
<p>&#8220;foreign&#8221;<br />
使用另外一个相关联的对象的标识符作为主键。</p>
<br />
<p>以下举例：<br />
1、指定参数的情况：<br />
&#160;&#160;&#160; &lt;id name="id" unsaved-value="0">&#160;<br />
&#160;&#160;&#160;&#160;&#160; &lt;generator class="sequence"><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;param name="sequence">SEQ_CHILD&lt;/param><br />
&#160;&#160;&#160;&#160;&#160; &lt;/generator><br />
&lt;/id><br />
使用的是sequence，适合oracle数据库；</p>
<br />
<p>2、对于sql server2000中的数据库子增字段,在配置文件使用下列方法实现：<br />
&lt;id name="id" type="long" unsaved-value="0"><br />
&#160;&#160;&#160;&#160; &lt;column name="id" sql-type="numeric" not-null="true" /><br />
&#160;&#160;&#160;&#160; &lt;generator class="identity" />&#160;<br />
&lt;/id><br />
这里主要是:identity:代表由sql server2000数据库自己提供子增字段.如果要hibernate自己提供,则用increment关键字来实现</p>
<br />
<p>3、如果表中的主键用字符串类型:可以用hibernate自己提供的方法实现主键唯一:<br />
&#160; &lt;id name="id" type="string" unsaved-value="null"><br />
&#160;&#160;&#160;&#160;&#160; &lt;column name="cid" sql-type="char(32)" not-null="true" /><br />
&#160;&#160;&#160;&#160;&#160; &lt;generator class="uuid.hex" /><br />
&#160; &lt;/id><br />
使用的是uuid.hex: 采用128位的算法来生成一个32位字符串。最通用的一种方式。适用于所有数据库。</p>
<br />
<p>重要的知识点:<br />
1. 如果有部门表,有员工表,员工表中有dep_id,则表部门类和员工类是one-to-many的关系:<br />
&#160;&#160; 可以使用:&#160; ( 在部门类department中使用下列)<br />
&#160;&#160; Department类:&#160;&#160;<br />
&#160;&#160;&#160;&#160; /**&#160; 部门的所有员工&#160;&#160; */<br />
&#160;&#160;&#160; private Set staffs = new TreeSet();<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160; xml的文件:<br />
&#160;&#160;&#160;&#160;&#160; &lt;set name="staffs" ><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;key column="dep_id"/><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;one-to-many class="hbp.sys.data.Staff"/><br />
&#160;&#160;&#160;&#160;&#160; &lt;/set><br />
&#160;&#160;&#160;&#160;&#160; 如果是list,需要用索引&lt;index> &lt;/index>,具体其中的含义,不是很明白.待以后研究<br />
&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;2. 如果部门要有一个负责人,即部门表(tb_department)中有一个字段:staff_id.<br />
&#160;&#160;&#160;&#160; 那么表示部门和负责人之间的关系是many-to-one的关系<br />
&#160;&#160;&#160;&#160; Department类:&#160;<br />
&#160;&#160;&#160;&#160;&#160; /** 部门负责人id */<br />
&#160;&#160;&#160; private Staff staff;<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160; xml 文件<br />
&#160;&#160;&#160;&#160; &lt;many-to-one name="staff" class="hbp.sys.data.Staff"&#160; column="staff_id"/>&#160;&#160;<br />
&#160;&#160;<br />
&#160;3. 多对多关系,一般我们是做一个中间关联表.我用角色和权限做了个例子,<br />
&#160;&#160;&#160;&#160;&#160; Right(id,name)&#160;&#160;&#160;&#160; Role(id,name)&#160;&#160; 中间表:tb_role_right(role_id,right_id)<br />
&#160;&#160;&#160;&#160;&#160; Right类中有一个Role的集合:private Set roles=new TreeSet();<br />
&#160;&#160;&#160;&#160;&#160; Role类中也有一个Right的集合:private Set rights=new TreeSet();<br />
&#160;&#160;&#160;&#160;&#160; 则两者是明显的多对多关系.使用many-to-many来实现;<br />
&#160;&#160;&#160;&#160;&#160; xml文件中<br />
&#160;&#160;&#160;&#160;&#160; right.hbm.xml:如下:<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;set name="roles" table="tb_role_right" cascade="all"><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;key column="right_id"/><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;many-to-many column="role_id" class="hbp.sys.data.Role"/><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/set>&#160;<br />
&#160;&#160;&#160;&#160;&#160; role.hbm.xml文件中类似:<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;set name="rights" table="tb_role_right" cascade="all"><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;key column="role_id"/><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;many-to-many column="right_id" class="hbp.sys.data.Right"/><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/set></p>
<br />
<p>4. 几个值得注意的问题:<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; a)在xml?映射文件中,写类的名字时一定用类的全名:即:包+类名如:(hbp.sys.data.Staff),这个错误使我费了半天劲.:(<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; b)我在写实现基本DAO操作时,写了<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; session.delete("from Right as right where right.id="+id);&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 程序死活报错,我折腾了半天,跟踪到底,才恍然大悟,hibernate在解析sql语句的时候把<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 其中的right,当成了数据库中的右连接("保留字"),唉,这种关键字,不能随便用啊,:)</p>
<br />
<p>5. hibernate中HQL语言的查询根据你的sql的不同而返回不同的对象类型.<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 如果你使用session.find(String hql)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 一般会返回一个List,如:from Staff staff;返回的是包含所有的员工对象的集合<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 如你的hql为:select count(*) from Staff staff;则返回的是一个Integer对象<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 如果你使用的hql为:select count(distinct staff.name),count(*) from Staff staff;则返回的是一个Object<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 即Object[],需要先把他转换成Object[],然后在取[0],[1].<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 这种设计我不知道hibernate是如何处理的,感觉既好也不好.好的是可以使用一个find获得任意查询<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 不好在于根据hql来处理返回结果,容易出错.</p>
</span>
<img src ="http://www.blogjava.net/1504/aggbug/265664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 09:29 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle: ORA-38029: 对象统计信息已锁定的解决办法</title><link>http://www.blogjava.net/1504/archive/2009/04/13/265319.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Mon, 13 Apr 2009 08:35:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/13/265319.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265319.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/13/265319.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265319.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265319.html</trackback:ping><description><![CDATA[&#160;&#160; &#160; [java] Caused by: java.sql.SQLException: ORA-38029: 对象统计信息已锁定
<div>
<div>SQL> begin</div>
<div>&#160;&#160;2 &#160;DBMS_STATS.UNLOCK_schema_STATS(user);</div>
<div>&#160;&#160;3 &#160;end;</div>
<div>&#160;&#160;4 &#160;/</div>
</div>
<img src ="http://www.blogjava.net/1504/aggbug/265319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-13 16:35 <a href="http://www.blogjava.net/1504/archive/2009/04/13/265319.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR+VML实时曲线[收藏]</title><link>http://www.blogjava.net/1504/archive/2009/03/13/259517.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Fri, 13 Mar 2009 05:26:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/03/13/259517.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/259517.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/03/13/259517.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/259517.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/259517.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://www.blogjava.net/awed/archive/2008/04/22/194794.html最近公司要求做一个WEB端的服务器实时流量利用率监控曲线！具体做法是后台采用SNMP4J采集服务器流量，前台采用DWR调用后台Bean得到数据，然后利用VML显示曲线。1、DWR配置，先把DWR.jar加入到WEB-INF/lib下。&nbsp;&nbsp;&n...&nbsp;&nbsp;<a href='http://www.blogjava.net/1504/archive/2009/03/13/259517.html'>阅读全文</a><img src ="http://www.blogjava.net/1504/aggbug/259517.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-03-13 13:26 <a href="http://www.blogjava.net/1504/archive/2009/03/13/259517.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>点击表头排序[整理总结]</title><link>http://www.blogjava.net/1504/archive/2009/02/22/256088.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Sun, 22 Feb 2009 11:25:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/02/22/256088.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/256088.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/02/22/256088.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/256088.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/256088.html</trackback:ping><description><![CDATA[<span style="font-size: 8pt;">【1】这个非常好用， </span>
<div><span style="font-size: 8pt;">&lt;head&gt;<br />
&lt;script type="text/javascript" src="sortabletable.js"&gt;&lt;/script&gt;<br />
&lt;link type="text/css" rel="StyleSheet" href="sortabletable.css" /&gt;</span></div>
<div><span style="font-size: 8pt;">&lt;/head&gt;</span></div>
<div><span style="font-size: 8pt;">在&lt;head&gt;&lt;/head&gt;之间加入</span></div>
<div><span style="font-size: 8pt;">【2】&lt;table class="sort-table" id="table-1" cellspacing="0"&gt;</span></div>
<div><span style="font-size: 8pt;">要排序的表中要加入 id="table-1"</span></div>
<div><span style="font-size: 8pt;">【3】&lt;thead&gt;<br />
&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;String&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td title="CaseInsensitiveString"&gt;String&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;Number&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;Date&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;No Sort&lt;/td&gt;<br />
&nbsp;&nbsp;&lt;/tr&gt;<br />
&lt;/thead&gt;</span></div>
<div><span style="font-size: 8pt;">点击的表头之间加入&lt;thead&gt;&lt;/thead&gt;</span></div>
<div><span style="font-size: 8pt;">剩下的之间加入&lt;tbody&gt;&lt;/tbody&gt;</span></div>
<div><span style="font-size: 8pt;">&lt;tbody&gt;<br />
&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;apple&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;Strawberry&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;45&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;2001-03-13&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;Item 0&lt;/td&gt;<br />
&nbsp;&nbsp;&lt;/tr&gt;<br />
&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;Banana&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;orange&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;7698&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;1789-07-14&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;Item 1&lt;/td&gt;<br />
&nbsp;&nbsp;&lt;/tr&gt;<br />
&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;orange&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;Banana&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;4546&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;1949-07-04&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;td&gt;Item 2&lt;/td&gt;<br />
&nbsp;&nbsp;&lt;/tr&gt;</span></div>
<div><span style="font-size: 8pt;">&nbsp;&lt;/tbody&gt;</span></div>
<div><span style="font-size: 8pt;">【4】</span></div>
<div><span style="font-size: 8pt;">&lt;/table&gt;</span></div>
<div><span style="font-size: 8pt;">&lt;script type="text/javascript"&gt;</span></div>
<div><span style="font-size: 8pt;">var st1 = new SortableTable(document.getElementById("table-1"),<br />
&nbsp;["String", "CaseInsensitiveString", "Number", "Date", "None"]);</span></div>
<div><span style="font-size: 8pt;">&lt;/script&gt;<br />
<br />
代码下载<a href="/Files/1504/sorts.rar">http://www.blogjava.net/Files/1504/sorts.rar</a><br />
</span></div>
<img src ="http://www.blogjava.net/1504/aggbug/256088.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-02-22 19:25 <a href="http://www.blogjava.net/1504/archive/2009/02/22/256088.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA四舍五入(小数点后保留两位数字)[自己总结]</title><link>http://www.blogjava.net/1504/archive/2009/02/22/256087.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Sun, 22 Feb 2009 11:23:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/02/22/256087.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/256087.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/02/22/256087.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/256087.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/256087.html</trackback:ping><description><![CDATA[<font size="3"><span style="font-size: 10pt;">public String getFourToFive(double score_type)<br />
&nbsp;{<br />
&nbsp;&nbsp;double bl=(Math.round(score_type/.01)*.01);<br />
&nbsp;&nbsp;String st=String.valueOf(bl);<br />
&nbsp; /**注意,这里用.作为分隔符是失效的,不知道为什么,所以采用替换的办法*/<br />
&nbsp;&nbsp;st=st.replace(".", "_");<br />
&nbsp;&nbsp;String []st_arr=st.split("_");<br />
&nbsp;&nbsp;String temp="";<br />
&nbsp;&nbsp;if(st_arr[1].length()&gt;2)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;temp=st_arr[1].substring(0, 2);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;else<br />
&nbsp;&nbsp;if(st_arr[1].length()&lt;2)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;temp=st_arr[1]+"0";<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;else<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;temp=st_arr[1];<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return st_arr[0]+"."+temp;<br />
&nbsp;}</span></font>
<img src ="http://www.blogjava.net/1504/aggbug/256087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-02-22 19:23 <a href="http://www.blogjava.net/1504/archive/2009/02/22/256087.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实际项目中用到的工厂模式[自己总结]</title><link>http://www.blogjava.net/1504/archive/2009/02/22/256086.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Sun, 22 Feb 2009 11:22:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/02/22/256086.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/256086.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/02/22/256086.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/256086.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/256086.html</trackback:ping><description><![CDATA[<p><span style="font-size: 10pt;">1.ExcelManagerFactory <br />
package com.factory;</span></p>
<p><span style="font-size: 10pt;">public class ExcelManagerFactory {<br />
&nbsp;&nbsp; private static String key = "key";<br />
&nbsp;&nbsp; private ExcelManagerFactory() {<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; private static ExcelManagerIf instance = null;<br />
&nbsp;&nbsp; public static ExcelManagerIf getInstance(){<br />
&nbsp;&nbsp;&nbsp; if(instance == null){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synchronized(key){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(instance == null){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; instance = new ExcelManagerImpl();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return instance;<br />
&nbsp;&nbsp; }<br />
}</span></p>
<p><span style="font-size: 10pt;">2.声明一个接口</span></p>
<p><span style="font-size: 10pt;">package com.factory;</span></p>
<p><span style="font-size: 10pt;">import java.io.InputStream;<br />
import java.util.HashMap;<br />
import java.util.LinkedHashMap;<br />
import java.util.List;</span></p>
<p><span style="font-size: 10pt;">import javax.servlet.http.HttpServletResponse;</span></p>
<p><span style="font-size: 10pt;">import com.gpdi.orm.object.ScoreRecordDetail;</span></p>
<p><span style="font-size: 10pt;">public interface ExcelManagerIf {<br />
&nbsp;<br />
&nbsp;public boolean export(HttpServletResponse response, List&lt;ScoreRecordDetail&gt; list,LinkedHashMap hashMap);<br />
&nbsp;/********************************************************************************************************/<br />
&nbsp;public boolean export1(HttpServletResponse response,List list,LinkedHashMap hashMap);<br />
&nbsp;/********************************************************************************************************/</span></p>
<p><span style="font-size: 10pt;">&nbsp;</span></p>
<p><span style="font-size: 10pt;">}<br />
3.实现接口的类</span></p>
<font size="3">
</font>
<p><font size="3"><br />
<span style="font-size: 10pt;">package com.factory;</span></font></p>
<p><span style="font-size: 10pt;"><font size="3">import java.io.IOException;</font></span></p>
<p><span style="font-size: 10pt;"><font size="3">&nbsp;</font></span></p>
<p><font size="3"><br />
<span style="font-size: 10pt;">public class ExcelManagerImpl implements ExcelManagerIf <br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public boolean export1(HttpServletResponse response, List list,LinkedHashMap hashMap) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //实现具体功能的代码实现<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}<br />
4.调用<br />
<font style="font-size: 10pt;" size="3">&nbsp; HttpServletResponse response</font>=null;<br />
<font style="font-size: 10pt;" size="3">&nbsp; LinkedHashMap hm = new LinkedHashMap();</font><br />
&nbsp; List list = Object.getList();<br />
&nbsp;&nbsp; ExcelManagerIf eem = ExcelManagerFactory.getInstance();<br />
&nbsp;&nbsp; /******************************************************************/<br />
&nbsp;&nbsp; eem.export(response, list,hm);</span></font></p>
<p><span style="font-size: 10pt;">&nbsp;</span></p>
<img src ="http://www.blogjava.net/1504/aggbug/256086.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-02-22 19:22 <a href="http://www.blogjava.net/1504/archive/2009/02/22/256086.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>