基础算法思想

一、递推算法思想

  递推算法是一种简单的算法,通过已知条件,利用特定关系得出中间推论,逐步递推,直至得到结果为止。

  1.算法思路

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

  顺推法:从已知条件出发,逐步推算出要解决问题的方法。

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

  2.顺推实例:斐波那契数列--“如果一对兔子每月能生下一对小兔子,而每对小兔在它出生后的第3个月里又能开始生一对兔子,问一年后一共有多少只兔子?”

   逆推实例:“父亲为小明准备了大学四年生活的钱,每月生活费为1000,银行年利率为1.71%,算出父亲至少要存多少钱”

二、枚举算法思想

  将所有的候选答案选出后就可以找出正确的解或无解。

三、递归算法思想

  注意:在递归调用的过程中,系统将每一次递归调用的返回点、局部量等保存在系统的堆栈中,当递归调用的次数太多时,就可能造成堆栈溢出等。递归效率较低,一般不提倡使用。

四、分治算法思想

  把一个较大的问题,分成几个较小的问题,找出这几个子问题的求解方法后,再找到合适的方法,把他们组合成求整个问题的解法。(很实用的想法)

五、贪婪算法思想

  不从整体最优考虑,只选择在某种意义上的局部最优选择。

六、试探法算法思想

  试探法也称回溯法,它是一种系统地搜索问题解的方法。例如:迷宫。

时间: 2024-10-13 12:52:21

基础算法思想的相关文章

基础算法思想(二)

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

1、基础算法思想

1.递推法 递推算法使用“步步为营”的方法,不断利用已有的信息推导出新的东西. (1)顺推法 是指从已知条件出发,逐步推算出要解决问题的方法.例如:斐波拉契数列就可以通过顺推法不断递推算出新的数据. 1 /****************************************************************************************************** 2 * 3 * 顺推法 4 * 如果一对兔子每月能生1对小兔子,而每对小兔子在它出生的第

五大算法思想—贪心算法

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

机器学习&数据挖掘笔记_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 : 欢迎大家和我一起交流学习,转载请保持源文件的完整性