初识算法

算法一:递推

  一: 概念

通过已知条件,利用特定关系逐步递推,最终得到结果为止,核心就是不断的利用现有信息推导出新的东西。

二:分类

当然递推中有两种,“顺推”和“逆推“

顺推:从条件推出结果。

逆推:从结果推出条件。

三: 举例

<1> 顺推的例子

上过大学的应该都知道著名的“斐波那契”数列吧,说的是繁殖兔子的问题,题目我就大概说一下。

如果1对兔子每月能生1对小兔子,而每对小兔在它出生后的第3个月就可以生1对小兔子,如果从1对初生的小兔子开始,1年后能

繁殖多少兔子?

思路:其实这个问题我们可以将兔子划分为“1月大的兔子“,”2月大的兔子“,”3月大的兔子“。

① 初始时:            一对1月大小兔子,总数为1对。

② 第一个月:         1月大的小兔子变成2月大的兔子,总数还是1对。

③ 第二个月:         2月大的小兔子变成3月大的兔子,繁殖了一对小兔子,总数为2对。

④ 第三个月:         3月大的兔子tmd有生了一对小兔子,上个月1月大的小兔子变成了2月大的兔子,总数为3对。

......                    ......

F0=1

F1=1

F2=F0+F1

F3=F1+F2

......

Fn=Fn-2+Fn-1

大家看看,是不是体现了”递推“的核心思想,代码也很简单。

 1             int month = 12; 2  3             int[] fab = new int[month]; 4  5             fab[0] = 1; 6  7             fab[1] = 1; 8  9             //从已知条件出发推出结果10             for (int i = 2; i < month; i++)11             {12                 fab[i] = fab[i - 1] + fab[i - 2];13             }14 15             for (int i = 0; i < month; i++)16             {17                 Console.WriteLine("第{0}个月兔子为:{1}", i, fab[i]);18             }

<2> 逆推的例子

这个一个关于存钱的问题,一个富二代给他儿子的四年大学生活存一笔钱,富三代每月只能取3k作为下个月的生活费,采用的是整存零取的方式,

年利率在1.71%,请问富二代需要一次性存入多少钱。

思路: 这个题目是我们知道了结果,需要逆推条件, 第48月富三代要连本带息的把3k一把取走,那么

第47月存款应为: (第48个月的存款+3000)/(1+0.0171/12(月));

第46月存款应为: (第47个月的存款+3000)/(1+0.0171/12(月));

.....                    .....

第1个月存款应为: (第2个月的存款+3000)/(1+0.0171/12(月));

 1   //银行取钱问题 2             double[] month = new double[49]; 3  4             ///最后一个月的连本带息是3000 5             month[48] = 3000; 6  7             double rate = 0.0171; 8  9             //逆推10             for (int i = 47; i > 0; i--)11             {12                 month[i] = (month[i + 1] + month[48]) / (1 + rate / 12);13             }14 15             for (int i = 48; i > 0; i--)16             {17                 Console.WriteLine("第{0}个月末本利合计:{1}", i, month[i]);18             }

时间: 2024-10-09 20:57:00

初识算法的相关文章

1初识算法

用计算机解决一个现实中的问题步骤: 1. 问题分析 2. 数学模型建立 3. 算法设计与选择 4.算法表示 5.算法分析 6.算法实现 7.程序调试 8.结果整理文档编制 1. 问题分析 准确.完整地理解和描述问题是解决问题的第一步.要做到这一点,必须注意以下一些问题:在未经加工的原始表达中,所用的术语是否都明白其准确定义?题目提供了哪些信息?这些信息有什么用?题目要求得到什么结果?题目中作了哪些假定?是否有潜在的信息?判定求解结果所需要的中间结果有哪些?等等.必须认真审查表达问题的有关描述,深

初识算法-算法思想的重要性

