<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>Another Space</title>
    <description></description>
    <link>http://kitsionchen.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>优先队列(上)</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/133865" style="color:red;">http://kitsionchen.javaeye.com/blog/133865</a>&nbsp;
          发表时间: 2007年10月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font size="3"><strong><font color="#0000ff">package kitsion.util;</font><br />
<br />
<font color="#0000ff">/**<br />
&nbsp;* PriorityQueue class implemented via the binary heap.<br />
&nbsp;*/<br />
</font><font color="#800080">public class PriorityQueue&lt;AnyType&gt; extends AbstractCollection&lt;AnyType&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; implements Queue&lt;AnyType&gt; {<br />
&nbsp;&nbsp;&nbsp; public PriorityQueue() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; currentSize = 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cmp = null;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; array = (AnyType[]) new Object[DEFAULT_CAPACITY + 1];<br />
&nbsp;&nbsp;&nbsp; }<br />
</font><br />
&nbsp;&nbsp;&nbsp;<font color="#0000ff"> /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* Construct an empty PriorityQueue with a specified comparator<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param c<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/</font><br />
&nbsp;<font color="#800080">&nbsp;&nbsp; public PriorityQueue(Comparator&lt;? super AnyType&gt; c) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; currentSize = 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cmp = c;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; array = (AnyType[]) new Object[DEFAULT_CAPACITY + 1];<br />
&nbsp;&nbsp;&nbsp; }</font><br />
<br />
&nbsp;&nbsp;&nbsp; <font color="#0000ff">/**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* Construct a PriorityQueue from another Collection<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param coll<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/</font><br />
&nbsp;&nbsp;&nbsp;<font color="#800080"> public PriorityQueue(Collection&lt;? extends AnyType&gt; coll) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cmp = null;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; currentSize = coll.size();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; array = (AnyType[]) new Object[(currentSize + 2) * 11 / 10];<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int i = 1;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (AnyType item : coll)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; array[i++] = item;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buildHeap();<br />
&nbsp;&nbsp;&nbsp; }</font><br />
<br />
&nbsp;&nbsp;<font color="#0000ff">&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* Returns the number of items in this PriorityQueue<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/</font><br />
<font color="#800080">&nbsp;&nbsp;&nbsp; public int size() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return currentSize;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public void clear() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; currentSize = 0;<br />
&nbsp;&nbsp;&nbsp; }</font><br />
<br />
&nbsp;&nbsp;&nbsp; <font color="#0000ff">/**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* Returns an iterator over the elements in this PriorityQueue<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/</font><br />
&nbsp;&nbsp;&nbsp;<font color="#800080"> public Iterator&lt;AnyType&gt; iterator() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return new Iterator&lt;AnyType&gt;() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int current = 0;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public boolean hasNext() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return current != size();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public AnyType next() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (hasNext())<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return array[++current];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new NoSuchElementException();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void remove() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new UnsupportedOperationException();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp; }</font><br />
<br />
&nbsp;&nbsp;<font color="#0000ff">&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* Returns the smallest item in the priority queue<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/</font><br />
<font color="#800080">&nbsp;&nbsp;&nbsp; public AnyType element() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (isEmpty())<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new NoSuchElementException();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return array[1];<br />
&nbsp;&nbsp;&nbsp; }<br />
</font><br />
&nbsp;&nbsp;&nbsp;<font color="#0000ff"> /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* Adds an item to this PriorityQueue.<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/</font><br />
&nbsp;<font color="#800080">&nbsp;&nbsp; public boolean add(AnyType x) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (currentSize + 1 == array.length)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; doubleArray();</font><br />
&nbsp;&nbsp;&nbsp; &nbsp;<font color="#0000ff">&nbsp;&nbsp; /* 详细注解: 增加堆的当前大小,并设置空结点为新增加的结点 */</font><br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <font color="#800080">int hole = ++currentSize;</font><br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<font color="#0000ff">&nbsp; /* 详细注解: 把x作为负无穷标志,放入位置0 */</font><br />
<font color="#800080">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; array[0] = x;</font><br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;<font color="#0000ff">&nbsp;&nbsp; /* 详细注解: 只要父结点中的项大于x,重复执行向上过滤的策略,指将父结点中的项下移到空结点中,然后将空结点上移到父结点 */</font><br />
&nbsp;&nbsp;<font color="#800080">&nbsp; &nbsp;&nbsp;&nbsp; for (; compare(x, array[hole / 2]) &lt; 0; hole /= 2)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; array[hole] = array[hole / 2];<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; array[hole] = x;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return true;<br />
&nbsp;&nbsp;&nbsp; }<br />
</font><br />
&nbsp;<font color="#0000ff">&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* Removes the smallest item in the priority queue.<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/</font><br />
&nbsp;&nbsp;<font color="#800080">&nbsp; public AnyType remove() {<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; AnyType minItem = element();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; array[1] = array[currentSize--];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; percolateDown(1);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return minItem;<br />
&nbsp;&nbsp;&nbsp; }</font><br />
<br />
&nbsp;&nbsp;&nbsp; <font color="#0000ff">/**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 详细注解: percolateDown的一个参数指示空结点的位置,然后空结点中项被移出,开台向下过滤,<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 当没有左孩子,循环结束,因为偶数大小的堆里的最后一个结点是仅有一个子结点,所以还要在向下过滤 中,进行测试.<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param hole<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/</font><br />
&nbsp;&nbsp;&nbsp; <font color="#800080">public void percolateDown(int hole) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int child;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; AnyType tmp = array[hole];<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (; hole * 2 &lt;= currentSize; hole = child) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; child = 2 * hole;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (child != currentSize<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &amp;&amp; compare(array[child + 1], array[child]) &lt; 0)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; child++;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (compare(array[child], tmp) &lt; 0)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; array[hole] = array[child];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; array[hole] = tmp;<br />
&nbsp;&nbsp;&nbsp; }</font><br />
<font color="#0000ff"><br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 逆序采用向下过滤策略,构造有序堆<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/</font><br />
&nbsp;&nbsp;&nbsp;<font color="#800080"> public void buildHeap() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int i = currentSize / 2; i &gt; 0; i--)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; percolateDown(i);<br />
&nbsp;&nbsp;&nbsp; }</font><br />
<br />
&nbsp;&nbsp;&nbsp; <font color="#800080">// number of elements in heap<br />
&nbsp;&nbsp;&nbsp; private int currentSize;<br />
<br />
&nbsp;&nbsp;&nbsp; // The heap array<br />
&nbsp;&nbsp;&nbsp; private AnyType[] array;<br />
<br />
&nbsp;&nbsp;&nbsp; private Comparator&lt;? super AnyType&gt; cmp;<br />
<br />
&nbsp;&nbsp;&nbsp; private static final int DEFAULT_CAPACITY = 100;<br />
</font><br />
&nbsp;&nbsp;&nbsp;<font color="#0000ff"> /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* Internal method to extend array<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/</font><br />
&nbsp;&nbsp;&nbsp;<font color="#800080"> private void doubleArray() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; AnyType[] newArray;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; newArray = (AnyType[]) new Object[array.length * 2];<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; array.length; i++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; newArray[i] = array[i];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; array = newArray;<br />
&nbsp;&nbsp;&nbsp; }</font><br />
<br />
&nbsp;&nbsp;&nbsp;<font color="#0000ff"> /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* Compares lhs and rhs using comparator if provided by cmp, or the default<br />
&nbsp;&nbsp;&nbsp; &nbsp;* comarator<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param lhs<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param rhs<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/</font><br />
&nbsp;&nbsp;<font color="#800080">&nbsp; private int compare(AnyType lhs, AnyType rhs) {<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (cmp == null)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return ((Comparable) lhs).compareTo(rhs);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return cmp.compare(lhs, rhs);<br />
&nbsp;&nbsp;&nbsp; }<br />
</font><br />
}<br />
</strong></font>
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/133865#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 20 Oct 2007 21:16:11 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/133865</link>
        <guid>http://kitsionchen.javaeye.com/blog/133865</guid>
      </item>
      <item>
        <title>随机化</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/127860" style="color:red;">http://kitsionchen.javaeye.com/blog/127860</a>&nbsp;
          发表时间: 2007年09月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>慢慢开始有感觉数学对写程序有很多影响.真后悔上上学期的离散数学和概率老是逃课!!<br />
拜读了云风老大的&quot;泊松分布&quot;联想到要有较好的数学和概率基础才能搞出所谓的随机化算法.<br />
搞一个例子吧:<br />
泊松分布一般适用于发生一次的概率很小事件.例如:一门很容易的考试,结果还是有一两个不及格(失礼了,小弟曾经是其中一个.),还有比如购买彩票等等事件,中奖概率很小的事件.假如中奖概率为14000000:1,假设抽取的号码是随机的而且独立的,如果一个人购买彩票越多,中奖概率增加,但两个人买一样多的彩票,概率不会增加,因为是事件独立的.<br />
当中奖人数的期望为2时的彩票中奖者分布如下所示:<br />
中奖彩票数&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 4&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 5<br />
概率&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 0.135 &nbsp;&nbsp;&nbsp; 0.271&nbsp;&nbsp;&nbsp; 0.272&nbsp;&nbsp;&nbsp; 0.180&nbsp;&nbsp;&nbsp; 0.090&nbsp;&nbsp;&nbsp; 0.036<br />
<br />
为了产生一个泊松分布且期望为a的随机无符号数,可以采用重复产生区间(0,1)中均匀分布的随机数直至乘积小于或等于e^(-a),(引用一本国外有关教材采用的策略)在程序代码中把均匀分布的随机数的对数相加,直至所产生的和小于或等于-a.<br />
<br />
代码如下:<br />
<br />
package kitsion.util;<br />
/*Random number clas, using a 31-bit<br />
线性同余数算法产生均匀分布(linear congruential generator)<br />
*/<br />
public class Random2<br />
{<br />
&nbsp;&nbsp;&nbsp; private static final int A = 48271;<br />
&nbsp;&nbsp;&nbsp; private static final int M = 2147483647;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //=2^31-1,素数<br />
&nbsp;&nbsp;&nbsp; private&nbsp;&nbsp;&nbsp; static final int Q = M/A;<br />
&nbsp;&nbsp;&nbsp; private static final int R = M%A;<br />
&nbsp;&nbsp;&nbsp; private int state;<br />
<br />
&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp; *Construct this Random object with initial state obtained from system clock.<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public Random2()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this((int)(System.currentTimeMillis() % Integer.MAX_VALUE));<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp; *Construct this Random object with specified initial state.<br />
&nbsp;&nbsp;&nbsp; *@param initialValue the initial value<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public Random2(int initialValue)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(initialValue &lt; 0)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; initialValue += M;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; state = initialValue;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(state &lt;= 0)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; state = 1;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp; *Return a preudorandom int, and change the initial state.<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public int nextInt()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int tmpState = A * (state % Q) - R * (state / Q);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(tmpState &gt;= 0)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; state = tmpState;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; state = tmpState + M;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return state;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp; *Return a pseudorandom double in the open range0..1<br />
&nbsp;&nbsp;&nbsp; *and change the internal state<br />
&nbsp;&nbsp;&nbsp; *@return the pseudorandom double<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public double nextDouble()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return (double)nextInt() / M;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp; *Return an int using a Poisson distribution, and change the internal state.<br />
&nbsp;&nbsp;&nbsp; *@param expectedValue the mean of the distribute<br />
&nbsp;&nbsp;&nbsp; *@return the pseudorandom int.(柏松分布,由均匀分布产生非均匀分布)<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public int nextPoisson(double expectedValue)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double limit = -expectedValue;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double product = Math.log(nextDouble());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int count;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(count = 0; product&gt;limit; count++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; product += Math.log(nextDouble());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return count;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;/*<br />
&nbsp;&nbsp;&nbsp; &nbsp;*Method to swap to elements in an array.<br />
&nbsp;&nbsp;&nbsp; &nbsp;*@param a an array of objects<br />
&nbsp;&nbsp;&nbsp; &nbsp;*@param index1 the index of the first object.<br />
&nbsp;&nbsp;&nbsp; &nbsp;*@param index2 the index of the second object<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; &nbsp;private static final &lt;AnyType&gt; void swapReferences(AnyType[] a, int index1, int index2)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; AnyType tmp = a[index1];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; a[index1] = a[index2];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; a[index2] = tmp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp;&nbsp; //Test program<br />
&nbsp;&nbsp;&nbsp; public static void main(String[] args)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Random2 r = new Random2();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; 20; i++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(r.nextInt());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int[] dist = new int[10000];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; final int SAMPLES = 1000000;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; SAMPLES; i++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; dist[r.nextPoisson(2)]++;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; 10; i++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(i + &quot;中奖概率: &quot; + dist[i] / (double)SAMPLES);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
运行结果:</strong><br />
<br />
<font color="#800000">1379218482<br />
2114803975<br />
920033433<br />
972024383<br />
218788490<br />
1962108491<br />
320201773<br />
1019977024<br />
2100834382<br />
903674888<br />
1602680784<br />
2053224936<br />
555609312<br />
2041315816<br />
1216095188<br />
665329203<br />
488017128<br />
1326661745<br />
1326739355<br />
778084371<br />
0中奖概率: 0.13589<br />
1中奖概率: 0.270387<br />
2中奖概率: 0.270704<br />
3中奖概率: 0.18035<br />
4中奖概率: 0.090164<br />
5中奖概率: 0.036003<br />
6中奖概率: 0.011939<br />
7中奖概率: 0.003439<br />
8中奖概率: 8.86E-4<br />
9中奖概率: 1.95E-4</font>
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/127860#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 28 Sep 2007 11:54:11 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/127860</link>
        <guid>http://kitsionchen.javaeye.com/blog/127860</guid>
      </item>
      <item>
        <title>连续子序列最大和问题(java code)</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124614" style="color:red;">http://kitsionchen.javaeye.com/blog/124614</a>&nbsp;
          发表时间: 2007年09月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font size="2" color="#800080">import java.util.Random;<br />
/**<br />
*Maximum continguous subsequence sum algorithm<br />
*连续子序列最大和问题<br />
*/<br />
public class MaxSubSequenceSum<br />
{<br />
&nbsp;&nbsp;&nbsp; static int seqStart = 0;<br />
&nbsp;&nbsp;&nbsp; static int seqEnd = -1;<br />
&nbsp;&nbsp;&nbsp; private static Random rand = new Random( );<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; *1.Cubic maximum contiguous subsequence sum algorithm.<br />
&nbsp;&nbsp;&nbsp; *seqStart and seqEnd respresent the actual best sequence.<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public static int maxSubSum1(int[] a)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int maxSum = 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; a.length; i++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int j = i; j &lt; a.length; j++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int temp = 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int k = i; k &lt;= j; k++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; temp += a[k];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(temp &gt; maxSum)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxSum = temp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; seqStart = i;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; seqEnd = j;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return maxSum;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; *2.Square maximum contiguous subsequence sum algorithm.<br />
&nbsp;&nbsp;&nbsp; *seqStart and seqEnd represent the actual best sequence<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public static int maxSubSum2(int[] a)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int maxSum = 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; a.length; i++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int temp = 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int j = i; j &lt; a.length; j++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; temp += a[j];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(temp &gt; maxSum)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxSum = temp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; seqStart = i;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; seqEnd = j;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return maxSum;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; *3.Linear-time maximum contiguous subsequence sum algorithm.<br />
&nbsp;&nbsp;&nbsp; *seqStart and seqEnd represent the actual best sequence<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public static int maxSubSum3(int[] a)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int maxSum = 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int temp = 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i = 0, j = 0; j &lt; a.length; j++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; temp += a[j];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(temp &gt; maxSum)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxSum = temp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; seqStart = i;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; seqEnd = j;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else if(temp &lt; 0)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; i = j+1;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; temp = 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return maxSum;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; *4.Use divide-and-conquer method maximum contiguous<br />
&nbsp;&nbsp;&nbsp; *subsequence sum algorithm.<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public static int maxSubSumRec(int[] a, int left, int right)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int maxLeftBorderSum = 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int maxRightBorderSum = 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int leftBorderSum = 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int rightBorderSum = 0;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int center = (left+right)/2;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(left == right)&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //only have a number<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return a[left] &gt; 0 ? a[left] : 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int maxLeftSum = maxSubSumRec(a, left, center);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int maxRightSum = maxSubSumRec(a, center+1, right);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i = center; i &gt;= left; i--)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; leftBorderSum += a[i];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(leftBorderSum &gt; maxLeftBorderSum)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxLeftBorderSum = leftBorderSum;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i = center+1; i &lt;= right; i++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; rightBorderSum += a[i];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(rightBorderSum &gt; maxRightBorderSum)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxRightBorderSum = rightBorderSum;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return ThreeOfMax(maxLeftSum,maxRightSum,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; (maxLeftBorderSum+maxRightBorderSum));<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; private static int ThreeOfMax(int a, int b, int c)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return a&gt;b ? a&gt;c ? a : c : b&gt;c ? b : c;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public static int maxSubSum4(int[] a)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return a.length &gt; 0 ? maxSubSumRec(a, 0, a.length-1) : 0;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public static void getTimingInfo(int n, int algorithm)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int[] test = new int[n];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; long startTime = System.currentTimeMillis();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; long totalTime = 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int i;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(i = 0; totalTime &lt; 4000; i++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int j = 0; j &lt; test.length; j++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; test[j] = rand.nextInt(100) - 50;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; switch(algorithm)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 1:<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxSubSum1(test);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 2:<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxSubSum2(test);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 3:<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxSubSum3(test);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 4:<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxSubSum4(test);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; totalTime = System.currentTimeMillis() - startTime;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;Algorithm--&gt;&quot; + algorithm<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + &quot;\tN= &quot; + test.length + &quot;\t&quot;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + &quot;\tTime= &quot; + (totalTime*1000/i) + &quot; ms&quot;);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**Simple test programe*/<br />
&nbsp;&nbsp;&nbsp; public static void main(String[] args)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int a[] = {4,-3,5,-2,-1,2,6,-1};<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int maxSum;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxSum = maxSubSum1(a);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; print(maxSum);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxSum = maxSubSum2(a);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; print(maxSum);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxSum = maxSubSum3(a);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; print(maxSum);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxSum = maxSubSum4( a );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println( &quot;Max sum is &quot; + maxSum );<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int n = 10; n &lt;=10000000; n*=10)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int algorithm = 4; algorithm &gt;= 1; algorithm--)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(algorithm == 1 &amp;&amp; n &gt; 50000)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; continue;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; getTimingInfo(n, algorithm);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; private static void print(int maxSum)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println( &quot;Max sum is &quot; + maxSum + &quot;; it goes&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + &quot; from &quot; + seqStart + &quot; to &quot; + seqEnd );<br />
&nbsp;&nbsp;&nbsp; }&nbsp;  <br />
}<br />
<br />
<font color="#ff0000">Answer:<br />
Algorithm--&gt;4&nbsp;&nbsp; N= 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time= 1 ms<br />
Algorithm--&gt;3&nbsp;&nbsp; N= 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time= 0 ms<br />
Algorithm--&gt;2&nbsp;&nbsp; N= 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time= 1 ms<br />
Algorithm--&gt;1&nbsp;&nbsp; N= 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time= 2 ms<br />
Algorithm--&gt;4&nbsp;&nbsp; N= 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time= 20 ms<br />
Algorithm--&gt;3&nbsp;&nbsp; N= 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time= 8 ms<br />
Algorithm--&gt;2&nbsp;&nbsp; N= 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time= 31 ms<br />
Algorithm--&gt;1&nbsp;&nbsp; N= 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time= 709 ms<br />
Algorithm--&gt;4&nbsp;&nbsp; N= 1000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time= 219 ms<br />
Algorithm--&gt;3&nbsp;&nbsp; N= 1000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time= 81 ms<br />
Algorithm--&gt;2&nbsp;&nbsp; N= 1000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time= 2214 ms<br />
Algorithm--&gt;1&nbsp;&nbsp; N= 1000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time= 600428 ms<br />
Algorithm--&gt;4&nbsp;&nbsp; N= 10000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time= 2368 ms<br />
Algorithm--&gt;3&nbsp;&nbsp; N= 10000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time= 814 ms<br />
Algorithm--&gt;2&nbsp;&nbsp; N= 10000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time= 222222 ms<br />
</font></font>
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124614#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 17 Sep 2007 07:51:43 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124614</link>
        <guid>http://kitsionchen.javaeye.com/blog/124614</guid>
      </item>
      <item>
        <title>LPI 102 考试准备，主题 111：管理任务</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124615" style="color:red;">http://kitsionchen.javaeye.com/blog/124615</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在这个教程中，Ian Shields 将继续帮助您准备参加 Linux Professional Institute 的初级管理（LPIC-1）考试 102。这是 9 篇系列教程中的第 6 篇。在本教程中，Ian 将向您介绍管理任务。在学完本教程之后，您将掌握如何管理用户和组、设置用户配置文件和环境、使用日志文件、调度作业、备份数据和维护系统时间。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124615#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:48 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124615</link>
        <guid>http://kitsionchen.javaeye.com/blog/124615</guid>
      </item>
      <item>
        <title>在 Linux on POWER 上利用透明大内存页</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124616" style="color:red;">http://kitsionchen.javaeye.com/blog/124616</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          通过本文，了解更多有关 libhugetlbfs 库以及如何将这些库与 GNU
      Compiler Collection (GCC) 或 IBM XL C/C++ 及 XL Fortran compilers for Linux(R) 结合使用的信息。libhugetlbfs 是一个开源社区项目，可为客户应用程序提供到系统大内存页的透明访问。SUSE Linux Enterprise Server
      10 (SLES 10) 和 Red Hat Enterprise Server Linux 5 (RHEL 5) 现均支持
      libhugetlbfs。尽管大量支持 Linux 大内存页的硬件平台也都支持 libhugetlbfs，但本文只侧重于介绍基于 IBM POWER 处理器的系统上的 16MB 大内存页支持。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124616#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:47 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124616</link>
        <guid>http://kitsionchen.javaeye.com/blog/124616</guid>
      </item>
      <item>
        <title>Linux 技巧: 控制预定作业的持续时间</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124617" style="color:red;">http://kitsionchen.javaeye.com/blog/124617</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          假设您需要在深夜里运行 30 分钟某些 trace 程序以调试一个棘手的问题，或者您希望将 Linux 系统当作闹钟使唤。本文介绍的技巧将帮助您在运行一段时间（或满足其他条件）后停止执行某些作业，例如使用 cron 和 at 功能启动的作业。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124617#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:46 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124617</link>
        <guid>http://kitsionchen.javaeye.com/blog/124617</guid>
      </item>
      <item>
        <title>在 POWER5 上配置 SUSE Linux 实现性能最大化</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124618" style="color:red;">http://kitsionchen.javaeye.com/blog/124618</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          IBM POWER5(TM) 和 POWER5+(TM) 系统提供了非常优秀的虚拟化能力。通过阅读本文，您将理解影响运行 SUSE Linux Enterprise Server (SLES) 10 的 IBM POWER5 系统虚拟化性能的因素，并学习如何使用一些可以帮助诊断和解决性能问题的工具。您还将看到几个如何测试和改进性能的例子。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124618#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:46 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124618</link>
        <guid>http://kitsionchen.javaeye.com/blog/124618</guid>
      </item>
      <item>
        <title>Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 3 部分: Systemtap</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124619" style="color:red;">http://kitsionchen.javaeye.com/blog/124619</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本系列文章详细地介绍了一个Linux下的全新的调式、诊断和性能测量工具Systemtap和它所依赖的基础kprobe以及促使开发该工具的先驱DTrace并给出实际使用例子使读者更进一步了解和认识这些工具。
