几个常见的简单的算法(暴力法,递推法,枚举法,递归法,分治法,贪心法,回溯法)
最近在学习算法相关知识。
通过买的视频教程了解到了一些简单的算法,为了加深感悟,同时也为了理解,将这几个常见的算法的定义进行记录。
算法是程序的灵魂,也可以认为是程序最重要的部分。
在通过算法解决问题时,感觉就是熟悉题意,明白要解决的问题,将之转化成数学模型,在通过数学思想选择合适正确的解题思路,再将之用代码表现出来。
将数学思想用代码表现出来就是最复杂的部分。
1,暴力法
顾名思义,就是直接对问题进行解决,不寻求简单和高效的方法,大部分问题都可以用暴力法来解决。但是暴力法在解决较为复杂的问题时,往往执行效率不高,需要较长的时间和较大的内存。一般不推荐使用暴力法。
2,递推法
该方法是通过找出相同的数学规律,选择正确的数学公式,进而解决问题。
一般可分为两种:
1 顺推:该方法就是从前向后,由小及大;
2逆推:由后向前,由大及小。
3,枚举法(穷举法)
一般使用循环,从所有条件中找出符合可能的结果,比如说用来解决算术运算的可能解。
4,递归法
为了方便解决问题,反复调用自身、调用函数或子过程。如计算一个数的阶乘。
5,分治法
顾名思义,这种方法为“分而治之”,就是将一个大规模的复杂的问题分解成便于解决的小规模的简单的问题,最后再将这些同等规模大小的的小问题合并成为大的问题。如比赛选手的对阵安排问题(每一个选手每一天都要和不同的选手对阵,列出所有可能)。
6,贪婪(贪心)法
在解决问题时,求出局部最优解,而并不考虑是否是全局最优解。如硬币找零问题,0-1背包问题。
7,回溯(试探)法
回溯法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。如列出中奖的彩票号码。
几个常见的简单的算法(暴力法,递推法,枚举法,递归法,分治法,贪心法,回溯法)相关推荐
- 算法的时间复杂度 递推
算法的时间复杂度 递推 1. NOIP 2013 提高组 初赛 7.斐波那契数列的定义如下:F1 = 1, F2 = 1, Fn =Fn–1 + Fn–2 (n ≥ 3).如果用下面的函数计算斐波那 ...
- 算法竞赛宝典-递推算法
算法竞赛宝典-递推算法 Problem A [递推]挖地雷 待更新 问题 B: [递推]偶数3的个数 时间限制: 1 Sec 内存限制: 64 MB 题目描述 "报告,我军已探出地雷阵中所有 ...
- HDU - 6185 Covering(暴搜+递推+矩阵快速幂/杜教BM)
题目链接:点击查看 题目大意:规定宽度为4,给定长度为n,求用1*2和2*1的瓷砖,将其完全铺满能有多少种方法. 分析:自从学会了矩阵快速幂之后,看到1e18的数据量都会下意识的往递推上面想,但是以前 ...
- 算法总结之递推与递归
递推算法 递归算法大致包括两方面的内容:1)递归起点 : 2)递归关系 递推起点 递归起点一般由题目或者实际情况确定,不由递归关系推出.如果无法确定递归起点,那么递归算法就无法实现.可见,递归起点是递 ...
- 实验一 分治与递归—用分治法实现元素选择 java算法
提高题二:用分治法实现元素选择 一.实验要求与目的 1.了解分治法的基本思想,掌握递归程序编写方法: 2.使用分治法编程,求解线形序列中第k小元素. 二.实验内容 1. 给定线形序列集中n个元素和 ...
- 算法设计 (分治法应用实验报告)基于分治法的合并排序、快速排序、最近对问题
一.名称 分治法应用 二.目的 1.掌握分治法的基本思想: 2.学会运用分治法解决实际系统设计应用中碰到的问题. 三.要求 1.实现基于分治法思想的合并排序: 2.实现基于分治法思想的快速排序: 3. ...
- 算法设计 之 递推法
2019独角兽企业重金招聘Python工程师标准>>> 递推法就是根据已知条件,分析推导出问题中的联系,然后一步一步进行推倒直至得到结果. 根据具体问题我们需要选择是正推还是逆推来解 ...
- 洛谷【算法1-4】递推与递归
P1255 数楼梯 对于 100% 的数据,1≤N≤5000. 高精度斐波那契 #include <iostream> using namespace std;const int N = ...
- 未名湖边的烦恼-蓝桥杯算法训练题-递推/递归
问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩. 每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个.现在 ...
最新文章
- 系统架构设计师考试知识点整理-4:死锁问题、银行家算法、管程与线程
- SAP CRM Fiori My Appointment应用里点了Edit按钮后三个Roundtrip分析
- java学到什么程度才有用处_如何自学Java?Java学到什么程度才可以找工作?
- 计算机信息导论论文,电子信息导论论文2000字
- 2019-03-14-算法-进化(移动零)
- 登录不了_12123APP登录不了肿么办?快来看这里!
- [算法]两个栈实现一个队列
- Servlet的学习之web路径问题
- 带参数的update mysql_mysql参数sql_update 说明
- 用SetCapture捕获鼠标消息
- “最大数之父”葛立恒逝世,他是20世纪数学巨匠,也是一个杂技演员
- DHCP Relay 配置教程
- 91 个常见的 Laravel 面试题和答案
- 神舟笔记本电脑win10系统不能调节亮度问题
- oracle agile培训资料,敏捷基础知识培训.pdf
- JVM 类加载器(引导类加载器、扩展类加载器、系统类加载器、用户自定义类加载器)
- 如何用foobar200转换无损wma!
- 条款20:宁以pass-by-reference-to-const替换pass-by-value
- android 固定底栏位置,电脑底端任务栏固定位置应该如何设置?在哪里设置?
- 【9】了解淘宝sdk引入布局模块