程序举例:不同的方法,处理相同的程序,执行效率上会有什么差别? /* 问题目标:从包含1000个值的数组(值为1-100的随机数)中得到不重复的值.*/ 方法一: /* 进行循环比较, *    $myda中第一个值 和 后面999个值进行比较,如果找不到与之相等的值,则将第一个值放进结果数组($goal)中,否则继续进行比较 * 然后 $myda中第2个值 和 后面998个值进行比较,如果找不到与之相等的值,则将第一个值放进结果数组($goal)中 * 一次类推,知道数组循环完毕*/ /* 第

算法之初体验

初识算法 什么是算法?书上是这么说的:所谓算法就是定义良好的计算过程,它取一个或一组值作为输入,并产生出一个或一组值作为输出.亦即,算法就是一系列的计算步骤,用来将输入数据转换成输出数据. 我的理解:任何问题都可以转化成数学模型,算法就是将转化的数学模型求解的过程. 算法有好有坏,它的评判标准是什么呢?我认为可以从三方面进行比较:第一,结果是否符合预期:第二,时间复杂度:第三空间复杂度.其中最重要当然是要符合预期,剩下的两个方面可以根据实际情况进行取舍. 其实我们生活中处处需要算法,也一直在运用

算法(1)--时间和空间复杂度

算法(1)--时间和空间复杂度 初识 算法定义 算法是独立存在的一种解决问题的方法和思想: 求解一个问题步骤的描述 是求解问题的方法 它是指令的有限序列 其中每条指令表示一个或者多个操作 对于算法而言,实现的语言并不重要,重要的是思想 算法特性 确定性:无二义 有穷性:合适时间内可以执行 输入项 输出项 可行性:算法的每一步都是可行的 复杂度 时间复杂度 定义 ? 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示(语句频度),若有某个辅助函数f(n),使得当n趋近于

转 acm历程 置顶帖

作者情况和我差不多 期望可以激励自己 转 http://blog.csdn.net/yueqiq/article/details/7623176 首先,我想说的就是,我是一个很普通的ACMer,高中没有参加过任何计算机和数学竞赛的经历,也没有ben那样过人的天资,努力至今也未能取得什么成绩,我之所以写下这篇文章,只是希望给刚进大学或者刚进ACM队的同学一点小小的帮助,希望你们可以少走一些弯路,更希望你们可以帮助华理取得我没能取得的辉煌. (1).起步阶段我是从大二开始接触ACM的,要说基础的话就

几年前做家教写的C教程(之二)

C语言学习宝典(2) 认识C语言中的运算符: (1)算术运算符   (+  -  *  /  %) (2)关系运算符    (>  <  ==  >=  <=  != ) (3)逻辑运算符    (!  &&   ||) (4)位运算符   (<<  >>  ~  |  ^  &) (5)赋值运算符  (=以及它的扩展运算符) (6)条件运算符   (?:) (7)逗号运算符  (,) (8)指针运算符   (*和&) (9)

python周报第六周

1.初识算法 1.冒泡排序 冒泡排序算法的原理如下:(从后往前) 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 3.针对所有的元素重复以上的步骤,除了最后一个. 4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. 冒泡算法初级代码如下: 1 ##冒泡 2 a=[9,2,1,55,33] 3 4 for i in range(len(a)): 5 for j

落谷P3941 入阵曲

题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 题目描述 小 F 很喜欢数学,但是到了高中以后数学总是考不好. 有一天,他在数学课上发起了呆:他想起了过去的一年.一年前,当他初识算法竞赛的 时候,觉得整个世界都焕然一新.这世界上怎么会有这么多奇妙的东西?曾经自己觉得难以 解决的问题,被一个又一个算法轻松解决. 小 F 当时暗自觉得,与自己的幼稚相比起来,还有好多要学习的呢. 一年过

luogu P3941 入阵曲

题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 题目描述 小 F 很喜欢数学,但是到了高中以后数学总是考不好. 有一天,他在数学课上发起了呆:他想起了过去的一年.一年前,当他初识算法竞赛的 时候,觉得整个世界都焕然一新.这世界上怎么会有这么多奇妙的东西?曾经自己觉得难以 解决的问题,被一个又一个算法轻松解决. 小 F 当时暗自觉得,与自己的幼稚相比起来,还有好多要学习的呢. 一年过