本文是该系列文章之三，它讲解了Systemtap的原理，Systemtap与DTrace比较，以及安装要求和安装步骤，最后通过一个例子向读者展示Systemtap的工作机理。本系列文章之一讲解了kprobe的原理、编程接口、局限性和使用注意事项并给出实际使用示例帮助读者理解和认识kprobe。本系列文章之二讲解了DTrace的原理。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124619#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:45 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124619</link>
        <guid>http://kitsionchen.javaeye.com/blog/124619</guid>
      </item>
      <item>
        <title>linux 技巧：使用 screen 管理你的远程会话</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124620" style="color:red;">http://kitsionchen.javaeye.com/blog/124620</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          你是不是经常需要远程登录到Linux服务器？你是不是经常为一些长时间运行的任务头疼？还在用 nohup 吗？那么来看看 screen 吧，它会给你一个惊喜！
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124620#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:45 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124620</link>
        <guid>http://kitsionchen.javaeye.com/blog/124620</guid>
      </item>
      <item>
        <title>Linux 下的一个全新的性能测量和调式诊断工具 Systemtap，第 1 部分: kprobe</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124621" style="color:red;">http://kitsionchen.javaeye.com/blog/124621</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本系列文章详细地介绍了一个Linux下的全新的调式、诊断和性能测量工具Systemtap和它所依赖的基础kprobe以及促使开发该工具的先驱DTrace并给出实际使用例子使读者更进一步了解和认识这些工具。
