﻿<?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>C++博客-&lt;H1&gt;&lt;font color=orange&gt;JonsenElizee&lt;/font&gt;&lt;/H1&gt;-随笔分类-Data Structures &amp; Algorithms</title><link>http://www.cppblog.com/JonsenElizee/category/15105.html</link><description>Software Developing Blog
&lt;BR&gt;
&lt;BR&gt;
"An idea is fragile . It can be killed by a scornful smile or a yawn .It can be mound down by irony and scared to death by a cold look." 
&lt;BR&gt; 
"Most cultures throughout human history have not liked creative individuals .They ignore them or kill them.It is a very efficient way of stopping creativity."  
&lt;BR&gt; 
&lt;BR&gt;
------Advertising boss Charles Browe and Howard Gardner ,professor at Harvard </description><language>zh-cn</language><lastBuildDate>Thu, 25 Nov 2010 20:52:41 GMT</lastBuildDate><pubDate>Thu, 25 Nov 2010 20:52:41 GMT</pubDate><ttl>60</ttl><item><title>How Many Times Is Needed to Pick Out The Bad Ball</title><link>http://www.cppblog.com/JonsenElizee/archive/2010/10/29/131709.html</link><dc:creator>JonsenElizee</dc:creator><author>JonsenElizee</author><pubDate>Fri, 29 Oct 2010 01:21:00 GMT</pubDate><guid>http://www.cppblog.com/JonsenElizee/archive/2010/10/29/131709.html</guid><wfw:comment>http://www.cppblog.com/JonsenElizee/comments/131709.html</wfw:comment><comments>http://www.cppblog.com/JonsenElizee/archive/2010/10/29/131709.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/JonsenElizee/comments/commentRss/131709.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/JonsenElizee/services/trackbacks/131709.html</trackback:ping><description><![CDATA[There are y ball with a bad one between them.<br>all the ball are the same look.<br>now, give you a balance, how many times do you need to pick out the bad one?<br><br>My resolution: need Ball(y) times to pick out the bad one.<br><br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdio.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">math.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;Ball(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;y)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(y&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">3</span><span style="color: #000000;">)&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">+</span><span style="color: #000000;">Ball(&nbsp;y</span><span style="color: #000000;">/</span><span style="color: #000000;">3</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">3</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;y&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;y</span><span style="color: #000000;">/</span><span style="color: #000000;">3</span><span style="color: #000000;">&nbsp;:&nbsp;y</span><span style="color: #000000;">/</span><span style="color: #000000;">3</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;);<br>}<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&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;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">200</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">Ball(%3d)=%d&nbsp;\t</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;i,&nbsp;Ball(i));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(i</span><span style="color: #000000;">%</span><span style="color: #000000;">5</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;puts(</span><span style="color: #000000;">""</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;puts(</span><span style="color: #000000;">""</span><span style="color: #000000;">);<br>&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>}<br></span></div>
<br><br><br><img src ="http://www.cppblog.com/JonsenElizee/aggbug/131709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/JonsenElizee/" target="_blank">JonsenElizee</a> 2010-10-29 09:21 <a href="http://www.cppblog.com/JonsenElizee/archive/2010/10/29/131709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Find Median(s) in Billion data with Memory 4M</title><link>http://www.cppblog.com/JonsenElizee/archive/2010/10/28/131644.html</link><dc:creator>JonsenElizee</dc:creator><author>JonsenElizee</author><pubDate>Thu, 28 Oct 2010 08:39:00 GMT</pubDate><guid>http://www.cppblog.com/JonsenElizee/archive/2010/10/28/131644.html</guid><wfw:comment>http://www.cppblog.com/JonsenElizee/comments/131644.html</wfw:comment><comments>http://www.cppblog.com/JonsenElizee/archive/2010/10/28/131644.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/JonsenElizee/comments/commentRss/131644.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/JonsenElizee/services/trackbacks/131644.html</trackback:ping><description><![CDATA[Issue:<br>内存只能容纳100W个数,<br>现在有1亿数,混序,<br>然后求这一亿个数的中位数,<br>中位数(就是一个有序数组的中间数字,数组长度为偶数就是两个,奇数则只有一个)
<br><br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">/*</span><span style="color: #008000;">***************************************************************************</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;this&nbsp;program&nbsp;should&nbsp;find&nbsp;out&nbsp;the&nbsp;median(s)&nbsp;in&nbsp;N(logN)/(logB)&nbsp;no&nbsp;matter&nbsp;there<br>/*&nbsp;is&nbsp;duplicated&nbsp;data&nbsp;or&nbsp;not.<br>/*<br>/*&nbsp;with&nbsp;memory&nbsp;limitation:&nbsp;4MB&nbsp;memory&nbsp;available. in fact, it can work on 1MB.<br>/*&nbsp;I&nbsp;would&nbsp;like&nbsp;to&nbsp;express&nbsp;the&nbsp;idea&nbsp;with&nbsp;code.<br>/*&nbsp;here&nbsp;is&nbsp;just&nbsp;the&nbsp;pseudocode&nbsp;with&nbsp;out&nbsp;any&nbsp;optimization&nbsp;for&nbsp;easy&nbsp;understanding.<br>/*&nbsp;<br>/*&nbsp;maybe,&nbsp;there&nbsp;is&nbsp;no&nbsp;need&nbsp;to&nbsp;check&nbsp;sum&nbsp;==&nbsp;N/2&nbsp;or&nbsp;N/2+1,&nbsp;but&nbsp;this&nbsp;will&nbsp;get&nbsp;the&nbsp;<br>/*&nbsp;median(s)&nbsp;as&nbsp;soon&nbsp;as&nbsp;possible&nbsp;with&nbsp;out&nbsp;more&nbsp;recursive&nbsp;invoking.<br>/*<br>/*&nbsp;sorry&nbsp;for&nbsp;any&nbsp;logical&nbsp;problem.&nbsp;please&nbsp;let&nbsp;me&nbsp;know&nbsp;if&nbsp;you&nbsp;found&nbsp;any.<br>/****************************************************************************</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br><br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;N&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">100000000</span><span style="color: #000000;">;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;total&nbsp;data&nbsp;number&nbsp;is&nbsp;N</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;B&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1000000</span><span style="color: #000000;">;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;number&nbsp;of&nbsp;buckets.</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;min,&nbsp;max;<br>scan&nbsp;data&nbsp;from&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;to&nbsp;N</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">get</span><span style="color: #000000;">&nbsp;min&nbsp;and&nbsp;max;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;O(N);</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>// num the data number that is less than min<br>// min the minimum data in the target data range to find median(s)<br>// max the maximum data in the target data range to find median(s)<br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;find_median(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;num</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;min,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;max)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(min&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;max)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(N</span><span style="color: #000000;">%</span><span style="color: #000000;">2</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;medians&nbsp;are&nbsp;min&nbsp;and&nbsp;max;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;print&nbsp;median&nbsp;</span><span style="color: #0000ff;">is</span><span style="color: #000000;">&nbsp;min;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;show&nbsp;you&nbsp;the&nbsp;result</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;exit</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"> count&nbsp;all&nbsp;the&nbsp;data&nbsp;in&nbsp;O(N)</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;m&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;max</span><span style="color: #000000;">-</span><span style="color: #000000;">min&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;B&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;"> ((max-min)%B ? (max-min)/B + 1 : (max-min)/B)</span><span style="color: #000000;"> :&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;cnt[B]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{</span><span style="color: #000000;">0</span><span style="color: #000000;">};&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;count&nbsp;the&nbsp;data&nbsp;read.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">EOF)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;data&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;read_data()</span><span style="color: #000000;">-</span><span style="color: #000000;">min;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // count data in this range [min, max]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // data/m will get the position of data to increase the cnt[?] value<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(data&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;min&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;data&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;max)&nbsp;cnt[data</span><span style="color: #000000;">/</span><span style="color: #000000;">m]</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&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;num,&nbsp;median_1,&nbsp;median_2,&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;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(sum&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;N</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">)&nbsp;sum&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;cnt[i</span><span style="color: #000000;">++</span><span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000;">--</span><span style="color: #000000;">;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;median&nbsp;is&nbsp;in&nbsp;the&nbsp;range&nbsp;of&nbsp;[i*m,&nbsp;(i+1)*m-1]</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;get&nbsp;median(s)&nbsp;when&nbsp;sum&nbsp;is&nbsp;N/2&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(sum&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;N</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(N</span><span style="color: #000000;">%</span><span style="color: #000000;">2</span><span style="color: #000000;">)&nbsp;{&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;N&nbsp;is&nbsp;even&nbsp;and&nbsp;there&nbsp;are&nbsp;two&nbsp;medians.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;median_1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(i</span><span style="color: #000000;">+</span><span style="color: #000000;">2</span><span style="color: #000000;">)</span><span style="color: #000000;">*</span><span style="color: #000000;">m</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;median_2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">*</span><span style="color: #000000;">m;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">EOF)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;data&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;read_data()</span><span style="color: #000000;">-</span><span style="color: #000000;">min;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(data</span><span style="color: #000000;">/</span><span style="color: #000000;">m&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;i)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;median_2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(data&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;median_2&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;data&nbsp;:&nbsp;median_2);<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;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(data</span><span style="color: #000000;">/</span><span style="color: #000000;">m&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;median_1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(data&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;median_1&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;data&nbsp;:&nbsp;median_1);<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;&nbsp;&nbsp;&nbsp;&nbsp;pintf&nbsp;medians&nbsp;are&nbsp;median_1&nbsp;and&nbsp;median_2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;N&nbsp;is&nbsp;an&nbsp;odd&nbsp;number&nbsp;and&nbsp;there&nbsp;is&nbsp;one&nbsp;median.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; median_1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(i</span><span style="color: #000000;">+</span><span style="color: #000000;">2</span><span style="color: #000000;">)</span><span style="color: #000000;">*</span><span style="color: #000000;">m</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">while</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">EOF)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;data&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;read_data();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;">(data</span><span style="color: #000000;">/</span><span style="color: #000000;">m&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;median_1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(data&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;median_1&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;data&nbsp;:&nbsp;median_1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; print&nbsp;median&nbsp;</span><span style="color: #0000ff;">is</span><span style="color: #000000;">&nbsp;median_1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;get&nbsp;median(s)&nbsp;when&nbsp;sum&nbsp;is&nbsp;N/2+1&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(sum&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;N</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;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(N</span><span style="color: #000000;">%</span><span style="color: #000000;">2</span><span style="color: #000000;">)&nbsp;{&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;N&nbsp;is&nbsp;even&nbsp;and&nbsp;there&nbsp;are&nbsp;two&nbsp;medians.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;median_1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">*</span><span style="color: #000000;">m;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;median_2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">*</span><span style="color: #000000;">m;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">EOF)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;data&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;read_data();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(data</span><span style="color: #000000;">/</span><span style="color: #000000;">m&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;i)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;median_1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;max;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;median_2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(data&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;median_2&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;data&nbsp;:&nbsp;median_2);<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;&nbsp;&nbsp;&nbsp;&nbsp;pintf&nbsp;medians&nbsp;are&nbsp;median_1&nbsp;and&nbsp;median_2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; median_2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">*</span><span style="color: #000000;">m;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;get&nbsp;(N/2+1)th&nbsp;data.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff;">while</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">EOF)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;data&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;read_data();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;">(data</span><span style="color: #000000;">/</span><span style="color: #000000;">m&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;i)&nbsp;median_2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(data&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;median_2&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;data&nbsp;:&nbsp;median_2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; print&nbsp;median&nbsp;</span><span style="color: #0000ff;">is</span><span style="color: #000000;">&nbsp;median_2;<br>&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; </span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"> if sum is not N/2 or (N/2 + 1), recursively&nbsp;to&nbsp;find&nbsp;out&nbsp;the&nbsp;median(s)</span><span style="color: #008000;"></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;min&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(i</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;">m</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;max&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">*</span><span style="color: #000000;">m;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;get&nbsp;min&nbsp;and&nbsp;max&nbsp;for&nbsp;next&nbsp;processing</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">EOF)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;data&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;read_data()</span><span style="color: #000000;">-</span><span style="color: #000000;">min;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(data</span><span style="color: #000000;">/</span><span style="color: #000000;">m&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;i)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(data&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;min&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;data&nbsp;:&nbsp;min);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(data&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;max&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;data&nbsp;:&nbsp;max);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;find_median(sum,&nbsp;min,&nbsp;max);<br>}<br><br></span></div>
<br>  <img src ="http://www.cppblog.com/JonsenElizee/aggbug/131644.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/JonsenElizee/" target="_blank">JonsenElizee</a> 2010-10-28 16:39 <a href="http://www.cppblog.com/JonsenElizee/archive/2010/10/28/131644.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kth Star</title><link>http://www.cppblog.com/JonsenElizee/archive/2010/10/27/131505.html</link><dc:creator>JonsenElizee</dc:creator><author>JonsenElizee</author><pubDate>Wed, 27 Oct 2010 07:18:00 GMT</pubDate><guid>http://www.cppblog.com/JonsenElizee/archive/2010/10/27/131505.html</guid><wfw:comment>http://www.cppblog.com/JonsenElizee/comments/131505.html</wfw:comment><comments>http://www.cppblog.com/JonsenElizee/archive/2010/10/27/131505.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/JonsenElizee/comments/commentRss/131505.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/JonsenElizee/services/trackbacks/131505.html</trackback:ping><description><![CDATA[ISSUE: 输入上百万个行星的位置， 求距离第K近的两个行星。
<br><br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br>Precondition:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">.&nbsp;star&nbsp;field&nbsp;simulation&nbsp;graph&nbsp;</span><span style="color: #0000ff;">is</span><span style="color: #000000;">&nbsp;planar.<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">.&nbsp;the&nbsp;coordinate&nbsp;of&nbsp;star&nbsp;</span><span style="color: #0000ff;">is</span><span style="color: #000000;">&nbsp;(x,&nbsp;y)&nbsp;that&nbsp;</span><span style="color: #0000ff;">is</span><span style="color: #000000;">&nbsp;treated&nbsp;</span><span style="color: #0000ff;">as</span><span style="color: #000000;">&nbsp;a&nbsp;point。<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">3</span><span style="color: #000000;">.&nbsp;N&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1000000</span><span style="color: #000000;"><br><br></span><span style="color: #000000;">1</span><span style="color: #000000;">.&nbsp;bucket</span><span style="color: #000000;">-</span><span style="color: #000000;">sort&nbsp;all&nbsp;points&nbsp;according&nbsp;to&nbsp;x</span><span style="color: #000000;">-</span><span style="color: #000000;">coordinate.&nbsp;</span><span style="color: #0000ff;">get</span><span style="color: #000000;">&nbsp;B&nbsp;buckets.<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">is</span><span style="color: #000000;">&nbsp;will&nbsp;completed&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;O(NlogN).<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;bucket&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;num;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;number&nbsp;of&nbsp;points&nbsp;in&nbsp;this&nbsp;bucket.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;point</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;points;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;points&nbsp;in&nbsp;this&nbsp;bucket.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;x;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;value&nbsp;of&nbsp;x-coordinate.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;bck[B];&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;B&nbsp;buckets&nbsp;got.</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br></span><span style="color: #000000;">2</span><span style="color: #000000;">.&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;distance&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;point&nbsp;p1;<br>&nbsp;&nbsp;&nbsp;&nbsp;point&nbsp;p2;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;d;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;distance&nbsp;between&nbsp;p1&nbsp;and&nbsp;p2.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;distance&nbsp;kdis[K];&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;to&nbsp;record&nbsp;K&nbsp;small&nbsp;distance.&nbsp;and&nbsp;it's&nbsp;a&nbsp;eliminating-tree.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;kdis[</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;to&nbsp;K</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(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;B</span><span style="color: #000000;">-</span><span style="color: #000000;">2</span><span style="color: #000000;">])&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;O(B)</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;check&nbsp;bck[i]&nbsp;and&nbsp;bck[i+1]</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(bck[i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">].x&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;bck[i].x&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;kdis[K</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">].d&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;kdis[K</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;there&nbsp;is&nbsp;no&nbsp;need&nbsp;to&nbsp;check&nbsp;these&nbsp;two&nbsp;buckets.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;save&nbsp;time.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;point</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;poi&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;bck[i].points;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;bck.num</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">])&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;O(N/B)</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point&nbsp;p&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;poi[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;find&nbsp;K&nbsp;points&nbsp;in&nbsp;bck[i+1]&nbsp;near&nbsp;to&nbsp;p<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;binary&nbsp;searching&nbsp;method&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;according&nbsp;to&nbsp;p.y.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kp[K];&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;K&nbsp;points&nbsp;got&nbsp;in&nbsp;bck[i+1]</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(m&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;K</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">])&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;O(K)</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;distance&nbsp;tmp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;get_distance(kp[m],&nbsp;p);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(tmp.d&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;kdis[K</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">].d)<br>&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;kdis[K</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;tmp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;adjust&nbsp;kdis[K-1],&nbsp;for&nbsp;it's&nbsp;a&nbsp;eliminating&nbsp;tree.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&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;}<br>&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;finally,&nbsp;the&nbsp;kdis[K-1]&nbsp;is&nbsp;the&nbsp;kth&nbsp;distance&nbsp;in&nbsp;this&nbsp;star&nbsp;graph.<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;the&nbsp;whole&nbsp;processing&nbsp;will&nbsp;be&nbsp;completed&nbsp;in&nbsp;O(NlogN)&nbsp;+&nbsp;O(B*N/B*K).<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;and&nbsp;SC&nbsp;is&nbsp;O(N)&nbsp;+&nbsp;O(K)&nbsp;=&nbsp;O(N).</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>HOW&nbsp;TO&nbsp;FIND&nbsp;K&nbsp;POINTS</span><span style="color: #000000;">?</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;find&nbsp;K&nbsp;points&nbsp;in&nbsp;bck[i+1]&nbsp;near&nbsp;to&nbsp;p<br>&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;binary&nbsp;searching&nbsp;method&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;according&nbsp;to&nbsp;p.y.<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>it</span><span style="color: #000000;">'</span><span style="color: #000000;">s&nbsp;not&nbsp;complecated!&nbsp;and&nbsp;could&nbsp;be&nbsp;found&nbsp;in&nbsp;O(log(N/B)).</span><span style="color: #000000;"><br></span></div>
<br><br> <img src ="http://www.cppblog.com/JonsenElizee/aggbug/131505.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/JonsenElizee/" target="_blank">JonsenElizee</a> 2010-10-27 15:18 <a href="http://www.cppblog.com/JonsenElizee/archive/2010/10/27/131505.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Find kth in O(n) TC</title><link>http://www.cppblog.com/JonsenElizee/archive/2010/10/24/131025.html</link><dc:creator>JonsenElizee</dc:creator><author>JonsenElizee</author><pubDate>Sat, 23 Oct 2010 17:17:00 GMT</pubDate><guid>http://www.cppblog.com/JonsenElizee/archive/2010/10/24/131025.html</guid><description><![CDATA[<code><span style="color: #000000;"><font face="NSimsun"><span style="color: #0000cc;"><br><a title="Refer find kth number in o(n) tc" href="http://hi.baidu.com/beibeiboo/blog/item/b280f88bb0ea02dafc1f101c.html">Refer Find kth number in O(n) TC</a><br><br>#</span><span style="color: #ff0000;">include</span> <span style="color: #0000cc;">&lt;</span>stdio<span style="color: #0000cc;">.</span>h<span style="color: #0000cc;">&gt;</span><br>
<span style="color: #0000cc;">#</span><span style="color: #ff0000;">include</span> <span style="color: #0000cc;">&lt;</span>stdlib<span style="color: #0000cc;">.</span>h<span style="color: #0000cc;">&gt;</span><br>
<span style="color: #0000cc;">#</span><span style="color: #ff0000;">include</span> <span style="color: #0000cc;">&lt;</span><span style="color: #ff0000;">time</span><span style="color: #0000cc;">.</span>h<span style="color: #0000cc;">&gt;</span><br>
<br>
<span style="color: #0000cc;">#</span><span style="color: #ff0000;">define</span> N 20<br>
<br>
<span style="color: #0000ff;">void</span> init_a<span style="color: #0000cc;">(</span><span style="color: #0000ff;">int</span> A<span style="color: #0000cc;">[</span><span style="color: #0000cc;">]</span><span style="color: #0000cc;">)</span><br>
<span style="color: #0000cc;">{</span><br>
&nbsp;&nbsp;<span style="color: #0000ff;">int</span> i <span style="color: #0000cc;">=</span> 0<span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;<span style="color: #0000ff;">for</span><span style="color: #0000cc;">(</span><span style="color: #0000cc;">;</span>i<span style="color: #0000cc;">&lt;</span>N<span style="color: #0000cc;">;</span>i<span style="color: #0000cc;">+</span><span style="color: #0000cc;">+</span><span style="color: #0000cc;">)</span><br>
&nbsp;&nbsp;&nbsp; A<span style="color: #0000cc;">[</span>i<span style="color: #0000cc;">]</span> <span style="color: #0000cc;">=</span> <span style="color: #ff0000;">rand</span><span style="color: #0000cc;">(</span><span style="color: #0000cc;">)</span><span style="color: #0000cc;">%</span>100<span style="color: #0000cc;">;</span> <br>
<span style="color: #0000cc;">}</span><br>
<br>
<span style="color: #0000ff;">void</span> print_array<span style="color: #0000cc;">(</span><span style="color: #0000ff;">int</span> A<span style="color: #0000cc;">[</span><span style="color: #0000cc;">]</span><span style="color: #0000cc;">)</span><br>
<span style="color: #0000cc;">{</span><br>
&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">int</span> i <span style="color: #0000cc;">=</span> 0<span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">for</span><span style="color: #0000cc;">(</span><span style="color: #0000cc;">;</span>i<span style="color: #0000cc;">&lt;</span>N<span style="color: #0000cc;">;</span>i<span style="color: #0000cc;">+</span><span style="color: #0000cc;">+</span><span style="color: #0000cc;">)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc;">{</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span><span style="color: #0000cc;">(</span>i<span style="color: #0000cc;">=</span><span style="color: #0000cc;">=</span>9<span style="color: #0000cc;">)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;">printf</span><span style="color: #0000cc;">(</span><span style="color: #ff00ff;">"%d\n"</span><span style="color: #0000cc;">,</span>A<span style="color: #0000cc;">[</span>i<span style="color: #0000cc;">]</span><span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">else</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;">printf</span><span style="color: #0000cc;">(</span><span style="color: #ff00ff;">"%d\t"</span><span style="color: #0000cc;">,</span>A<span style="color: #0000cc;">[</span>i<span style="color: #0000cc;">]</span><span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc;">}</span> <br>
<span style="color: #0000cc;">}</span><br>
<br>
<span style="color: #0000ff;">void</span> <span style="color: #ff0000;">swap</span><span style="color: #0000cc;">(</span><span style="color: #0000ff;">int</span><span style="color: #0000cc;">*</span> a<span style="color: #0000cc;">,</span> <span style="color: #0000ff;">int</span><span style="color: #0000cc;">*</span> b<span style="color: #0000cc;">)</span><br>
<span style="color: #0000cc;">{</span><br>
&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">int</span> tmp <span style="color: #0000cc;">=</span> <span style="color: #0000cc;">*</span>a<span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;&nbsp;<span style="color: #0000cc;">*</span>a <span style="color: #0000cc;">=</span> <span style="color: #0000cc;">*</span>b<span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;&nbsp;<span style="color: #0000cc;">*</span>b <span style="color: #0000cc;">=</span> tmp<span style="color: #0000cc;">;</span> <br>
<span style="color: #0000cc;">}</span><br>
<br>
<span style="color: #0000ff;">int</span> rand_partition<span style="color: #0000cc;">(</span><span style="color: #0000ff;">int</span> A<span style="color: #0000cc;">[</span><span style="color: #0000cc;">]</span><span style="color: #0000cc;">,</span> <span style="color: #0000ff;">int</span> start<span style="color: #0000cc;">,</span> <span style="color: #0000ff;">int</span> end<span style="color: #0000cc;">)</span><br>
<span style="color: #0000cc;">{</span><br>
&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">int</span> i <span style="color: #0000cc;">=</span> start<span style="color: #0000cc;">-</span>1<span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">int</span> j <span style="color: #0000cc;">=</span> start<span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">int</span> num <span style="color: #0000cc;">=</span> <span style="color: #ff0000;">rand</span><span style="color: #0000cc;">(</span><span style="color: #0000cc;">)</span><span style="color: #0000cc;">%</span><span style="color: #0000cc;">(</span>end<span style="color: #0000cc;">-</span>start<span style="color: #0000cc;">+</span>1<span style="color: #0000cc;">)</span><span style="color: #0000cc;">+</span>start<span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;">swap</span><span style="color: #0000cc;">(</span>A<span style="color: #0000cc;">+</span>num<span style="color: #0000cc;">,</span>A<span style="color: #0000cc;">+</span>end<span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">int</span> x <span style="color: #0000cc;">=</span> A<span style="color: #0000cc;">[</span>end<span style="color: #0000cc;">]</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">for</span><span style="color: #0000cc;">(</span><span style="color: #0000cc;">;</span>j<span style="color: #0000cc;">&lt;</span>end<span style="color: #0000cc;">;</span>j<span style="color: #0000cc;">+</span><span style="color: #0000cc;">+</span><span style="color: #0000cc;">)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc;">{</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span><span style="color: #0000cc;">(</span>A<span style="color: #0000cc;">[</span>j<span style="color: #0000cc;">]</span><span style="color: #0000cc;">&lt;</span><span style="color: #0000cc;">=</span>x<span style="color: #0000cc;">)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc;">{</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i<span style="color: #0000cc;">+</span><span style="color: #0000cc;">+</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;">swap</span><span style="color: #0000cc;">(</span>A<span style="color: #0000cc;">+</span>i<span style="color: #0000cc;">,</span>A<span style="color: #0000cc;">+</span>j<span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span> <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc;">}</span> <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000cc;">}</span><br>
&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;">swap</span><span style="color: #0000cc;">(</span>A<span style="color: #0000cc;">+</span>i<span style="color: #0000cc;">+</span>1<span style="color: #0000cc;">,</span>A<span style="color: #0000cc;">+</span>end<span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span><br>
<br>
&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">return</span> i<span style="color: #0000cc;">+</span>1<span style="color: #0000cc;">;</span><br>
<span style="color: #0000cc;">}</span><br>
<br>
<br>
<span style="color: #0000ff;">int</span> random_select<span style="color: #0000cc;">(</span><span style="color: #0000ff;">int</span> A<span style="color: #0000cc;">[</span><span style="color: #0000cc;">]</span><span style="color: #0000cc;">,</span> <span style="color: #0000ff;">int</span> start<span style="color: #0000cc;">,</span> <span style="color: #0000ff;">int</span> end<span style="color: #0000cc;">,</span> <span style="color: #0000ff;">int</span> k<span style="color: #0000cc;">)</span><br>
<span style="color: #0000cc;">{</span><br>
&nbsp;&nbsp;<span style="color: #0000ff;">int</span> i <span style="color: #0000cc;">=</span> 0<span style="color: #0000cc;">;</span> <br>
&nbsp;&nbsp;<span style="color: #0000ff;">if</span><span style="color: #0000cc;">(</span>start <span style="color: #0000cc;">=</span><span style="color: #0000cc;">=</span> end<span style="color: #0000cc;">)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">return</span> A<span style="color: #0000cc;">[</span>start<span style="color: #0000cc;">]</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;<span style="color: #0000ff;">int</span> q <span style="color: #0000cc;">=</span> rand_partition<span style="color: #0000cc;">(</span>A<span style="color: #0000cc;">,</span> start<span style="color: #0000cc;">,</span> end<span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp; i <span style="color: #0000cc;">=</span> q<span style="color: #0000cc;">-</span>start<span style="color: #0000cc;">+</span>1<span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;<span style="color: #0000ff;">if</span><span style="color: #0000cc;">(</span>i <span style="color: #0000cc;">=</span><span style="color: #0000cc;">=</span> k<span style="color: #0000cc;">)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">return</span> A<span style="color: #0000cc;">[</span>q<span style="color: #0000cc;">]</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span><span style="color: #0000cc;">(</span>i<span style="color: #0000cc;">&lt;</span>k<span style="color: #0000cc;">)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">return</span> random_select<span style="color: #0000cc;">(</span> A<span style="color: #0000cc;">,</span> q<span style="color: #0000cc;">+</span>1<span style="color: #0000cc;">,</span> end<span style="color: #0000cc;">,</span> k<span style="color: #0000cc;">-</span>i<span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;<span style="color: #0000ff;">else</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">return</span> random_select<span style="color: #0000cc;">(</span> A<span style="color: #0000cc;">,</span> start<span style="color: #0000cc;">,</span> q<span style="color: #0000cc;">-</span>1<span style="color: #0000cc;">,</span> k<span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span> <br>
<span style="color: #0000cc;">}</span> <br>
<br>
<span style="color: #0000ff;">void</span> quick_sort<span style="color: #0000cc;">(</span><span style="color: #0000ff;">int</span> A<span style="color: #0000cc;">[</span><span style="color: #0000cc;">]</span><span style="color: #0000cc;">,</span> <span style="color: #0000ff;">int</span> start<span style="color: #0000cc;">,</span> <span style="color: #0000ff;">int</span> end<span style="color: #0000cc;">)</span><br>
<span style="color: #0000cc;">{</span><br>
&nbsp;&nbsp;<span style="color: #0000ff;">if</span><span style="color: #0000cc;">(</span>start<span style="color: #0000cc;">&lt;</span>end<span style="color: #0000cc;">)</span> <br>
&nbsp;&nbsp;&nbsp;<span style="color: #0000cc;">{</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">int</span> q <span style="color: #0000cc;">=</span> rand_partition<span style="color: #0000cc;">(</span>A<span style="color: #0000cc;">,</span> start<span style="color: #0000cc;">,</span> end<span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; quick_sort<span style="color: #0000cc;">(</span> A<span style="color: #0000cc;">,</span> q<span style="color: #0000cc;">+</span>1<span style="color: #0000cc;">,</span> end<span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; quick_sort<span style="color: #0000cc;">(</span> A<span style="color: #0000cc;">,</span> start<span style="color: #0000cc;">,</span> q<span style="color: #0000cc;">-</span>1<span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;<span style="color: #0000cc;">}</span> <br>
<span style="color: #0000cc;">}</span> <br>
&nbsp;&nbsp;&nbsp;<br>
<span style="color: #0000ff;">int</span> main<span style="color: #0000cc;">(</span><span style="color: #0000ff;">int</span> argc<span style="color: #0000cc;">,</span> <span style="color: #0000ff;">char</span> <span style="color: #0000cc;">*</span>argv<span style="color: #0000cc;">[</span><span style="color: #0000cc;">]</span><span style="color: #0000cc;">)</span><br>
<span style="color: #0000cc;">{</span><br>
&nbsp;&nbsp;<span style="color: #0000ff;">int</span> A<span style="color: #0000cc;">[</span>N<span style="color: #0000cc;">]</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;<span style="color: #0000ff;">int</span> num <span style="color: #0000cc;">=</span> 0<span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;<span style="color: #0000ff;">int</span> res <span style="color: #0000cc;">=</span> 0<span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;<span style="color: #ff0000;">srand</span><span style="color: #0000cc;">(</span><span style="color: #0000cc;">(</span><span style="color: #0000ff;">unsigned</span><span style="color: #0000cc;">)</span><span style="color: #ff0000;">time</span><span style="color: #0000cc;">(</span><span style="color: #ff0000;">NULL</span><span style="color: #0000cc;">)</span><span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp; init_a<span style="color: #0000cc;">(</span>A<span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp; print_array<span style="color: #0000cc;">(</span>A<span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp; num <span style="color: #0000cc;">=</span> <span style="color: #ff0000;">rand</span><span style="color: #0000cc;">(</span><span style="color: #0000cc;">)</span><span style="color: #0000cc;">%</span><span style="color: #0000cc;">(</span>N<span style="color: #0000cc;">-</span>10<span style="color: #0000cc;">)</span><span style="color: #0000cc;">+</span>5<span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;<span style="color: #ff0000;">printf</span><span style="color: #0000cc;">(</span><span style="color: #ff00ff;">"we begin select %d minimun number\n"</span><span style="color: #0000cc;">,</span>num<span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp; res <span style="color: #0000cc;">=</span> random_select<span style="color: #0000cc;">(</span> A<span style="color: #0000cc;">,</span> 0 <span style="color: #0000cc;">,</span> N<span style="color: #0000cc;">-</span>1<span style="color: #0000cc;">,</span> num<span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span> <br>
&nbsp;&nbsp;<span style="color: #ff0000;">printf</span><span style="color: #0000cc;">(</span><span style="color: #ff00ff;">"and num is %d\n"</span><span style="color: #0000cc;">,</span>res<span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp; quick_sort<span style="color: #0000cc;">(</span> A<span style="color: #0000cc;">,</span> 0 <span style="color: #0000cc;">,</span> N<span style="color: #0000cc;">-</span>1<span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;<span style="color: #ff0000;">printf</span><span style="color: #0000cc;">(</span><span style="color: #ff00ff;">"after quick sort the array is:\n"</span><span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp; print_array<span style="color: #0000cc;">(</span>A<span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span><br>
&nbsp;&nbsp;<span style="color: #ff0000;">system</span><span style="color: #0000cc;">(</span><span style="color: #ff00ff;">"PAUSE"</span><span style="color: #0000cc;">)</span><span style="color: #0000cc;">;</span>&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;<span style="color: #0000ff;">return</span> 0<span style="color: #0000cc;">;</span><br>
<span style="color: #0000cc;">}</span></font></span></code> <img src ="http://www.cppblog.com/JonsenElizee/aggbug/131025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/JonsenElizee/" target="_blank">JonsenElizee</a> 2010-10-24 01:17 <a href="http://www.cppblog.com/JonsenElizee/archive/2010/10/24/131025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Avoiding Dupliated Computing in Fabonaci</title><link>http://www.cppblog.com/JonsenElizee/archive/2010/10/20/130555.html</link><dc:creator>JonsenElizee</dc:creator><author>JonsenElizee</author><pubDate>Wed, 20 Oct 2010 03:48:00 GMT</pubDate><guid>http://www.cppblog.com/JonsenElizee/archive/2010/10/20/130555.html</guid><wfw:comment>http://www.cppblog.com/JonsenElizee/comments/130555.html</wfw:comment><comments>http://www.cppblog.com/JonsenElizee/archive/2010/10/20/130555.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/JonsenElizee/comments/commentRss/130555.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/JonsenElizee/services/trackbacks/130555.html</trackback:ping><description><![CDATA[How to avoiding duplicated computing of recursive function like this one:<br>func(n) = func(n-1) + func(n-2) + func(n-3) and func(1) == func(2) == 1 and func(3) == 2. <br>or function like this: fabonaci:<br>fabonaci(n) = fabonaci(n-1) + fabonaci(n-2).<br><br><br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;fabo(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;ptr)<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">fabo(%d)\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;n);<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(n&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">3</span><span style="color: #000000;">)&nbsp;<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ptr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&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;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;tmp;<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ptr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;fabo(n&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">tmp);<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ptr&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;tmp;<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;fabonaci(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n)<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;tmp;<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;fabo(n,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">tmp);<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;xxx(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n)<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">xxx(%d)\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;n);<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(n&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">3</span><span style="color: #000000;">)</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;xxx(n</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;">xxx(n</span><span style="color: #000000;">-</span><span style="color: #000000;">2</span><span style="color: #000000;">);<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;fabonaci(</span><span style="color: #000000;">10</span><span style="color: #000000;">);<br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">n&nbsp;=&nbsp;%d\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;n);<br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;xxx(</span><span style="color: #000000;">10</span><span style="color: #000000;">);<br></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">n&nbsp;=&nbsp;%d\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;n);<br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&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></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">}</span></div>
<br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #008000;">/*</span><span style="color: #008000;">**********************************************************************</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;func(n)&nbsp;=&nbsp;func(n-1)&nbsp;+&nbsp;func(n-2)&nbsp;+&nbsp;func(n-3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;func(1)&nbsp;=&nbsp;1;&nbsp;func(2)&nbsp;=&nbsp;1;&nbsp;func(3)&nbsp;=&nbsp;2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">/*</span><span style="color: #008000;">**********************************************************************</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;funk(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;n_1,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;n_2)<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">funk(%d)\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;n);<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;">(n&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">3</span><span style="color: #000000;">){<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: #000000;">*</span><span style="color: #000000;">n_1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">n_2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&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;">2</span><span style="color: #000000;">;<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n_1_1,&nbsp;n_1_2;<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">n_1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;funk(n</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">n_1_1,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">n_1_2);<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">n_2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;n_1_1;<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&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;">*</span><span style="color: #000000;">n_1&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">n_2&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;n_1_2;<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;func(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n)<br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n_1,&nbsp;n_2;<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;funk(n,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">n_1,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">n_2);<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;func(</span><span style="color: #000000;">10</span><span style="color: #000000;">);<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">n&nbsp;=&nbsp;%d\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;n);<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&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></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">}</span></div>
<br>  <img src ="http://www.cppblog.com/JonsenElizee/aggbug/130555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/JonsenElizee/" target="_blank">JonsenElizee</a> 2010-10-20 11:48 <a href="http://www.cppblog.com/JonsenElizee/archive/2010/10/20/130555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>