1、基础算法思想

1、递推法

递推算法使用“步步为营”的方法,不断利用已有的信息推导出新的东西。

(1)顺推法

是指从已知条件出发,逐步推算出要解决问题的方法。例如:斐波拉契数列就可以通过顺推法不断递推算出新的数据。

 1 /******************************************************************************************************
 2 *
 3 *  顺推法
 4 *  如果一对兔子每月能生1对小兔子,而每对小兔子在它出生的第三个月里,又开始生1对小兔子,
 5 *  假设在不发生死亡的情况下,由1对初生的兔子开始,1年后能繁殖出多少对兔子?
 6 *
 7 *******************************************************************************************************/
 8
 9 #include "stdio.h"
10
11
12 void main()
13 {
14     int i;
15     int NumMonth[13] = { 0, 1, 1 };
16
17
18     for (i = 2; i < 13; i++)
19         NumMonth[i] = NumMonth[i - 1] + NumMonth[i - 2];
20
21     for (i = 1; i < 13; i++)
22         printf("第%d个月兔子总数:%d\n", NumMonth[i]);
23
24     while (1);
25
26
27 }

(2)逆推法

是从已知的结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。

 1 /******************************************************************************************************
 2 *
 3 *  逆推法:
 4 *  父亲准备为小龙的4年大学生活一次性在银行存储一笔钱,使用整存整取得方法,控制小龙每个月的月底只能提取
 5 *  1000块钱准备下个月使用,假设银行一年整存零取的年利息为1.71%,请编程计算出父亲至少需要一次性存入多少钱
 6 *  才够小龙4年大学生活费
 7 *
 8 *******************************************************************************************************/
 9
10
11 #include "stdio.h"
12
13 void main()
14 {
15     int i = 0;
16     float MoneyMonth[49] ;
17
18     MoneyMonth[48] = 1000;
19
20     for (i = 47; i > 0; i--)
21         MoneyMonth[i] = (MoneyMonth[i + 1]+1000)/(1+0.00171);
22
23     printf("至少应该应该存%.3f", MoneyMonth[1]);
24
25     while (1);
26
27 }

时间: 2024-10-11 10:55:27

1、基础算法思想的相关文章

基础算法思想

一.递推算法思想 递推算法是一种简单的算法,通过已知条件,利用特定关系得出中间推论,逐步递推,直至得到结果为止. 1.算法思路 递推算法使用“步步为营”的方法,不断利用已有的信息推导出新的东西.利用现有信息得到新信息,是递推算法的核心. 顺推法:从已知条件出发,逐步推算出要解决问题的方法. 逆推法:从已知结果出发,用迭代表达式逐步推算出问题开始的条件. 2.顺推实例:斐波那契数列--“如果一对兔子每月能生下一对小兔子,而每对小兔在它出生后的第3个月里又能开始生一对兔子,问一年后一共有多少只兔子?

基础算法思想(二)

分治算法 使用分治法设计程序时,一般可按以下步骤进行: (1)分解:将要求解的问题划分成若干规模较小的同类问题 (2)求解:当子问题划分得足够小时,用较简单的方法解决 (3)合并:按求解问题的要求,将子问题的解逐层合并,即可构成最终的解 分治算法实例(乒乓球比赛赛程安排): 我们要给八个人安排赛程 每个人都要对战 并在七天全部比完 我们可以先把它分成一半 也就是分解这个过程 然后再分解 这时候 这已经分得最小了 那么也只有这么一种安排 也就是 求解 那么回到上一步 也就是合并 再把这一步往上 那

五大算法思想—贪心算法

贪心法理解 贪心法在解决问题的策略上目光短浅,只根据当前已有的信息就做出选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变.换言之,贪心法并不是从整体最优考虑,它所做出的选择只是在某种意义上的局部最优. 一句话:不求最优,只求可行解. 判断贪心法 对于一个具体的问题,怎么知道是否可用贪心算法解此问题,以及能否得到问题的最优解? 我们可以根据贪心法的2个重要的性质去证明:贪心选择性质和最优子结构性质. 1.贪心选择性质 什么叫贪心选择?从字义上就是贪心也就是目光短线,贪图眼前利益,在

机器学习&amp;数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

http://www.cnblogs.com/tornadomeet/p/3395593.html 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大.

java基础算法之快速排序

快速排序(Quicksort)是对冒泡排序的一种改进.在大学学过之后现在基本忘了,最近在好多地方都看到说快速排序在面试会问到,于是自己也准备重新拾起以前忘记的东西来,慢慢的积累自己的基础知识.fighting 算法概念 快速排序由C. A. R. Hoare在1962(50多年了呢)年提出,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有

(转)深度学习前沿算法思想

深度学习前沿算法思想 本文转自: https://mp.weixin.qq.com/s?__biz=MzA5NDExMTAzNA==&mid=2649981646&idx=2&sn=8fe05eac5a5068efb65ca1602e5fd3a0&chksm=8854b69bbf233f8db5dbaa1ea8396d181c9a35e760ab3c1c4934b504f69fe92683972d78d327&mpshare=1&scene=2&sr

C/C++编程基础算法总结

使用王道机试指南的电子书也有几天的时间了,终于看完了第二章<经典入门>,下面就来总结回顾一下最常见的六种算法/问题,为下一步刷题打好坚实基础. 套路是:先概述这种题型,然后总结我学到的和易错点. ************************************题目都是九度OJ上的********************************************** 先提一句!时间复杂度!王道一直在提这一点,必须有根据题目中变量的范围来估算时间复杂度的意识. 一.排序问题 基本的冒

常用基础算法C++实现

2016年10月06日10:40:43 本文记录一些常用的基础算法,只为熟能生巧,内容多的话会建立索引的 素数(质数)判断 素数的定义:就是除它本身和1之外,没有其他任何约数的数 1 bool isPrime(int i) 2 { 3 for (int j = 2; j <= sqrt(i * 1.0); j++) { 4 if (i % j == 0) 5 return false; 6 } 7 return true; 8 } 最大公约数 例如:求24和60的最大公约数,先分解质因数,得24

基础算法之排序(2)--选择排序

1 /********************************************************************************************************** 2 * Function : test 3 * Create Date : 2014/03/23 4 * Author : NTSK13 5 * Email : [email protected] 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性