<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>琥珀春秋 &#187; 数据结构</title>
	<atom:link href="http://amberlife.net/category/%e6%95%b0%e6%8d%ae%e7%bb%93%e6%9e%84/feed/" rel="self" type="application/rss+xml" />
	<link>http://amberlife.net</link>
	<description>No pain No gain.</description>
	<lastBuildDate>Sat, 31 Mar 2012 10:26:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>贪心算法的基本要素</title>
		<link>http://amberlife.net/2011/11/%e8%b4%aa%e5%bf%83%e7%ae%97%e6%b3%95%e7%9a%84%e5%9f%ba%e6%9c%ac%e8%a6%81%e7%b4%a0/</link>
		<comments>http://amberlife.net/2011/11/%e8%b4%aa%e5%bf%83%e7%ae%97%e6%b3%95%e7%9a%84%e5%9f%ba%e6%9c%ac%e8%a6%81%e7%b4%a0/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 16:37:21 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[数据结构]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=345</guid>
		<description><![CDATA[贪心算法通过一系列的选择来得到一个问题的解。它所作的每一个选择都是当前状态下某种意义的最好选择，即贪心选择。希望通过每次所作的贪心选择导致最终结果是问题的一个最优解。这种启发式的策略并不总能奏效，然而在许多情况下确能达到预期的目的。解活动安排问题的贪心算法就是一个例子。下面我们着重讨论可以用贪心算法求解的问题的一般特征。 对于一个具体的问题，我们怎么知道是否可用贪心算法来解此问题，以及能否得到问题的一个最优解呢?这个问题很难给予肯定的回答。但是，从许多可以用贪心算法求解的问题中 我们看到它们一般具有两个重要的性质：贪心选择性质和最优子结构性质。 1．贪心选择性质 所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择，即贪心选择来达到。这是贪心算法可行的第一个基本要素，也是贪心算法与动态规划算法的主要区别。在动态规划算法中，每步所作的选择往往依赖于相关子问题的解。因而只有在解出相关子问题后，才能作出选择。而在贪心算法中，仅在当前状态下作出最好选择，即局部最优选择。然后再去解作出这个选择后产生的相应的子问题。贪心算法所作的贪心选择可以依赖于以往所作过的选择，但决不依赖于将来所作的选择，也不依赖于子问题的解。正是由于这种差别，动态规划算法通常以自底向上的方式解各子问题，而贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择，每作一次贪心选择就将所求问题简化为一个规模更小的子问题。 对于一个具体问题，要确定它是否具有贪心选择性质，我们必须证明每一步所作的贪心选择最终导致问题的一个整体最优解。通常可以用我们在证明活动安排问题的贪心选择性质时所采用的方法来证明。首先考察问题的一个整体最优解，并证明可修改这个最优解，使其以贪心选择开始。而且作了贪心选择后，原问题简化为一个规模更小的类似子问题。然后，用数学归纳法证明，通过每一步作贪心选择，最终可得到问题的一个整体最优解。其中，证明贪心选择后的问题简化为规模更小的类似子问题的关键在于利用该问题的最优子结构性质。 2．最优子结构性质 当一个问题的最优解包含着它的子问题的最优解时，称此问题具有最优子结构性质。问题所具有的这个性质是该问题可用动态规划算法或贪心算法求解的一个关键特征。在活动安排问题中，其最优子结构性质表现为：若a是对于正的活动安排问题包含活动1的一个最优解,则相容活动集合a’=a—{1}是对于e’={i∈e:si≥f1}的活动安排问题的一个最优解。 3．贪心算法与动态规划算法的差异 贪心算法和动态规划算法都要求问题具有最优子结构性质，这是两类算法的一个共同点。但是，对于一个具有最优子结构的问题应该选用贪心算法还是动态规划算法来求解?是不是能用动态规划算法求解的问题也能用贪心算法来求解?下面我们来研究两个经典的组合优化问题，并以此来说明贪心算法与动态规划算法的主要差别。]]></description>
			<content:encoded><![CDATA[<p><span>贪心算法通过一系列的选择来得到一个问题的解。它所作的每一个选择都是当前状态下某种意义的最好选择，即贪心选择。希望通过每次所作的贪心选择导致最终结果是问题的一个最优解。这种启发式的策略并不总能奏效，然而在许多情况下确能达到预期的目的。解活动安排问题的贪心算法就是一个例子。下面我们着重讨论可以用贪心算法求解的问题的一般特征。</span></p>
<p><span><span> </span>对于一个具体的问题，我们怎么知道是否可用贪心算法来解此问题，以及能否得到问题的一个最优解呢?这个问题很难给予肯定的回答。但是，从许多可以用贪心算法求解的问题中</span></p>
<p>我们看到它们一般具有两个重要的性质：<strong>贪心选择性质</strong>和<strong>最优子结构性质</strong>。</p>
<p><span>1．<strong>贪心选择性质</strong></span></p>
<p><span><span> </span><em>所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择，即贪心选择来达到</em>。这是贪心算法可行的第一个基本要素，也是贪心算法与动态规划算法的主要区别。在动态规划算法中，每步所作的选择往往依赖于相关子问题的解。因而只有在解出相关子问题后，才能作出选择。而在贪心算法中，仅在当前状态下作出最好选择，即局部最优选择。然后再去解作出这个选择后产生的相应的子问题。贪心算法所作的贪心选择可以依赖于以往所作过的选择，但决不依赖于将来所作的选择，也不依赖于子问题的解。正是由于这种差别，动态规划算法通常以自底向上的方式解各子问题，而贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择，每作一次贪心选择就将所求问题简化为一个规模更小的子问题。</span></p>
<p>对于一个具体问题，要确定它是否具有贪心选择性质，我们必须证明每一步所作的贪心选择最终导致问题的一个整体最优解。通常可以用我们在证明活动安排问题的贪心选择性质时所采用的方法来证明。首先考察问题的一个整体最优解，并证明可修改这个最优解，使其以贪心选择开始。而且作了贪心选择后，原问题简化为一个规模更小的类似子问题。然后，用数学归纳法证明，通过每一步作贪心选择，最终可得到问题的一个整体最优解。其中，证明贪心选择后的问题简化为规模更小的类似子问题的关键在于利用该问题的最优子结构性质。</p>
<p><span>2．<strong>最优子结构性质</strong></span></p>
<p><span><span> </span>当一个问题的最优解包含着它的子问题的最优解时，称此问题具有最优子结构性质。问题所具有的这个性质是该问题可用动态规划算法或贪心算法求解的一个关键特征。在活动安排问题中，其最优子结构性质表现为：若a是对于正的活动安排问题包含活动1的一个最优解,则相容活动集合a</span><span>’</span><span>=a—{1}是对于e</span><span>’</span><span>={i∈e:s<sub>i</sub>≥f<sub>1</sub>}的活动安排问题的一个最优解。</span></p>
<p><span>3．<strong>贪心算法与动态规划算法的差异</strong></span></p>
<p><span><span> </span>贪心算法和动态规划算法都要求问题具有最优子结构性质，这是两类算法的一个共同点。但是，对于一个具有最优子结构的问题应该选用贪心算法还是动态规划算法来求解?是不是能用动态规划算法求解的问题也能用贪心算法来求解?下面我们来研究两个经典的组合优化问题，并以此来说明贪心算法与动态规划算法的主要差别。</span></p>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2011/11/%e8%b4%aa%e5%bf%83%e7%ae%97%e6%b3%95%e7%9a%84%e5%9f%ba%e6%9c%ac%e8%a6%81%e7%b4%a0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>堆排序的java实现</title>
		<link>http://amberlife.net/2011/09/heapsort/</link>
		<comments>http://amberlife.net/2011/09/heapsort/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 15:04:28 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[java学习]]></category>
		<category><![CDATA[数据结构]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=330</guid>
		<description><![CDATA[public class heapSort { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int[] test = {10,655,2,15,49,43,23,90,34,63,62};//test[0]记录数组内元素个数 HeapSort(test); for(int i=1;iarr[largest]) largest = r; if(largest !=i){ tmp = arr[i]; arr[i]=arr[largest]; arr[largest]=tmp; max_heapify(arr,largest); } } &#8230; <a href="http://amberlife.net/2011/09/heapsort/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>public class heapSort {</p>
<p>	/**<br />
	 * @param args<br />
	 */<br />
	public static void main(String[] args) {<br />
		// TODO Auto-generated method stub<br />
		int[] test = {10,655,2,15,49,43,23,90,34,63,62};//test[0]记录数组内元素个数<br />
		HeapSort(test);<br />
		for(int i=1;i<test .length;i++){<br />
			System.out.print(test[i]+" ");<br />
		}</p>
<p>	}</p>
<p>	public static int parent(int i){<br />
		return (int)Math.floor((double)i/2);<br />
	}<br />
	public static int left(int i){<br />
		return 2*i;<br />
	}<br />
	public static int right(int i){<br />
		return 2*i+1;<br />
	}</p>
<p>	public static  void max_heapify(int[] arr,int i){<br />
		int largest,tmp;<br />
		int l = left(i);<br />
		int r = right(i);<br />
		if(l<=(arr[0])&#038;&#038;arr[l]>arr[i]){<br />
			largest = l;<br />
		}else<br />
			largest = i ;<br />
		if(r< =(arr[0])&#038;&#038;arr[r]>arr[largest])<br />
			largest = r;<br />
		if(largest !=i){<br />
			tmp = arr[i];<br />
			arr[i]=arr[largest];<br />
			arr[largest]=tmp;<br />
			max_heapify(arr,largest);<br />
		}<br />
	}<br />
	public static void buildMaxHeap(int[] arr){<br />
		for(int i=(int)Math.floor(arr[0]/2);i>0;i&#8211;)<br />
			max_heapify(arr,i);<br />
	}<br />
	public static void HeapSort(int[] arr){<br />
		int tmp;<br />
		buildMaxHeap(arr);<br />
		for(int i=arr[0];i>1;i&#8211;)<br />
		{<br />
			tmp = arr[1];<br />
			arr[1]=arr[i];<br />
			arr[i]=tmp;<br />
			arr[0]-=1;<br />
			max_heapify(arr,1);<br />
		}<br />
	}</p>
<p>}</test></p>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2011/09/heapsort/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>插入排序的递归实现</title>
		<link>http://amberlife.net/2011/09/%e6%8f%92%e5%85%a5%e6%8e%92%e5%ba%8f%e7%9a%84%e9%80%92%e5%bd%92%e5%ae%9e%e7%8e%b0/</link>
		<comments>http://amberlife.net/2011/09/%e6%8f%92%e5%85%a5%e6%8e%92%e5%ba%8f%e7%9a%84%e9%80%92%e5%bd%92%e5%ae%9e%e7%8e%b0/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 08:10:01 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[java学习]]></category>
		<category><![CDATA[数据结构]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=327</guid>
		<description><![CDATA[遵循分治法的三步骤： Divide（分解）：将问题分解成为一系列的子问题 Conquer （解决）：递归的解决子问题，若子问题足够小，直接求解 Combine （合并）：将子问题的结果合并成为原问题的解 public class InsertSort { public static void main(String[] args){ int[] test = {3,5,6,2,67,57,23,97,26}; recursiveInsertion(test,test.length); for(int t :test){ System.out.print(t+” “); } } public static void recursiveInsertion(int[] arr , int length){ if(length>1){ recursiveInsertion(arr,length-1); merge(arr,length-1,length); } } &#8230; <a href="http://amberlife.net/2011/09/%e6%8f%92%e5%85%a5%e6%8e%92%e5%ba%8f%e7%9a%84%e9%80%92%e5%bd%92%e5%ae%9e%e7%8e%b0/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>遵循分治法的三步骤：<br />
Divide（分解）：将问题分解成为一系列的子问题<br />
Conquer （解决）：递归的解决子问题，若子问题足够小，直接求解<br />
Combine （合并）：将子问题的结果合并成为原问题的解</p>
<p>public class InsertSort {</p>
<p>	public static void main(String[] args){<br />
		int[] test = {3,5,6,2,67,57,23,97,26};<br />
		recursiveInsertion(test,test.length);<br />
		for(int t :test){<br />
			System.out.print(t+”  “);<br />
		}<br />
	}<br />
	public static void recursiveInsertion(int[] arr , int length){<br />
		if(length>1){<br />
			recursiveInsertion(arr,length-1);<br />
			merge(arr,length-1,length);<br />
		}</p>
<p>	}<br />
	public static void merge(int[] arr ,int end, int n){<br />
		int tmp=arr[n-1];<br />
		int i;<br />
		for(i=end-1;i>=0&#038;&#038;arr[i]>tmp;i&#8211;){<br />
				arr[i+1]=arr[i];<br />
		}<br />
		arr[i+1] = tmp;<br />
	}<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2011/09/%e6%8f%92%e5%85%a5%e6%8e%92%e5%ba%8f%e7%9a%84%e9%80%92%e5%bd%92%e5%ae%9e%e7%8e%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于求解斐波那契(Fibonacci)数列的几种方法</title>
		<link>http://amberlife.net/2011/05/%e5%85%b3%e4%ba%8e%e6%b1%82%e8%a7%a3%e6%96%90%e6%b3%a2%e9%82%a3%e5%a5%91fibonacci%e6%95%b0%e5%88%97%e7%9a%84%e5%87%a0%e7%a7%8d%e6%96%b9%e6%b3%95/</link>
		<comments>http://amberlife.net/2011/05/%e5%85%b3%e4%ba%8e%e6%b1%82%e8%a7%a3%e6%96%90%e6%b3%a2%e9%82%a3%e5%a5%91fibonacci%e6%95%b0%e5%88%97%e7%9a%84%e5%87%a0%e7%a7%8d%e6%96%b9%e6%b3%95/#comments</comments>
		<pubDate>Wed, 25 May 2011 15:13:37 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[数据结构]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=321</guid>
		<description><![CDATA[斐波那契数列是一个神奇的数列。有很多生物的构成都同斐波那契数列成正相关，同时黄金分割同斐波那契数列也存在关系。 下面我们先写成Fibonacci数列的递归定义： F(0) = 0 ; F(1) = 0; F(n) = F(n-1)+F(n-2); 。 通过上述的递归公式，我们即可给出Fibonacci数列的递归实现方式，这个算法，我想都是作为大家认识递归的入门算法，所以不在详述，下面来分析一下这个算法的时间复杂度。 F(n)=F(n-1)+F(n-2)。 如果利用递归树的分析方法来分析这个算法的话。 F(n) F(n-1)                   F(n-2) F(n-2)       F(n-3)   F(n-3)         F(n-4) &#8230; <a href="http://amberlife.net/2011/05/%e5%85%b3%e4%ba%8e%e6%b1%82%e8%a7%a3%e6%96%90%e6%b3%a2%e9%82%a3%e5%a5%91fibonacci%e6%95%b0%e5%88%97%e7%9a%84%e5%87%a0%e7%a7%8d%e6%96%b9%e6%b3%95/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>斐波那契数列是一个神奇的数列。有很多生物的构成都同斐波那契数列成正相关，同时黄金分割同斐波那契数列也存在关系。</p>
<p>下面我们先写成Fibonacci数列的递归定义：</p>
<p>F(0) = 0 ;</p>
<p>F(1) = 0;</p>
<p>F(n) = F(n-1)+F(n-2);</p>
<p>。</p>
<p>通过上述的递归公式，我们即可给出Fibonacci数列的递归实现方式，这个算法，我想都是作为大家认识递归的入门算法，所以不在详述，下面来分析一下这个算法的时间复杂度。</p>
<p>F(n)=F(n-1)+F(n-2)。</p>
<p>如果利用递归树的分析方法来分析这个算法的话。</p>
<p>F(n)</p>
<p>F(n-1)                   F(n-2)</p>
<p>F(n-2)       F(n-3)   F(n-3)         F(n-4)</p>
<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.</p>
<p>从这个递归树中发现每一层上n只是降低了1或者2，而数据规模却在增大。因此当数据规模至1时，可以发现运行的时间是指数级的。</p>
<p>通过Fibonacci和黄金分割的关系，亦可证明Fibonacci的时间复杂度是指数级的。</p>
<p>黄金分割 Φ=（1+√5）/2  与它的共轭Ô=(1-√5)/2.</p>
<p>有如下关系:</p>
<p>F(i) =  (Φˆi-Ôˆi)/√5     （公式1）</p>
<p>如果忽略负数部分 ，可以发现F(i)接近于F(i) =  (Φˆi)/√5。</p>
<p>因此可以说明F(i)是指数增长的。</p>
<p>因此当求第n个Fibonacci数时，利用递归的方法来求解，需要花费大量时间。</p>
<p>那么如何才能将指数级的时间复杂度进行降低，一种方法是利用Fibonacci和黄金分割的关系，即公式1 ，然而这个数学公式在计算机里是无法表示的，所以这只能成为一种理论上的解法，实际无法存在。</p>
<p>因此考虑另外一种解法：</p>
<p>通过利用二阶矩阵来解决这个问题。</p>
<p>{{F(n+1) , F(n) } { F(n) , F(n-1) }}={{1 , 1 }{ 1,  0 }}^n</p>
<p>利用这个关于矩阵的公式，同时利用分治法，将{{1 , 1 }{ 1,  0 }}^n分成2个{{1 , 1 }{ 1,  0 }}^（n/2），逐次分解至n=1 ，观察对应的递归树，可以看到时间复杂度为lg(n)的。比起指数级的有很大的改进。</p>
<p style="margin-bottom: 0pt; margin-top: 0pt;">
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2011/05/%e5%85%b3%e4%ba%8e%e6%b1%82%e8%a7%a3%e6%96%90%e6%b3%a2%e9%82%a3%e5%a5%91fibonacci%e6%95%b0%e5%88%97%e7%9a%84%e5%87%a0%e7%a7%8d%e6%96%b9%e6%b3%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>大数阶乘(java实现)</title>
		<link>http://amberlife.net/2011/05/%e5%a4%a7%e6%95%b0%e9%98%b6%e4%b9%98java%e5%ae%9e%e7%8e%b0/</link>
		<comments>http://amberlife.net/2011/05/%e5%a4%a7%e6%95%b0%e9%98%b6%e4%b9%98java%e5%ae%9e%e7%8e%b0/#comments</comments>
		<pubDate>Wed, 18 May 2011 15:03:45 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[java学习]]></category>
		<category><![CDATA[数据结构]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=301</guid>
		<description><![CDATA[?View Code JAVAimport java.io.*; import java.math.*; public class Factorial &#123; &#160; public static void main&#40;String&#91;&#93; args&#41; &#123; // TODO Auto-generated method stub int n =0 ; try&#123; System.out.println&#40;&#34;n=&#34;&#41;; BufferedReader br = new BufferedReader&#40;new InputStreamReader&#40;System.in&#41;&#41;; n = Integer.parseInt&#40;br.readLine&#40;&#41;&#41;; &#125;catch&#40;IOException e&#41;&#123;&#125; //获取所需位数 &#8230; <a href="http://amberlife.net/2011/05/%e5%a4%a7%e6%95%b0%e9%98%b6%e4%b9%98java%e5%ae%9e%e7%8e%b0/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p301code2'); return false;">View Code</a> JAVA</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3012"><td class="code" id="p301code2"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.math.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Factorial <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// TODO Auto-generated method stub</span>
		<span style="color: #000066; font-weight: bold;">int</span>  n <span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">try</span><span style="color: #009900;">&#123;</span>
			<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;n=&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #003399;">BufferedReader</span> br <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">BufferedReader</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">InputStreamReader</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">System</span>.<span style="color: #006633;">in</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		n <span style="color: #339933;">=</span> <span style="color: #003399;">Integer</span>.<span style="color: #006633;">parseInt</span><span style="color: #009900;">&#40;</span>br.<span style="color: #006633;">readLine</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
		<span style="color: #666666; font-style: italic;">//获取所需位数</span>
		<span style="color: #000066; font-weight: bold;">int</span> length <span style="color: #339933;">=</span> getBitLength<span style="color: #009900;">&#40;</span>n<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> arrValue <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span>length<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">//第一位初始化为1 ，其余默认为0 </span>
		arrValue<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>n <span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">try</span>
			<span style="color: #009900;">&#123;</span>
			arrValue<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #000000; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">ArrayIndexOutOfBoundsException</span> e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000066; font-weight: bold;">int</span> index <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">double</span> bitCount <span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>index <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span> index<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;=</span>n <span style="color: #339933;">;</span> index<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #000066; font-weight: bold;">int</span> multiValue <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">;</span> 
			bitCount <span style="color: #339933;">+=</span><span style="color: #003399;">Math</span>.<span style="color: #006633;">log10</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">double</span><span style="color: #009900;">&#41;</span>index<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
			<span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> j<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> j<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#41;</span>bitCount<span style="color: #339933;">;++</span>j<span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#123;</span>
				multiValue <span style="color: #339933;">+=</span><span style="color: #009900;">&#40;</span>index<span style="color: #339933;">*</span>arrValue<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				arrValue<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>multiValue<span style="color: #339933;">%</span>10<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				multiValue <span style="color: #339933;">/=</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> k<span style="color: #339933;">=</span>arrValue.<span style="color: #006633;">length</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>k<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>k<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span>arrValue<span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">int</span> getBitLength<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> n<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">double</span> sum <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1.0</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> <span style="color: #339933;">=</span>n<span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
			sum<span style="color: #339933;">+=</span><span style="color: #003399;">Math</span>.<span style="color: #006633;">log10</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">double</span><span style="color: #009900;">&#41;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#41;</span>sum<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p></n></pre>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2011/05/%e5%a4%a7%e6%95%b0%e9%98%b6%e4%b9%98java%e5%ae%9e%e7%8e%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>约瑟夫问题</title>
		<link>http://amberlife.net/2011/03/yuesefu/</link>
		<comments>http://amberlife.net/2011/03/yuesefu/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 11:41:50 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[program]]></category>
		<category><![CDATA[数据结构]]></category>
		<category><![CDATA[the C programing language]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=269</guid>
		<description><![CDATA[?View Code C #include &#38;lt;stdio .h&#38;gt; #include &#38;lt;stdlib .h&#38;gt; #include &#38;lt;string .h&#38;gt; &#160; typedef struct child &#123; int no ; struct child *next; &#125;CHILD; void main&#40;&#41; &#123; CHILD *h, *p,*s; int m,n,i,count; printf&#40;&#34;please input children's count:n&#34;&#41;; scanf&#40;&#34;%d&#34;,&#38;n&#41;; printf&#40;&#34;please input From &#8230; <a href="http://amberlife.net/2011/03/yuesefu/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p269code4'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2694"><td class="code" id="p269code4"><pre class="c" style="font-family:monospace;"> <span style="color: #339933;">#include &amp;lt;stdio .h&amp;gt;</span>
 <span style="color: #339933;">#include &amp;lt;stdlib .h&amp;gt;</span>
 <span style="color: #339933;">#include &amp;lt;string .h&amp;gt;</span>
&nbsp;
 <span style="color: #993333;">typedef</span> <span style="color: #993333;">struct</span> child
 <span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> no <span style="color: #339933;">;</span>
	<span style="color: #993333;">struct</span> child <span style="color: #339933;">*</span>next<span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>CHILD<span style="color: #339933;">;</span>
 <span style="color: #993333;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
	CHILD <span style="color: #339933;">*</span>h<span style="color: #339933;">,</span> <span style="color: #339933;">*</span>p<span style="color: #339933;">,*</span>s<span style="color: #339933;">;</span>
	<span style="color: #993333;">int</span> m<span style="color: #339933;">,</span>n<span style="color: #339933;">,</span>i<span style="color: #339933;">,</span>count<span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;please input children's count:n&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	scanf<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d&quot;</span><span style="color: #339933;">,&amp;</span>n<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;please input From which to count:n&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	scanf<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d&quot;</span><span style="color: #339933;">,&amp;</span>m<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;please input From which to stand out: n&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	scanf<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d&quot;</span><span style="color: #339933;">,&amp;</span>count<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>h<span style="color: #339933;">=</span><span style="color: #009900;">&#40;</span>CHILD <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>CHILD<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span>NULL<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Cannot assignment memory !n&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		exit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;please enter the student id:&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	scanf<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d&quot;</span><span style="color: #339933;">,&amp;</span><span style="color: #009900;">&#40;</span>h<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>no<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	h<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>next <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
	p<span style="color: #339933;">=</span>h<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>n <span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>s<span style="color: #339933;">=</span><span style="color: #009900;">&#40;</span>CHILD <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>CHILD<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span>NULL<span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Cannot assignment memory !n&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			exit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		p<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>next<span style="color: #339933;">=</span>s<span style="color: #339933;">;</span>
		<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;please enter the student id:&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		scanf<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d&quot;</span><span style="color: #339933;">,&amp;</span><span style="color: #009900;">&#40;</span>s<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>no<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		s<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>next <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
		p<span style="color: #339933;">=</span>s<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	p<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>next <span style="color: #339933;">=</span> h<span style="color: #339933;">;</span>
    p<span style="color: #339933;">=</span>h<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">--</span>m<span style="color: #009900;">&#41;</span> 
	<span style="color: #009900;">&#123;</span>	
		s<span style="color: #339933;">=</span>p<span style="color: #339933;">;</span>
		p<span style="color: #339933;">=</span>p<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>next<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
	<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>n<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>count <span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			s<span style="color: #339933;">=</span>p<span style="color: #339933;">;</span>
			p<span style="color: #339933;">=</span>p<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>next<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		s<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>next<span style="color: #339933;">=</span>p<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>next<span style="color: #339933;">;</span>
&nbsp;
&nbsp;
		<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%4d &quot;</span><span style="color: #339933;">,</span>p<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>no<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>n<span style="color: #339933;">%</span><span style="color:#800080;">10</span><span style="color: #339933;">==</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;n&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		free<span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		p<span style="color: #339933;">=</span>s<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>next<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
   system<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;pause&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;/</span>count<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;&amp;</span>lt<span style="color: #339933;">;/</span>n<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;&amp;</span>lt<span style="color: #339933;">;/</span>string<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;&amp;</span>lt<span style="color: #339933;">;/</span>stdlib<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;&amp;</span>lt<span style="color: #339933;">;/</span>stdio<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2011/03/yuesefu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>功课：BCD码完成大数计算</title>
		<link>http://amberlife.net/2010/10/bcd/</link>
		<comments>http://amberlife.net/2010/10/bcd/#comments</comments>
		<pubDate>Sat, 02 Oct 2010 10:10:42 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[数据结构]]></category>
		<category><![CDATA[心得体会]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=248</guid>
		<description><![CDATA[复习组成原理到这一章节，突然想起当初利用数组和文件完成大数阶乘，给自己下个功课，毕业前（时间比较久远）完成利用BCD码实现大数的乘法。总体思路上，自己还是把握到了，就是不知道c语言是否可以实现这样的功能。听说8421BCD在会计事务中很常见，计算很方便，尝试一下。]]></description>
			<content:encoded><![CDATA[<p>复习组成原理到这一章节，突然想起当初利用数组和文件完成大数阶乘，给自己下个功课，毕业前（时间比较久远）完成利用BCD码实现大数的乘法。总体思路上，自己还是把握到了，就是不知道c语言是否可以实现这样的功能。听说8421BCD在会计事务中很常见，计算很方便，尝试一下。</p>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2010/10/bcd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>递归可以实现的算法，均可用非递归完成。</title>
		<link>http://amberlife.net/2010/09/recursio/</link>
		<comments>http://amberlife.net/2010/09/recursio/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 14:57:52 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[数据结构]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=244</guid>
		<description><![CDATA[在学习data structure的时候，我们总是能够发现有很多时候，用递归来实现，算法会变得异常简单，其实，能够用递归实现的算法，都能够用非递归来实现，原因是因为在支持递归的编译程序中，在执行时，都是在内存中开辟一段栈，在函数调用子函数，子函数返回函数的时候，存在着一个入栈和出栈的操作。对于递归，自然是函数调用函数的过程，因此，我们只要能够搞明白内存中的栈的进出，就能够自己利用栈来编写非递归的算法。]]></description>
			<content:encoded><![CDATA[<p>在学习data structure的时候，我们总是能够发现有很多时候，用递归来实现，算法会变得异常简单，其实，能够用递归实现的算法，都能够用非递归来实现，原因是因为在支持递归的编译程序中，在执行时，都是在内存中开辟一段栈，在函数调用子函数，子函数返回函数的时候，存在着一个入栈和出栈的操作。对于递归，自然是函数调用函数的过程，因此，我们只要能够搞明白内存中的栈的进出，就能够自己利用栈来编写非递归的算法。</p>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2010/09/recursio/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>01背包问题-回溯法-C语言实现。</title>
		<link>http://amberlife.net/2010/05/01%e8%83%8c%e5%8c%85%e9%97%ae%e9%a2%98-%e5%9b%9e%e6%ba%af%e6%b3%95-c%e8%af%ad%e8%a8%80%e5%ae%9e%e7%8e%b0%e3%80%82/</link>
		<comments>http://amberlife.net/2010/05/01%e8%83%8c%e5%8c%85%e9%97%ae%e9%a2%98-%e5%9b%9e%e6%ba%af%e6%b3%95-c%e8%af%ad%e8%a8%80%e5%ae%9e%e7%8e%b0%e3%80%82/#comments</comments>
		<pubDate>Fri, 14 May 2010 03:10:15 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[program]]></category>
		<category><![CDATA[数据结构]]></category>
		<category><![CDATA[回溯法 01背包问题]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=212</guid>
		<description><![CDATA[01背包问题-回溯法 ?View Code C#include &#38;lt;stdio .h&#38;gt; #include &#38;lt;stdlib .h&#38;gt; &#160; int n=5,c=10; int value&#91;5&#93;=&#123;6,3,5,4,6&#125;; int weight&#91;5&#93;=&#123;2,2,6,5,4&#125;; int cv&#91;5&#93;=&#123;0,0,0,0,0&#125;; int bv&#91;5&#93;=&#123;0,0,0,0,0&#125;; int cw=0; int curv = 0 ; int bestv =0 ; void output&#40;&#41; &#123; int i =0; for&#40;i; i&#38;lt;n ; &#8230; <a href="http://amberlife.net/2010/05/01%e8%83%8c%e5%8c%85%e9%97%ae%e9%a2%98-%e5%9b%9e%e6%ba%af%e6%b3%95-c%e8%af%ad%e8%a8%80%e5%ae%9e%e7%8e%b0%e3%80%82/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>01背包问题-回溯法</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p212code6'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2126"><td class="code" id="p212code6"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &amp;lt;stdio .h&amp;gt;</span>
<span style="color: #339933;">#include &amp;lt;stdlib .h&amp;gt;</span>
&nbsp;
<span style="color: #993333;">int</span> n<span style="color: #339933;">=</span><span style="color: #0000dd;">5</span><span style="color: #339933;">,</span>c<span style="color: #339933;">=</span><span style="color: #0000dd;">10</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> value<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #009900;">&#123;</span><span style="color: #0000dd;">6</span><span style="color: #339933;">,</span><span style="color: #0000dd;">3</span><span style="color: #339933;">,</span><span style="color: #0000dd;">5</span><span style="color: #339933;">,</span><span style="color: #0000dd;">4</span><span style="color: #339933;">,</span><span style="color: #0000dd;">6</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> weight<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #009900;">&#123;</span><span style="color: #0000dd;">2</span><span style="color: #339933;">,</span><span style="color: #0000dd;">2</span><span style="color: #339933;">,</span><span style="color: #0000dd;">6</span><span style="color: #339933;">,</span><span style="color: #0000dd;">5</span><span style="color: #339933;">,</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> cv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #009900;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> bv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #009900;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> cw<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> curv <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span> <span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> bestv <span style="color: #339933;">=</span><span style="color: #0000dd;">0</span> <span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> output<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   <span style="color: #993333;">int</span> i <span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">;</span> i<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>n <span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
     <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d &quot;</span><span style="color: #339933;">,</span>bv<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d&quot;</span><span style="color: #339933;">,</span>bestv<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>     
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> trackback<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
     <span style="color: #993333;">int</span> j<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span>n<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
         <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>bestv<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>curv <span style="color: #009900;">&#41;</span> 
        <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>j<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>j<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>n<span style="color: #339933;">;</span>j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
                bv<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> cv<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
            bestv <span style="color: #339933;">=</span> curv<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> 
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span>
    <span style="color: #009900;">&#123;</span>
         <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>cw <span style="color: #339933;">+</span> weight<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;=</span>c<span style="color: #009900;">&#41;</span>
         <span style="color: #009900;">&#123;</span>
          cv<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> 
          cw <span style="color: #339933;">+=</span>weight<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
          curv<span style="color: #339933;">+=</span> value<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
          trackback<span style="color: #009900;">&#40;</span>i<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          cw <span style="color: #339933;">-=</span>weight<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
          curv<span style="color: #339933;">-=</span> value<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span>
          cv<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
          trackback<span style="color: #009900;">&#40;</span>i<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #009900;">&#125;</span>
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  trackback<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  output<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  system<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;PAUSE&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
  <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p></curv></n></stdlib></stdio></pre>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2010/05/01%e8%83%8c%e5%8c%85%e9%97%ae%e9%a2%98-%e5%9b%9e%e6%ba%af%e6%b3%95-c%e8%af%ad%e8%a8%80%e5%ae%9e%e7%8e%b0%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>求二进制数中1的个数</title>
		<link>http://amberlife.net/2009/12/%e6%b1%82%e4%ba%8c%e8%bf%9b%e5%88%b6%e6%95%b0%e4%b8%ad1%e7%9a%84%e4%b8%aa%e6%95%b0/</link>
		<comments>http://amberlife.net/2009/12/%e6%b1%82%e4%ba%8c%e8%bf%9b%e5%88%b6%e6%95%b0%e4%b8%ad1%e7%9a%84%e4%b8%aa%e6%95%b0/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 16:16:44 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[program]]></category>
		<category><![CDATA[数据结构]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=156</guid>
		<description><![CDATA[对于一个字节（8bit）的变量，求其二进制表示中“1”的个数，要求算法的执行效率尽可能地高。 【解法一】 可以举一个八位的二进制例子来进行分析。对于二进制操作，我们知道，除以一个2，原来的数字将会减少一个0。如果除的过程中有余，那么就表示当前位置有一个1。 int Count(int v) { int num = 0; while(v) { if(v % 2 == 1) { num++; } v = v/ 2; } return num; } 【解法二】使用位操作 前面的代码看起来比较复杂。我们知道，向右移位操作同样也可以达到相除的目的。唯一不同之处在于，移位之后如何来判断是否有1存在。对于这个问题，再来看看一个八位的数字：10 100 001。 在向右移位的过程中，我们会把最后一位直接丢弃。因此，需要判断最后一位是否为1，而“与”操作可以达到目的。可以把这个八位的数字与00000001进行“与”操作。如果结果为1，则表示当前八位数的最后一位为1，否则为0。代码如下： int Count(int v) { int num &#8230; <a href="http://amberlife.net/2009/12/%e6%b1%82%e4%ba%8c%e8%bf%9b%e5%88%b6%e6%95%b0%e4%b8%ad1%e7%9a%84%e4%b8%aa%e6%95%b0/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>对于一个字节（8bit）的变量，求其二进制表示中“1”的个数，要求算法的执行效率尽可能地高。<span id="more-156"></span></p>
<p>【解法一】</p>
<p>可以举一个八位的二进制例子来进行分析。对于二进制操作，我们知道，除以一个2，原来的数字将会减少一个0。如果除的过程中有余，那么就表示当前位置有一个1。</p>
<p>int Count(int v)</p>
<p>{</p>
<p>int num = 0;</p>
<p>while(v)</p>
<p>{</p>
<p>if(v % 2 == 1)</p>
<p>{</p>
<p>num++;</p>
<p>}</p>
<p>v = v/ 2;</p>
<p>}</p>
<p>return num;</p>
<p>}</p>
<p>【解法二】使用位操作</p>
<p>前面的代码看起来比较复杂。我们知道，向右移位操作同样也可以达到相除的目的。唯一不同之处在于，移位之后如何来判断是否有1存在。对于这个问题，再来看看一个八位的数字：10 100 001。</p>
<p>在向右移位的过程中，我们会把最后一位直接丢弃。因此，需要判断最后一位是否为1，而“与”操作可以达到目的。可以把这个八位的数字与00000001进行“与”操作。如果结果为1，则表示当前八位数的最后一位为1，否则为0。代码如下：</p>
<p>int Count(int v)</p>
<p>{</p>
<p>int num = 0;</p>
<p>While(v)</p>
<p>{</p>
<p>num += v &amp;0&#215;01;</p>
<p>v &gt;&gt;= 1;</p>
<p>}</p>
<p>return num;</p>
<p>}</p>
<p>【解法三】</p>
<p>位操作比除、余操作的效率高了很多。但是，即使采用位操作，时间复杂度仍为O（log2v），log2v为二进制数的位数。那么，还能不能再降低一些复杂度呢？如果有办法让算法的复杂度只与“1”的个数有关，复杂度不就能进一步降低了吗？</p>
<p>同样用10 100 001来举例。如果只考虑和1的个数相关，那么，我们是否能够在每次判断中，仅与1来进行判断呢？</p>
<p>为了简化这个问题，我们考虑只有一个1的情况。例如：01 000 000。</p>
<p>如何判断给定的二进制数里面有且仅有一个1呢？可以通过判断这个数是否是2的整数次幂来实现。另外，如果只和这一个“1”进行判断，如何设计操作呢？我们知道的是，如果进行这个操作，结果为0或为1，就可以得到结论。</p>
<p>int Count(int v)</p>
<p>{</p>
<p>int num = 0;</p>
<p>while(v)</p>
<p>{</p>
<p>v &amp;= (v-1);</p>
<p>num++;</p>
<p>}</p>
<p>return num;</p>
<p>}</p>
<p>【解法五】查表法</p>
<p>int countTable[256] =</p>
<p>{</p>
<p>0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3,</p>
<p>3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3,</p>
<p>4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4,</p>
<p>3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3,</p>
<p>4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6,</p>
<p>6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4,</p>
<p>5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,</p>
<p>3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3,</p>
<p>4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4,</p>
<p>4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6,</p>
<p>7, 6, 7, 7, 8</p>
<p>};</p>
<p>int Count(int v)</p>
<p>{</p>
<p>//check parameter</p>
<p>return countTable[v];</p>
<p>}</p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/jiju8484/archive/2008/04/03/2247823.aspx</p>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2009/12/%e6%b1%82%e4%ba%8c%e8%bf%9b%e5%88%b6%e6%95%b0%e4%b8%ad1%e7%9a%84%e4%b8%aa%e6%95%b0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

