日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

小牛生产小牛的问题解决集粹

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小牛生产小牛的问题解决集粹 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題:
????????? 一只剛出生的小牛,4年后生一只小牛,以后每年生一只。現有一只剛出生的小牛,問N年后共有牛多少只?


1.原始笨方法
private?int?Comput(int?years)
????????
{
????????????
//初始化為1頭牛
????????????int?count?=?1;
????????????
if?(years?<?4)
??????????
{
????????????????
return?count;
????????????}

????????????
????????????
while?(years?-?3?>?0)
????????????
{
????????????????count?
=?count?+?Comput(years?-?3);
????????????????years
--;
????????????}

????????????
return?count;


????????}
特點:容易理解,不過效率太低.不具有實用價值.

2.采用HashTable優化方案
Hashtable?table?=?new?Hashtable();
????????
public?long?Compute(int?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((int)(subYears));
????????????????}

????????????????
if?(!table.ContainsKey(subYears))
??????????????
{
????????????????????table.Add(subYears,?count);
????????????????}

????????????????i
++;
????????????}

????????????
return?(long)count;
????????}
特點:在第一種方案的基礎上性能有了大幅度的提高.采用HashTable存儲老牛的生育曲線,從而達到以后的小牛重復利用老牛的生育曲線.(直接取其生產數量)

3.采用數組的方式描述
public?int?Compute(int?years)
????????
{
??????????
int[]?age?=?new?int[4]?{?1,?0,?0,?0?};
????????????
for?(int?i?=?2;?i?<=?years;?i++)
????????????
{
????????????????age[
3]?+=?age[2];??????????????age[2]?=?age[1];?
????????????????age[
1]?=?age[0];
????????????????age[
0]?=?age[3];?????????????????

????????????}

????????????
return?(age[0]?+?age[1]?+?age[2]?+?age[3]);
????????}

特點:只采用一個循環搞定,效率極高.

3.采用優化遞歸公式實現
?f(n) ? = ? f(n-1)+f(n-3)??[n ? > ? 3]???
?f(n) ? = ? 1???????????????????[0 ? < ? n ? <= ? 3]??
public?int?Comput(int?x)
??????
{
????????????
if?(x?<?4)?return?1;
????????????
else?return?Comput(x?-?1)?+?Comput(x?-?3);
????????}
???
特點:代碼簡潔,功能簡單實現,但使用遞歸當然會犧牲一定的效率作為代價.

前些天在網絡上偶然發現的生產小牛問題.于是搜集整理了一下,方便大家共同研究學習使用.
有好的算法大家共同研究^_^

轉載于:https://www.cnblogs.com/symbol441/archive/2008/02/19/1073291.html

總結

以上是生活随笔為你收集整理的小牛生产小牛的问题解决集粹的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。