国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#算法之大牛生小牛的問題高效解決方法

2019-10-29 21:26:07
字體:
來源:轉載
供稿:網友

問題:
  一只剛出生的小牛,4年后生一只小牛,以后每年生一只。現有一只剛出生的小牛,問20年后共有牛多少只?
思路:
  這種子生孫,孫生子,子子孫孫的問題,循環里面還有循環的嵌套循環,一看就知道是第歸問題。
于是乎,第一個版本出現:

public long Compute1(uint years){  //初始化為1頭牛  long count = 1;  if (years <= 3)  {    return count;  }  int i = 4;  while (i <= years)  {    int subYears = i - 3;    count += Compute1((uint)(subYears));    i++;  }  return (long)count;}

  可是這種循環在循環的做法可要把cpu老兄累壞了,你不信輸入一個100年測試一下上面的方法,我等了半天,都沒結果,改進一下吧,老牛(牛魔王)和小牛(紅孩兒,奶奶的串種了),具有相同的生育能力,他們的生育曲線是一樣的,所以小牛可以復用老牛的生育經驗亞,這樣就解決了重復計算一只牛第n年的時候一共生多少只的問題了,當年齡比較大的時候,明顯大大降低cpu的運算次數,下面是基于這種思路的算法

Hashtable table = new Hashtable();public long Compute(uint years){  //初始化為1頭牛  long count = 1;  if (years <= 3)  {    return count;  }  int i = 4;  while (i <= years)  {    int subYears = i - 3;    if (table.ContainsKey(subYears))    {      count = (long)table[subYears];    }    else    {      count += Compute((uint)(subYears));    }    if (!table.ContainsKey(subYears))    {      table.Add(subYears, count);    }    i++;  }  return (long)count;}

用測試程序測試一下上面的推論吧,結果如下:

1)當輸入years比較小的時候,第一種方法耗時短,但兩者的時間基本在一個數量級上
2)當輸入years比較大的時候,比如40以上的,第二種算法比第一種性能比在100以上,而且輸入years越高,性能比越懸殊。

測試結果截圖:

20年

C#算法,大牛生小牛

50年

C#算法,大牛生小牛

以上就是本文的全部內容,希望能給大家一個參考,也希望大家多多支持VEVB武林網。

 


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 繁昌县| 毕节市| 永泰县| 北安市| 新沂市| 邢台市| 射洪县| 龙川县| 游戏| 喜德县| 通城县| 丘北县| 鄂托克前旗| 葫芦岛市| 中卫市| 石嘴山市| 景东| 马龙县| 南丰县| 稷山县| 隆子县| 分宜县| 台南市| 南澳县| 望都县| 会同县| 区。| 龙海市| 柯坪县| 梁山县| 阿图什市| 霍山县| 枝江市| 泌阳县| 获嘉县| 桐庐县| 贞丰县| 旬邑县| 宁陵县| 大厂| 邻水|