<?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>又一个 WordPress Blog</description>
	<lastBuildDate>Sat, 17 Jul 2010 13:36:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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背包问题-回溯法

#include &#60;stdio .h&#62;
#include &#60;stdlib .h&#62;
&#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&#60;n ; i++&#41;
     printf&#40;&#34;%d &#34;,bv&#91;i&#93;&#41;;
   printf&#40;&#34;%d&#34;,bestv&#41;;     
&#125;
&#160;
void trackback&#40;int i&#41;
&#123;
     int j;
    [...]]]></description>
			<content:encoded><![CDATA[<p>01背包问题-回溯法</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio .h&gt;</span>
<span style="color: #339933;">#include &lt;stdlib .h&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;">&lt;</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;">&gt;=</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;">&lt;</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;">&lt;</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;">&lt;=</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></div></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 = 0;
While(v)
{
num += v &#38;0&#215;01;
v &#62;&#62;= 1;
}
return num;
}
【解法三】
位操作比除、余操作的效率高了很多。但是，即使采用位操作，时间复杂度仍为O（log2v），log2v为二进制数的位数。那么，还能不能再降低一些复杂度呢？如果有办法让算法的复杂度只与“1”的个数有关，复杂度不就能进一步降低了吗？
同样用10 100 001来举例。如果只考虑和1的个数相关，那么，我们是否能够在每次判断中，仅与1来进行判断呢？
为了简化这个问题，我们考虑只有一个1的情况。例如：01 000 000。
如何判断给定的二进制数里面有且仅有一个1呢？可以通过判断这个数是否是2的整数次幂来实现。另外，如果只和这一个“1”进行判断，如何设计操作呢？我们知道的是，如果进行这个操作，结果为0或为1，就可以得到结论。
int Count(int v)
{
int num = 0;
while(v)
{
v &#38;= (v-1);
num++;
}
return num;
}
【解法五】查表法
int countTable[256] =
{
0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, [...]]]></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>
		<item>
		<title>一摞烙饼引发的“血案”</title>
		<link>http://amberlife.net/2009/12/%e4%b8%80%e6%91%9e%e7%83%99%e9%a5%bc%e5%bc%95%e5%8f%91%e7%9a%84%e2%80%9c%e8%a1%80%e6%a1%88%e2%80%9d/</link>
		<comments>http://amberlife.net/2009/12/%e4%b8%80%e6%91%9e%e7%83%99%e9%a5%bc%e5%bc%95%e5%8f%91%e7%9a%84%e2%80%9c%e8%a1%80%e6%a1%88%e2%80%9d/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 16:13:50 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[数据结构]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=154</guid>
		<description><![CDATA[ 看移山之道这个网站，看到了不错的问题，好多牛人在讨论，以后得常去，最近忙着考试，写到要少的多了。
有一次我烙了三个饼，一个两面都焦了，一个两面都是金黄色，一个一面是焦的，一面是金黄色，我把它们摞一起，只能看到最上一面，发现是焦的，问最上面这个饼的另一面是焦的概率是多少？
解法1：
1. 最上一面是焦的, 排除最上一张是两面金黄色
2. 剩下两张饼四个面, 三面是焦的, 一面金黄色, 现知道其中一面是焦的, 
   所以判断另一面是焦的概率就是求 二面焦 + 一面金黄 中焦的概率, = 2/2+1 = 2/3
解法2：
A=最上面的饼双面焦
B=最上面的饼双面金黄
C=最上面的饼一面金黄一面焦
J=最上面的一面焦
则P(J&#124;A)=1，P(J&#124;B)=0，P(J&#124;C)=0.5
P(A&#124;J)=P(AJ)/P(J)=(1/3)/(1/2)=2/3
]]></description>
			<content:encoded><![CDATA[<p> 看移山之道这个网站，看到了不错的问题，好多牛人在讨论，以后得常去，最近忙着考试，写到要少的多了。</p>
<p>有一次我烙了三个饼，一个两面都焦了，一个两面都是金黄色，一个一面是焦的，一面是金黄色，我把它们摞一起，只能看到最上一面，发现是焦的，问最上面这个饼的另一面是焦的概率是多少？</p>
<p>解法1：</p>
<p>1. 最上一面是焦的, 排除最上一张是两面金黄色</p>
<p>2. 剩下两张饼四个面, 三面是焦的, 一面金黄色, 现知道其中一面是焦的, </p>
<p>   所以判断另一面是焦的概率就是求 二面焦 + 一面金黄 中焦的概率, = 2/2+1 = 2/3</p>
<p>解法2：</p>
<p>A=最上面的饼双面焦</p>
<p>B=最上面的饼双面金黄</p>
<p>C=最上面的饼一面金黄一面焦</p>
<p>J=最上面的一面焦</p>
<p>则P(J|A)=1，P(J|B)=0，P(J|C)=0.5</p>
<p>P(A|J)=P(AJ)/P(J)=(1/3)/(1/2)=2/3</p>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2009/12/%e4%b8%80%e6%91%9e%e7%83%99%e9%a5%bc%e5%bc%95%e5%8f%91%e7%9a%84%e2%80%9c%e8%a1%80%e6%a1%88%e2%80%9d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>字符串填充函数(javascript实现)</title>
		<link>http://amberlife.net/2009/09/%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%a1%ab%e5%85%85%e5%87%bd%e6%95%b0javascript%e5%ae%9e%e7%8e%b0/</link>
		<comments>http://amberlife.net/2009/09/%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%a1%ab%e5%85%85%e5%87%bd%e6%95%b0javascript%e5%ae%9e%e7%8e%b0/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 08:50:43 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[数据结构]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=132</guid>
		<description><![CDATA[昨天js课上讲到这样一个字符串填充函数，上课老师讲的不是多么仔细，没怎么听懂，下课后研究一下，问了一下以前教c的老师，发现这个小技巧还是很优秀的，可以很大程度的减少循环的次数，从而大大的减少运算的时间。
先看函数，随后我来解释思路：
//c:填充字符 length:长度
//getString(c,length)返回长度为length的字符串，它的所有字符均为c
function getString(c,length)
{
var bArr = length.toString(2).split(&#8221;");
// 将length转换成2进制数，并转换成数组
// 例如length为20，对应的2进制数是10100转换为数组bArr为["1","0","1","0","0"]
var ret = &#8220;&#8221;;
var step = c;// 初始步长为字符串c
for(var i = bArr.length-1;i&#62;=0;i&#8211;)// 从末位开始连接字符串
{
if(bArr[i]==&#8221;1&#8243;) ret += step;// 当前位为1 时，在ret字符串后增加step
step += step;// 步长加倍
}
return ret;
}
function pad(str ,len ,c ,dir)
{
var out = String(str);// 原始字符串
if(!c) c = &#8220;0&#8243;;// 如果参数c未定义，则c取默认值“0”
if(!dir) dir = 1; // 如果参数dir未定义，则dir取默认值1
var pad = getString(c ,len &#8211; out.length); // 计算需要填充的字符串
if(dir &#62; 0 [...]]]></description>
			<content:encoded><![CDATA[<p>昨天js课上讲到这样一个字符串填充函数，上课老师讲的不是多么仔细，没怎么听懂，下课后研究一下，问了一下以前教c的老师，发现这个小技巧还是很优秀的，可以很大程度的减少循环的次数，从而大大的减少运算的时间。<span id="more-132"></span></p>
<p>先看函数，随后我来解释思路：</p>
<p>//c:填充字符 length:长度<br />
//getString(c,length)返回长度为length的字符串，它的所有字符均为c<br />
function getString(c,length)<br />
{<br />
var bArr = length.toString(2).split(&#8221;");<br />
// 将length转换成2进制数，并转换成数组<br />
// 例如length为20，对应的2进制数是10100转换为数组bArr为["1","0","1","0","0"]<br />
var ret = &#8220;&#8221;;<br />
var step = c;// 初始步长为字符串c<br />
for(var i = bArr.length-1;i&gt;=0;i&#8211;)// 从末位开始连接字符串<br />
{<br />
if(bArr[i]==&#8221;1&#8243;) ret += step;// 当前位为1 时，在ret字符串后增加step<br />
step += step;// 步长加倍<br />
}<br />
return ret;<br />
}</p>
<p>function pad(str ,len ,c ,dir)<br />
{<br />
var out = String(str);// 原始字符串<br />
if(!c) c = &#8220;0&#8243;;// 如果参数c未定义，则c取默认值“0”<br />
if(!dir) dir = 1; // 如果参数dir未定义，则dir取默认值1<br />
var pad = getString(c ,len &#8211; out.length); // 计算需要填充的字符串<br />
if(dir &gt; 0 ) out= pad + out; // 在左侧填充<br />
else out += pad; // 在右侧填充<br />
return out;<br />
}<br />
alert(pad(&#8221;aaaa&#8221;,8,&#8221;1&#8243;,1));//测试。</p>
<p>看完这个pad函数后，可以发现其最精华的部分在它调用getstring（）函数上，getstring()函数直接返回需要添加的字符串，并且添加的长度也是刚刚好。getstring()函数，最精华的部分在于将需要添加的字符串的长度直接转换成二进制的形式，并用数组保存每一个二进制位。<br />
在分析这个循环之前，让我们先来想一下二进制数转换成十进制从低位到高位的运算。比如 二进制数10100 计算过程是 0*2^0 +0*2^1+1*2^2+0*2^3+1*2^4 = 20（十进制） ;<br />
我们知道高一位的权值是低一位的权值的2倍，因此依次是2^0,2^1,2^2&#8230;.<br />
而我们的运算过程就是这一位的值与这一位的权值相乘的运算，随后各位的运算结果相加。而在getstring()函数中for循环的部分中，我们相当于做了一个根据二进制的值通过给定的字符来扩充字符串长度的操作。当bArr[i]==&#8221;1&#8243;，我们就要进位了，同时要增加&#8221;权值&#8221; ,当改为是0的时候，我们只是增加&#8221;权值&#8221;，就是通过step+=step来实现字符串长度的翻倍。<br />
通过这样一个小技巧，可以很大程度的减少循环的次数，我们可以想象如果添加的字符串的长度是10000 的话，如果按照传统的一次增加一个字符的方式，要循环一万次，而通过这种方式，我们只需要将10000（十进制）转换成10011100010000（二进制），这样14次循环就可以计算出结果。<br />
在此只是通过js来实现了这样一个算法，能够以此来加深对二进制操作的印象。</p>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2009/09/%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%a1%ab%e5%85%85%e5%87%bd%e6%95%b0javascript%e5%ae%9e%e7%8e%b0/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>C语言&#8211;栈要点总结，顺序栈的实现</title>
		<link>http://amberlife.net/2009/03/c%e8%af%ad%e8%a8%80-%e6%a0%88%e8%a6%81%e7%82%b9%e6%80%bb%e7%bb%93%ef%bc%8c%e9%a1%ba%e5%ba%8f%e6%a0%88%e7%9a%84%e5%ae%9e%e7%8e%b0/</link>
		<comments>http://amberlife.net/2009/03/c%e8%af%ad%e8%a8%80-%e6%a0%88%e8%a6%81%e7%82%b9%e6%80%bb%e7%bb%93%ef%bc%8c%e9%a1%ba%e5%ba%8f%e6%a0%88%e7%9a%84%e5%ae%9e%e7%8e%b0/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 03:52:51 +0000</pubDate>
		<dc:creator>amberlife</dc:creator>
				<category><![CDATA[数据结构]]></category>

		<guid isPermaLink="false">http://amberlife.net/?p=46</guid>
		<description><![CDATA[上周学习的数据结构中关于栈，有下面几点，我感觉引起我的重视。

栈的基本操作中，基本上都是在栈顶进行的。比如在栈顶的插入，删除，栈的初始化，栈的判空（S.base == S.top），取栈顶元素等等。所以关于top指针要引起足够的重视和理解。
理解栈和基本线性表的之间的关系。首先，栈就是线性表，栈是一种操作受限的线性表。可以想想就是带着镣铐跳舞的感觉，所以实现的时候必须严格按照栈的定义来执行栈的操作。
栈不存在的条件：base = null;
栈为空的条件：base = top；
栈满的条件：top  &#8211; base = stacksize;


下面是我上周做得实验中的关于顺序栈的部分算法的实现。链式栈的实现，在后续中还会贴出来。一个小实验贴出来，分享一下，共同进步。
实验环境:dev-c++5
定义的头文件SqStack.h。主要完成一些
宏命令的定义， 自定义类型的定义 和 函数的声明

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
&#160;
#define STACK_INIT_SIZE 100  //存储空间初始分配量
#define STACKINCREMENT 10    //存储空间增量 
&#160;
typedef int Status;
typedef int SElemType;
typedef struct
&#123;
        SElemType *base;//栈底指针
     [...]]]></description>
			<content:encoded><![CDATA[<p>上周学习的数据结构中关于栈，有下面几点，我感觉引起我的重视。</p>
<ul>
<li>栈的基本操作中，基本上都是在<span style="color: #ff0000;">栈顶</span>进行的。比如在栈顶的插入，删除，栈的初始化，栈的判空（S.base == S.top），取栈顶元素等等。所以关于top指针要引起足够的重视和理解。</li>
<li>理解栈和基本线性表的之间的关系。首先，<span style="color: #ff0000;">栈就是线性表，栈是一种操作受限的线性表</span>。可以想想就是带着镣铐跳舞的感觉，所以实现的时候必须严格按照栈的定义来执行栈的操作。</li>
<li>栈不存在的条件：base = null;</li>
<li>栈为空的条件：base = top；</li>
<li>栈满的条件：top  &#8211; base = stacksize;</li>
</ul>
<p><span id="more-46"></span></p>
<p>下面是我上周做得实验中的关于顺序栈的部分算法的实现。链式栈的实现，在后续中还会贴出来。一个小实验贴出来，分享一下，共同进步。</p>
<p>实验环境:dev-c++5</p>
<p>定义的头文件SqStack.h。主要完成一些<br />
宏命令的定义， 自定义类型的定义 和 函数的声明</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#define TRUE 1</span>
<span style="color: #339933;">#define FALSE 0</span>
<span style="color: #339933;">#define OK 1</span>
<span style="color: #339933;">#define ERROR 0</span>
<span style="color: #339933;">#define INFEASIBLE -1</span>
<span style="color: #339933;">#define OVERFLOW -2</span>
&nbsp;
<span style="color: #339933;">#define STACK_INIT_SIZE 100  //存储空间初始分配量</span>
<span style="color: #339933;">#define STACKINCREMENT 10    //存储空间增量 </span>
&nbsp;
<span style="color: #993333;">typedef</span> <span style="color: #993333;">int</span> Status<span style="color: #339933;">;</span>
<span style="color: #993333;">typedef</span> <span style="color: #993333;">int</span> SElemType<span style="color: #339933;">;</span>
<span style="color: #993333;">typedef</span> <span style="color: #993333;">struct</span>
<span style="color: #009900;">&#123;</span>
        SElemType <span style="color: #339933;">*</span>base<span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//栈底指针</span>
        SElemType <span style="color: #339933;">*</span>top<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//栈顶指针</span>
        <span style="color: #993333;">int</span> stacksize<span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">//当前已经分配的空间，以元素为单位</span>
<span style="color: #009900;">&#125;</span>SqStack<span style="color: #339933;">;</span>
&nbsp;
Status InitStack<span style="color: #009900;">&#40;</span>SqStack <span style="color: #339933;">*</span>S<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   <span style="color: #666666; font-style: italic;">//构造一个空栈</span>
Status Push<span style="color: #009900;">&#40;</span>SqStack <span style="color: #339933;">*</span>s<span style="color: #339933;">,</span>SElemType e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//压栈操作</span>
Status Pop <span style="color: #009900;">&#40;</span>SqStack <span style="color: #339933;">*</span>s<span style="color: #339933;">,</span>SElemType <span style="color: #339933;">*</span>e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//出栈操作</span></pre></div></div>

<p>文件SqStack.c 完成顺序表中的部分基本操作函数的定义。</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &quot;SqStack.h&quot;</span>
<span style="color: #339933;">#include</span>
<span style="color: #339933;">#include </span>
&nbsp;
Status InitStack<span style="color: #009900;">&#40;</span>SqStack <span style="color: #339933;">*</span>S<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>base<span style="color: #339933;">=</span><span style="color: #009900;">&#40;</span>SElemType <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span>STACK_INIT_SIZE<span style="color: #339933;">*</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>SElemType<span style="color: #009900;">&#41;</span><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: #339933;">!</span>S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>base<span style="color: #009900;">&#41;</span> exit<span style="color: #009900;">&#40;</span>OVERFLOW<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>top <span style="color: #339933;">=</span> S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>base<span style="color: #339933;">;</span>
    S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>stacksize <span style="color: #339933;">=</span> STACK_INIT_SIZE<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> OK<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #666666; font-style: italic;">//InitStack</span>
&nbsp;
Status Push<span style="color: #009900;">&#40;</span>SqStack <span style="color: #339933;">*</span>S<span style="color: #339933;">,</span>SElemType e<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>top <span style="color: #339933;">-</span> S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>base<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span>S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>stacksize<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>base <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>SElemType<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>realloc<span style="color: #009900;">&#40;</span>S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>base<span style="color: #339933;">,</span><span style="color: #009900;">&#40;</span>S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>stacksize<span style="color: #339933;">+</span>STACKINCREMENT<span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>
                   <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>SElemType<span style="color: #009900;">&#41;</span><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: #339933;">!</span>S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>base<span style="color: #009900;">&#41;</span> exit<span style="color: #009900;">&#40;</span>OVERFLOW<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>top <span style="color: #339933;">=</span> S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>base <span style="color: #339933;">+</span> S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>stacksize<span style="color: #339933;">;</span>
        S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>stacksize <span style="color: #339933;">+=</span> STACKINCREMENT<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span>S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>top<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> e<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//加一句老师讲的入栈口诀：“先压后加”，</span>
                     <span style="color: #666666; font-style: italic;">//可以看到元素先压入栈中，然后栈顶指针指向栈顶元素的下一个位置</span>
    <span style="color: #b1b100;">return</span> OK<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #666666; font-style: italic;">//Push</span>
&nbsp;
Status Pop<span style="color: #009900;">&#40;</span>SqStack <span style="color: #339933;">*</span>S<span style="color: #339933;">,</span>SElemType <span style="color: #339933;">*</span>e<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>top <span style="color: #339933;">==</span> S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>base<span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> ERROR<span style="color: #339933;">;</span>
    <span style="color: #339933;">*</span>e <span style="color: #339933;">=</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">--</span>S<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>top<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//出栈口诀：“先减后弹”</span>
                      <span style="color: #666666; font-style: italic;">//可以看到栈顶指针先执行--操作，保证栈顶指针指向栈顶元素，然后弹出栈</span>
    <span style="color: #b1b100;">return</span> OK<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #666666; font-style: italic;">//Pop</span></pre></div></div>

<p>main.c文件，测试用的主函数，这个文件借鉴了上课是老师讲的利用函数返回的状态参量来作为循环终止的判断条件。</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">include
<span style="color: #339933;">#include </span>
&nbsp;
<span style="color: #339933;">#include &quot;SqStack.h&quot;</span>
&nbsp;
<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>
  <span style="color: #993333;">int</span> i <span style="color: #339933;">;</span>
  SqStack S <span style="color: #339933;">;</span>
  InitStack<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>S<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//构造一个空栈</span>
  <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span><span style="color: #0000dd;">10</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
    Push<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>S<span style="color: #339933;">,</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//压栈操作，压入10个元素 0，1，2，3.....9；</span>
  <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
      SElemType e<span style="color: #339933;">;</span>
      <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> Pop<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>S<span style="color: #339933;">,&amp;</span>amp<span style="color: #339933;">;</span>e<span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span>ERROR<span style="color: #009900;">&#41;</span><span style="color: #666666; font-style: italic;">//出栈操作，10个元素全部出栈，</span>
          <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>            <span style="color: #666666; font-style: italic;">//可以看到通过判断Pop返回值的状态，来终止循环的执行</span>
      <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>e<span style="color: #009900;">&#41;</span><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: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>程序都在DEV-C++中测试过了，如果有问题，可以发邮件给我,共同讨论进步。<br />
我的邮箱zhanglong19890125@163.com</p>
]]></content:encoded>
			<wfw:commentRss>http://amberlife.net/2009/03/c%e8%af%ad%e8%a8%80-%e6%a0%88%e8%a6%81%e7%82%b9%e6%80%bb%e7%bb%93%ef%bc%8c%e9%a1%ba%e5%ba%8f%e6%a0%88%e7%9a%84%e5%ae%9e%e7%8e%b0/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