本文是该系列文章之一，它讲解了kprobe的原理、编程接口、局限性和使用注意事项并给出实际使用示例帮助读者理解和认识kprobe。本系列文章之二讲解了DTrace以及Systemtap与DTrace比较。本系列文章之三讲解了Systemtap的原理，并通过一个例子向读者展示Systemtap的工作机理。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124621#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:44 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124621</link>
        <guid>http://kitsionchen.javaeye.com/blog/124621</guid>
      </item>
      <item>
        <title>Linux 技巧: Bash 参数和参数扩展</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124622" style="color:red;">http://kitsionchen.javaeye.com/blog/124622</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          您是否有时想知道如何对脚本使用参数，以及如何将参数传递给内部函数或其他脚本？是否需要对参数或选项做一些简单的有效性测试？或者对参数字符串执行一些简单的析取和替换操作？本文将向您介绍参数的用法和 bash shell 中的各种参数扩展。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124622#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:44 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124622</link>
        <guid>http://kitsionchen.javaeye.com/blog/124622</guid>
      </item>
      <item>
        <title>Linux 技巧: 用 cron 和 at 调度作业</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124623" style="color:red;">http://kitsionchen.javaeye.com/blog/124623</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          系统管理员需要在系统负载低的午夜运行作业，或者需要每天或每周运行作业，同时又不愿意牺牲睡眠时间或假期。调度任务的其他原因包括自动执行日常任务或者确保每次都以相同的方式处理任务。本文帮助您使用 cron 和 at 功能调度作业定期运行或在指定的时间运行一次。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124623#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:43 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124623</link>
        <guid>http://kitsionchen.javaeye.com/blog/124623</guid>
      </item>
      <item>
        <title>LAMP 系统性能调优，第 3 部分: MySQL 服务器调优</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124624" style="color:red;">http://kitsionchen.javaeye.com/blog/124624</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          如今，开发人员不断地开发和部署使用 LAMP（Linux、Apache、MySQL 和 PHP/Perl）架构的应用程序。但是，服务器管理员常常对应用程序本身没有什么控制能力，因为应用程序是别人编写的。这份共三部分的系列文章将讨论许多服务器配置问题，这些配置会影响应用程序的性能。本文是本系列文章的第三部分，也是最后一部分，将重点讨论为实现最高效率而对数据库层进行的调优。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124624#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:43 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124624</link>
        <guid>http://kitsionchen.javaeye.com/blog/124624</guid>
      </item>
      <item>
        <title>利用隧道感受IPV6</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124625" style="color:red;">http://kitsionchen.javaeye.com/blog/124625</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本文简单介绍了IPV6的相关知识，描述了如何通过Hurricane Electric提供的免费IPV6隧道，连接到IPV6网络的方法。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124625#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:42 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124625</link>
        <guid>http://kitsionchen.javaeye.com/blog/124625</guid>
      </item>
      <item>
        <title>使用 GDB 调试多进程程序</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124626" style="color:red;">http://kitsionchen.javaeye.com/blog/124626</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          GDB 是 linux 系统上常用的调试工具，本文介绍了使用 GDB 调试多进程程序的几种方法，并对各种方法进行比较。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124626#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:42 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124626</link>
        <guid>http://kitsionchen.javaeye.com/blog/124626</guid>
      </item>
      <item>
        <title>从文件 I/O 看 Linux 的虚拟文件系统</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124627" style="color:red;">http://kitsionchen.javaeye.com/blog/124627</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Linux 允许众多不同的文件系统共存，并支持跨文件系统的文件操作，这是因为有虚拟文件系统的存在。虚拟文件系统，即VFS（Virtual File System）是 Linux 内核中的一个软件抽象层。它通过一些数据结构及其方法向实际的文件系统如 ext2，vfat 提供接口机制。本文在简要介绍 VFS 的相关数据结构后，以文件 I/O 为切入点深入 Linux 内核源代码，追踪了 sys_open 和 sys_read 两个系统调用的代码结构，并在追踪的过程中理清了跨文件系统的文件操作的基本原理和“一切皆是文件”的口号得以实现的根本。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124627#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:41 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124627</link>
        <guid>http://kitsionchen.javaeye.com/blog/124627</guid>
      </item>
      <item>
        <title>UNIX 新手指南，第4部分: 一些很好的 Shell 诀窍</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124628" style="color:red;">http://kitsionchen.javaeye.com/blog/124628</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          当编写 Shell 程序时，您通常会遇到一些特殊的情况，希望采用自动方式处理。本教程包括一些关于此类情况的 Bourne Shell 脚本示例。这些情况包括字符串的进制转换（十进制到十六进制、十六进制到十进制、十进制到八进制，等等）、在管道循环中读取键盘、Subshell 执行、内联输入、为目录中的每个文件执行一次命令，以及使用多种方法构造连续循环。本系列文章的第 4 部分总结了一批执行有用功能的 Shell 单命令行程序。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124628#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:41 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124628</link>
        <guid>http://kitsionchen.javaeye.com/blog/124628</guid>
      </item>
      <item>
        <title>工业级的 Linux 锁定，第 2 部分：只执行签名的二进制代码</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124629" style="color:red;">http://kitsionchen.javaeye.com/blog/124629</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本教程是含两部分的系列教程的第二部分，这个系列介绍了为何要锁定 Linux机器来理顺相关的支持和管理过程，本教程讲解如何对 Linux 内核进行配置，使其只执行签名的二进制代码。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124629#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:40 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124629</link>
        <guid>http://kitsionchen.javaeye.com/blog/124629</guid>
      </item>
      <item>
        <title>Shell脚本调试技术</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124630" style="color:red;">http://kitsionchen.javaeye.com/blog/124630</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本文全面系统地介绍了shell脚本调试技术，包括使用echo, tee, trap等命令输出关键信息，跟踪变量的值，在脚本中植入调试钩子，使用“-n”选项进行shell脚本的语法检查， 使用“-x”选项实现shell脚本逐条语句的跟踪，巧妙地利用shell的内置变量增强“-x”选项的输出信息等。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124630#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:40 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124630</link>
        <guid>http://kitsionchen.javaeye.com/blog/124630</guid>
      </item>
      <item>
        <title>嵌入式 Linux 产品的 safe mode 设计与实现</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124631" style="color:red;">http://kitsionchen.javaeye.com/blog/124631</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          目前的各种嵌入式产品已经丰富多彩，它们正改变着我们的生活方式。随着嵌入式产品功能的增加，如何让用户对已购买的产品的升级能安全地、顺利地完成，避免升级过程中出现的意外掉电所引起的产品故障，这样的问题要求嵌入产品设计开发者在设计时就将产品的 safe mode 安全模式考虑进去。
