﻿<?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-(步步为营-Dokie)--非淡泊无以明志，非宁静无以致远-随笔分类-Algorithm</title><link>http://www.blogjava.net/jicheng687/category/47110.html</link><description>SET, Python, Java, DB, Arch</description><language>zh-cn</language><lastBuildDate>Tue, 14 Jun 2011 19:05:15 GMT</lastBuildDate><pubDate>Tue, 14 Jun 2011 19:05:15 GMT</pubDate><ttl>60</ttl><item><title>Trie Tree</title><link>http://www.blogjava.net/jicheng687/archive/2011/06/14/352301.html</link><dc:creator>步步为营</dc:creator><author>步步为营</author><pubDate>Tue, 14 Jun 2011 08:57:00 GMT</pubDate><guid>http://www.blogjava.net/jicheng687/archive/2011/06/14/352301.html</guid><wfw:comment>http://www.blogjava.net/jicheng687/comments/352301.html</wfw:comment><comments>http://www.blogjava.net/jicheng687/archive/2011/06/14/352301.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jicheng687/comments/commentRss/352301.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jicheng687/services/trackbacks/352301.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: #Trie Tree的基本特点<br>1）根节点不包含字符，除根节点外每个节点只包含一个字符 <br>2）从根节点到某一个节点，路径上经过的字符连接起来，为该节点对应的字符串<br><br>3）每个节点的所有子节点包含的字符串不相同<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/jicheng687/archive/2011/06/14/352301.html'>阅读全文</a><img src ="http://www.blogjava.net/jicheng687/aggbug/352301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jicheng687/" target="_blank">步步为营</a> 2011-06-14 16:57 <a href="http://www.blogjava.net/jicheng687/archive/2011/06/14/352301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Bloom Filter</title><link>http://www.blogjava.net/jicheng687/archive/2011/06/12/352158.html</link><dc:creator>步步为营</dc:creator><author>步步为营</author><pubDate>Sun, 12 Jun 2011 15:58:00 GMT</pubDate><guid>http://www.blogjava.net/jicheng687/archive/2011/06/12/352158.html</guid><wfw:comment>http://www.blogjava.net/jicheng687/comments/352158.html</wfw:comment><comments>http://www.blogjava.net/jicheng687/archive/2011/06/12/352158.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jicheng687/comments/commentRss/352158.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jicheng687/services/trackbacks/352158.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: The Bloom filter, conceived by Burton Howard Bloom in 1970, is a space-efficient probabilistic data structure that is used to test whether an element is a member of a set.False positivesare possible, but false negatives are not. Elements can be added to the set, but not removed (though this can be addressed with a counting filter). The more elements that are added to the set, the larger the probability of false positives<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/jicheng687/archive/2011/06/12/352158.html'>阅读全文</a><img src ="http://www.blogjava.net/jicheng687/aggbug/352158.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jicheng687/" target="_blank">步步为营</a> 2011-06-12 23:58 <a href="http://www.blogjava.net/jicheng687/archive/2011/06/12/352158.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 【编程珠现】-算法设计技术</title><link>http://www.blogjava.net/jicheng687/archive/2011/01/14/342968.html</link><dc:creator>步步为营</dc:creator><author>步步为营</author><pubDate>Fri, 14 Jan 2011 03:20:00 GMT</pubDate><guid>http://www.blogjava.net/jicheng687/archive/2011/01/14/342968.html</guid><wfw:comment>http://www.blogjava.net/jicheng687/comments/342968.html</wfw:comment><comments>http://www.blogjava.net/jicheng687/archive/2011/01/14/342968.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jicheng687/comments/commentRss/342968.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jicheng687/services/trackbacks/342968.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;【编程珠玑】第一部分的基础知识已经看完，比较有感触的有以下几点：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1）、数据决定程序结构：对不同的程序，选用最合适的数据结构，必要是可以借助数据库来解决问题<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2）、学会写伪代码：伪代码是思想的结晶，抛开算法的细节，抓住算法的本质思想。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第二部分是关于程序性能的讲解。在<font style="background-color: #cce8cf">算法设计技术</font>章节讲到了以下几个重要的技术：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1）、保存状态，避免重要计算：这也是动态规划所采用的思想，别浪费中间结果，它们很宝贵<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2）、将信息预处理至数据结构中：保存中间结果的一种方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3）、分治算法：算法课上第一个学习的算法，如：二分查找、Strassen矩阵乘法等等。核心思想在于把问题分解成简单的子问题，然后对子<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;4）、扫描算法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5）、累积：通常用于求前i个值的和<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6）、下界：许多问题要证明它的下界是多少<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下面是习题14的解答思想：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 描述：给定整数m、n和整数（实）数向量x[n]，请找到出现使总和x[i]+&#8230;&#8230;+x[i+m]最接近0的整数i( 0&lt;=i&lt;n-m)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解决思路：<span style="color: red">从i+1开始的长度为m+1的子向量等当前子向量减去x[i-1],再加上x[i+m]<br />
</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_31_467_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_467_Open_Text.style.display='none'; Codehighlighter1_31_467_Closed_Image.style.display='inline'; Codehighlighter1_31_467_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_31_467_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_31_467_Closed_Text.style.display='none'; Codehighlighter1_31_467_Open_Image.style.display='inline'; Codehighlighter1_31_467_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;alg(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;x,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;m&nbsp;,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_31_467_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_31_467_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;n&nbsp;)<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;start&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;subVal&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;sum&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br />
<img id="Codehighlighter1_142_160_Open_Image" onclick="this.style.display='none'; Codehighlighter1_142_160_Open_Text.style.display='none'; Codehighlighter1_142_160_Closed_Image.style.display='inline'; Codehighlighter1_142_160_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_142_160_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_142_160_Closed_Text.style.display='none'; Codehighlighter1_142_160_Open_Image.style.display='inline'; Codehighlighter1_142_160_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;m;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_142_160_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_142_160_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;x[i];<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;subVal&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;abs(sum);<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_213_373_Open_Image" onclick="this.style.display='none'; Codehighlighter1_213_373_Open_Text.style.display='none'; Codehighlighter1_213_373_Closed_Image.style.display='inline'; Codehighlighter1_213_373_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_213_373_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_213_373_Closed_Text.style.display='none'; Codehighlighter1_213_373_Open_Image.style.display='inline'; Codehighlighter1_213_373_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;n</span><span style="color: #000000">-</span><span style="color: #000000">m;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_213_373_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_213_373_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000">-=</span><span style="color: #000000">&nbsp;x[i</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">];<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;x[i</span><span style="color: #000000">+</span><span style="color: #000000">m];<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">sum&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;sum&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">endl;<br />
<img id="Codehighlighter1_304_370_Open_Image" onclick="this.style.display='none'; Codehighlighter1_304_370_Open_Text.style.display='none'; Codehighlighter1_304_370_Closed_Image.style.display='inline'; Codehighlighter1_304_370_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_304_370_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_304_370_Closed_Text.style.display='none'; Codehighlighter1_304_370_Open_Image.style.display='inline'; Codehighlighter1_304_370_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(abs(sum)&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;subVal)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_304_370_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_304_370_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">如果subVal比当前sum绝对值大</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subVal&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;abs(sum);<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">sum:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;endl;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">subVal:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;subVal&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;endl;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;start;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 原题中的向量为实数，核心算法还是一样的，只是浮点数比较的时候要注意下<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有兴趣的朋友欢迎一起讨论 ：） 
<img src ="http://www.blogjava.net/jicheng687/aggbug/342968.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jicheng687/" target="_blank">步步为营</a> 2011-01-14 11:20 <a href="http://www.blogjava.net/jicheng687/archive/2011/01/14/342968.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【编程珠玑】-啊哈！算法</title><link>http://www.blogjava.net/jicheng687/archive/2011/01/11/342756.html</link><dc:creator>步步为营</dc:creator><author>步步为营</author><pubDate>Tue, 11 Jan 2011 03:49:00 GMT</pubDate><guid>http://www.blogjava.net/jicheng687/archive/2011/01/11/342756.html</guid><wfw:comment>http://www.blogjava.net/jicheng687/comments/342756.html</wfw:comment><comments>http://www.blogjava.net/jicheng687/archive/2011/01/11/342756.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jicheng687/comments/commentRss/342756.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jicheng687/services/trackbacks/342756.html</trackback:ping><description><![CDATA[<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;二分搜索可以说是无处不在，应用它的前提是，对象有序且在某一范围之内。<br />
<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;灵机一动，经过许久的思考，得出的解决方案或许就是一些基本操作的组合，不是吗？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;求逆代码：把ab变成ba,可以有如下的方法：ab-&gt;a<sup>r</sup>b-&gt;a<sup>r</sup>b<sup>r</sup>-&gt;(a<sup>r</sup>b<sup>r</sup>)<sup>r</sup>-&gt;ba<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E.G. &nbsp;n元向量左移i个位置<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 73.64%; padding-right: 5px; height: 58px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #000000">reverse(</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;rotdist&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />reverse(rotdist,&nbsp;n</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />reverse (</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;n</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">);</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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;变位分词的应用，关键在于：选择标识和集中具有相同标识的单词<br />
<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;1）排序：产生有序输出，将相等的元素集中在一起<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2）二分搜索<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3）标识：当使用等价类定义时，定义一种标识使同类中每一项都具有相同的标识，而该类之外的其它项则没有该标识，这是很有用的<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4）问题的定义：用户的需求才是程序设计的根本<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5）问题解决者的观点：优秀的程序员有点懒，他们坐下来等待灵机一动的出现而不急于使用最开始的想法编程<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<img src ="http://www.blogjava.net/jicheng687/aggbug/342756.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jicheng687/" target="_blank">步步为营</a> 2011-01-11 11:49 <a href="http://www.blogjava.net/jicheng687/archive/2011/01/11/342756.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【编程珠玑】-开篇</title><link>http://www.blogjava.net/jicheng687/archive/2011/01/08/342570.html</link><dc:creator>步步为营</dc:creator><author>步步为营</author><pubDate>Sat, 08 Jan 2011 02:41:00 GMT</pubDate><guid>http://www.blogjava.net/jicheng687/archive/2011/01/08/342570.html</guid><wfw:comment>http://www.blogjava.net/jicheng687/comments/342570.html</wfw:comment><comments>http://www.blogjava.net/jicheng687/archive/2011/01/08/342570.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jicheng687/comments/commentRss/342570.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jicheng687/services/trackbacks/342570.html</trackback:ping><description><![CDATA[<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 昨天入手《</span><font style="background-color: #cce8cf"><span>编程珠玑》（第二版）一书，去年寒假已经把这书看了一大半，发现里面的一些算法和观点简单而富有哲理。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一、准确描述问题：程序员的主要问题与其说是技术问题，还不如说是心理问题，他不能解决问题，是因为他企图解决错误的问题。所以准确描述一个问题非常重要，实际中往往体现中需求文档的规范性和无异性中。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;二、位图或者向量表示集合<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1）、位图数据结构的实现<br />
&nbsp;&nbsp; </span>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;BITSPERWORD&nbsp;32</span></span><span style="color: #000000"><br />
<span><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></span><span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;SHIFT&nbsp;5</span></span><span style="color: #000000"><br />
<span><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></span><span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;MASK&nbsp;0x1F</span></span><span style="color: #000000"><br />
<span><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></span><span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;N&nbsp;10000000</span></span><span style="color: #000000"><br />
<span><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></span><span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;a[</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;N</span><span style="color: #000000">/</span></span><span><span style="color: #000000">BITSPERWORD];<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
<img id="Codehighlighter1_120_162_Open_Image" onclick="this.style.display='none'; Codehighlighter1_120_162_Open_Text.style.display='none'; Codehighlighter1_120_162_Closed_Image.style.display='inline'; Codehighlighter1_120_162_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_120_162_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_120_162_Closed_Text.style.display='none'; Codehighlighter1_120_162_Open_Image.style.display='inline'; Codehighlighter1_120_162_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_120_162_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_120_162_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[i</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">SHIFT]&nbsp;</span><span style="color: #000000">|=</span><span style="color: #000000">&nbsp;&nbsp;(</span><span style="color: #000000">1</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">(i&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;MASK));&nbsp;}</span></span></span><span style="color: #000000"><br />
<span><img id="Codehighlighter1_180_222_Open_Image" onclick="this.style.display='none'; Codehighlighter1_180_222_Open_Text.style.display='none'; Codehighlighter1_180_222_Closed_Image.style.display='inline'; Codehighlighter1_180_222_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_180_222_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_180_222_Closed_Text.style.display='none'; Codehighlighter1_180_222_Open_Image.style.display='inline'; Codehighlighter1_180_222_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /></span></span><span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;clr(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_180_222_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_180_222_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[i</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">SHIFT]&nbsp;</span><span style="color: #000000">&amp;=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">(</span><span style="color: #000000">1</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">(i&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;MASK));&nbsp;}</span></span></span><span style="color: #000000"><br />
<span><img id="Codehighlighter1_240_282_Open_Image" onclick="this.style.display='none'; Codehighlighter1_240_282_Open_Text.style.display='none'; Codehighlighter1_240_282_Closed_Image.style.display='inline'; Codehighlighter1_240_282_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_240_282_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_240_282_Closed_Text.style.display='none'; Codehighlighter1_240_282_Open_Image.style.display='inline'; Codehighlighter1_240_282_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /></span></span><span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;&nbsp;test(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_240_282_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_240_282_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;a[i</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">SHIFT]&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;(</span><span style="color: #000000">1</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">(i&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;MASK));&nbsp;}</span></span></span></div>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2）、位图可以用于排序和和统计当中，合理应用往往可以得到时间-空间折中与双赢<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 三、原理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1）、正确的问题：明确了问题，这场战役就成功了90%<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2）、位图数据结构<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3）、多趟算法：这些算法多趟读入其输入数据，每次完成一步<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4）、时间-空间折中与双赢<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5）、简单的设计：设计者确定其设计已经达到了完美的标准不是不能增加任何东西，而是不能再减少任何东西<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6）、程序的设计阶段<br />
</span></font>
<img src ="http://www.blogjava.net/jicheng687/aggbug/342570.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jicheng687/" target="_blank">步步为营</a> 2011-01-08 10:41 <a href="http://www.blogjava.net/jicheng687/archive/2011/01/08/342570.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>K-Menas算法</title><link>http://www.blogjava.net/jicheng687/archive/2011/01/04/342263.html</link><dc:creator>步步为营</dc:creator><author>步步为营</author><pubDate>Tue, 04 Jan 2011 03:05:00 GMT</pubDate><guid>http://www.blogjava.net/jicheng687/archive/2011/01/04/342263.html</guid><wfw:comment>http://www.blogjava.net/jicheng687/comments/342263.html</wfw:comment><comments>http://www.blogjava.net/jicheng687/archive/2011/01/04/342263.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jicheng687/comments/commentRss/342263.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jicheng687/services/trackbacks/342263.html</trackback:ping><description><![CDATA[<br />
一、算法简介<br />
<span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="line-height: 24px; font-family: arial, 宋体, sans-serif; font-size: 14px" class="Apple-style-span">　k-means 算法接受输入量 k ；然后将n个数据对象划分为 k个<a style="color: rgb(19,110,194); text-decoration: underline" href="http://baike.baidu.com/view/31801.htm" target="_blank">聚类</a>以便使得所获得的聚类满足：同一聚类中的对象相似度较高；而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个&#8220;中心对象&#8221;（引力中心）来进行计算的。</span></span><br />
<br />
<br />
二、伪码<br />
<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">算法：K</span><span style="color: #000000">-</span><span style="color: #000000">means。<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />输入：<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;K：聚类的数目<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;D：包含n个对象的数据集<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />输出：K个聚类的集合<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />方法：<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />（</span><span style="color: #000000">1</span><span style="color: #000000">）&nbsp;&nbsp;&nbsp;&nbsp;从D中任意选择K个对象作为初始聚类中心；<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />（</span><span style="color: #000000">2</span><span style="color: #000000">）&nbsp;&nbsp;&nbsp;&nbsp;repeat<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;根据聚类中对象的均值，将每个对象（再）指派到最相似的聚类；<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;更新聚类均值，即计算每个聚类中对象的均值；<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />（</span><span style="color: #000000">3</span><span style="color: #000000">）&nbsp;&nbsp;&nbsp;&nbsp;until聚类不再发生变化<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<br />
算法复杂度为: O(nkt).其中t为迭代次数<br />
<br />
三、准确性评价<br />
<br />
<br />
<br />
四、应用和扩展 
<img src ="http://www.blogjava.net/jicheng687/aggbug/342263.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jicheng687/" target="_blank">步步为营</a> 2011-01-04 11:05 <a href="http://www.blogjava.net/jicheng687/archive/2011/01/04/342263.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>打印全排列</title><link>http://www.blogjava.net/jicheng687/archive/2010/11/21/338576.html</link><dc:creator>步步为营</dc:creator><author>步步为营</author><pubDate>Sat, 20 Nov 2010 16:27:00 GMT</pubDate><guid>http://www.blogjava.net/jicheng687/archive/2010/11/21/338576.html</guid><wfw:comment>http://www.blogjava.net/jicheng687/comments/338576.html</wfw:comment><comments>http://www.blogjava.net/jicheng687/archive/2010/11/21/338576.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jicheng687/comments/commentRss/338576.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jicheng687/services/trackbacks/338576.html</trackback:ping><description><![CDATA[<span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 21px; font-family: verdana, sans-serif; font-size: 14px" class="Apple-style-span"><span style="line-height: 19px; font-size: small">
<p><font style="background-color: #cce8cf">在《组合数学》里面全排列是一个常见的问题。<br />
描述如下：有x1,x2,x3,...xn,共n个元素，打印出它的全排列。<br />
如：1 ， 2 ， 3<br />
有6种排列： 123， 132， 213， 231， 312， 321<br />
思路： 元素的全排列，其实就是遍列全部元素组成的一个排列树，用回溯法可以得到比较好的效率,特别是空间上，，由于遍列整棵树，时间复杂度为O（n!)<br />
<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #008000">/**</span><span style="color: #008000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #008000">&nbsp;*&nbsp;&nbsp;打印出list[k,m]的全排列&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #008000">&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;list&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #008000">&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;k&nbsp;&nbsp;beginning&nbsp;index&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #008000">&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;m&nbsp;&nbsp;finishing&nbsp;index&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #008000">&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;getPerm(Object[]&nbsp;list,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;k&nbsp;,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;m){&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(&nbsp;k&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;m){&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;m;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;&nbsp;<br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(list[i]);&nbsp;&nbsp;<br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println();&nbsp;&nbsp;<br />
</span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;k;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;m;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">){&nbsp;&nbsp;<br />
</span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyMath.swap(list,&nbsp;i,&nbsp;k);&nbsp;&nbsp;<br />
</span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getPerm(list,&nbsp;k</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;m);&nbsp;&nbsp;<br />
</span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyMath.swap(list,&nbsp;i,&nbsp;k);&nbsp;&nbsp;<br />
</span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />
</span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">}&nbsp;&nbsp;</span></div>
<p><br />
</font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;引申：类似此种算法的还有就是打印字符串（如：ABC）的真子集，其核心算法还是一样的</p>
</span>
<p style="padding-bottom: 0px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; color: rgb(68,68,68); padding-top: 0px">&nbsp;</p>
</span></span>
<img src ="http://www.blogjava.net/jicheng687/aggbug/338576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jicheng687/" target="_blank">步步为营</a> 2010-11-21 00:27 <a href="http://www.blogjava.net/jicheng687/archive/2010/11/21/338576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>