问题:

一只刚出生的小牛,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年

50年

以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持脚本之家。

php大牛生小牛,C#算法之大牛生小牛的问题高效解决方法相关推荐

  1. 【算法】跑ORB-SLAM3遇到的问题、解决方法、效果展示(环境:Ubuntu18.04+ROS melodic)

    文章目录 一.`./build.sh`编译ORB-SLAM3出现的各种问题 1.问题:OpenCV > 4.4 not found 2.问题:error: 'slots_reference' w ...

  2. java图片上传被旋转,在其他大牛那看到的java手机图片上传旋转问题的解决方法...

    // 将图片文件转化为字节数组字符串,并对其进行Base64编码处理 //Base64所用包:org.apache.commons.codec.binary.Base64 public static ...

  3. 【算法】跑ORB-SLAM遇到的问题、解决方法、效果展示(环境:Ubuntu18.04+ROS melodic)

    文章目录 一.cmake编译ORB-SLAM库报错 1.问题:cmake 后出现rosdep错误 rosdep init / rosdep update问题 2.问题:cmake 后出现opencv2 ...

  4. c语言生小牛问题算法,数据结构算法:大牛生小牛的算法问题

    数据结构算法:大牛生小牛的算法问题 分类:软考 | 更新时间:2016-07-08| 来源:转载 问题: 一只刚出生的小牛,4年后生一只小牛,以后每年生一只.现有一只刚出生的小牛,问20年后共有牛多少 ...

  5. 数据结构与算法之母牛生牛

    数据结构与算法之母牛生牛 目录 字符凭拼接最低字典序 二维数组最小路径和 1. 字符凭拼接最低字典序 题目概述:母牛每年生一只小牛,新出生的母牛成长三年后也能每年生出一只母牛,假设不会死.求N年后,母 ...

  6. 大牛的博客,跟大牛学习

    今天看到一篇文章,收藏了很多大牛的博客,在这里分享一下(转载于:http://blog.csdn.net/wujxiaoz/article/details/8237096) Android中文Wiki ...

  7. 机器学习数学原理(3)——生成型学习算法

    机器学习数学原理(3)--生成型学习算法 在上一篇博文中我们通过广义线性模型导出了针对二分类的Sigmoid回归模型以及针对多项分类的Softmax回归模型,需要说明的是,这两种算法模型都属于判别学习 ...

  8. 大牛服务器超时位置模拟失败,大牛模拟定位掉线怎么办 | 手游网游页游攻略大全...

    发布时间:2016-07-07 在第四期"微分享"活动中,有许多游戏大牛向小智讲述了关于玩游戏的妙招.巧招和绝招,现小智将这些内容推送给大家! 1.如何在3v3中取得好名次?(由& ...

  9. 预产期计算器在线计算生男生女计算机,预产期计算器生男生女的四种算法

    预产期计算器生男生女可以提前算出宝宝是男孩还是女孩,那么预测生男生女计算公式是怎么样的?计算的方法有下面的四种.有想要早点了解宝宝是男是女的准妈妈们就用生男生女计算器来算一下吧. 1. 口诀计算法 6 ...

最新文章

  1. source insight删除保存路径为中文的project工程项目报错的解决办法
  2. java里程序控制流程_Java语言中的程序流程控制
  3. 换种方式去分页(转)
  4. 极狐(GitLab)发布首款“GitNative”DevOps云一体化解决方案
  5. visualmap超过范围改变颜色_高动态范围(High-Dynamic Range,简称HDR)
  6. 转 jquery使用技巧小结
  7. Mirror--自增键在镜像中的影响
  8. typedef struct 和 struct 的区别
  9. OpenGL(一)二维图形的绘制:一个简单的绘制矩形程序
  10. vasp服务器中断,vasp优化结构没提示直接中断
  11. 简易局域网聊天java_简单的局域网聊天程序(java版本的)
  12. qiankun加载vue子应用报错[import-html-entry]: error occurs while executing normal script
  13. 暑假规划及小学期总结
  14. 失恋CPR 自救手册
  15. go之官方依赖管理工具dep安装和使用
  16. Python中的re.search和re.group用法
  17. kali2020.3安装openvas(gvm11)附gvm修改amdin密码以及gvm创建账号
  18. 大连究竟有多少“软件园”
  19. Win10家庭版如何正确关闭自动更新
  20. 何为SCA?听听一枚产品汪妹子的纯干货分享

热门文章

  1. 正宗港行诺基亚N70的极速鉴别方法
  2. php怎么调用类里面的方法_php调用类中的方法
  3. 温州大学黄海广博士《深度学习》课程课件(六、机器学习实践)
  4. FLAST——测试是否flaky的快速静态预测方法
  5. 日语N1语法1~5(日语能力考,蓝宝书)
  6. 什么是RDD?以及他的工作流程
  7. rime中州韵输入法源码初识----分工与安装
  8. 攻防世界crypto篇
  9. Tiktok跨境出海:“Tiktok”未来可期
  10. ubuntu16.04使用小觅相机