这里我们将以一个嵌入式Linux 网络播放器为例，来说明 safe mode 安全模式的设计与实现。通过本文，我们可以了解到针对一个实际的嵌入式系统，设计中需要注意的技术要点和实现细节。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124631#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:39 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124631</link>
        <guid>http://kitsionchen.javaeye.com/blog/124631</guid>
      </item>
      <item>
        <title>使用 gperf 实现高效的 C/C++ 命令行处理</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124632" style="color:red;">http://kitsionchen.javaeye.com/blog/124632</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          GNU 的 gperf 工具是一种 “完美的” 散列函数，可以为用户提供的一组特定字符串生成散列表、散列函数和查找函数的 C/C++ 代码。通过本文学习如何使用 gperf 实现 C/C++ 代码中高效的命令行处理。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124632#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:39 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124632</link>
        <guid>http://kitsionchen.javaeye.com/blog/124632</guid>
      </item>
      <item>
        <title>PS3 fab-to-lab，第 1 部分: 从 Sony PLAYSTATION 3 构建 Linux 实验设备</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124633" style="color:red;">http://kitsionchen.javaeye.com/blog/124633</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          如何将 Cell Broadband Engine（Cell/B.E.）处理器从一个现成的 Sony PLAYSTATION 3（PS3）上取下来，用它来构造一个基于 Linux 的实验设备呢（也就是，将现有的产品 Cell/B.E. 还原成实验设备）？在本系列文章中，Lewin Edwards 将向您展示如何从游戏控制台转到音频带宽频谱分析器和函数生成器。首先，他将介绍本项目的设计内容，然后在您开始着手在 Cell/B.E. 处理器上生成并分析信号时详细介绍用户接口的实现。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124633#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:39 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124633</link>
        <guid>http://kitsionchen.javaeye.com/blog/124633</guid>
      </item>
      <item>
        <title>发行版丛林探险</title>
        <author>kitsionchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kitsionchen.javaeye.com">kitsionchen</a>&nbsp;
          链接：<a href="http://kitsionchen.javaeye.com/blog/124634" style="color:red;">http://kitsionchen.javaeye.com/blog/124634</a>&nbsp;
          发表时间: 2007年09月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          新接触 Linux 的用户通常会对有如此众多的发行版可以选择而产生困扰。好消息是我们可以安全地忽略其中的大多数。本文可以帮助您在众多发行版中作出选择，以开始 Linux 的探索，并且能够帮助您理解为什么要选择这种发行版。
          <br/>
          <span style="color:red;">
            <a href="http://kitsionchen.javaeye.com/blog/124634#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 16 Sep 2007 23:54:38 +0800</pubDate>
        <link>http://kitsionchen.javaeye.com/blog/124634</link>
        <guid>http://kitsionchen.javaeye.com/blog/124634</guid>
      </item>
  </channel>
</rss>