转自:http://www.cnblogs.com/jiangwz/p/7765694.html

算法

什么是算法?

有一个很著名的公式 “程序=数据结构+算法”。

曾经跟朋友吃饭的时候我问他什么是算法,他说算法嘛,就是一套方法,需要的时候拿过来,套用就可以,我吐槽他,他说的是小学数学题的算法,不是编程的算法。

算法,从字面意义上解释,就是用于计算的方法,通过该这种方法可以达到预期的计算结果。目前,被广泛认可的算法专业定义是:算法是模型分析的一组可行的,确定的,有穷的规则。通俗的说,算法也可以理解为一个解题步骤,有一些基本运算和规定的顺序构成。但是从计算机程序设计的角度看,算法由一系列求解问题的指令构成,能根据规范的输入,在有限的时间内获得有效的输出结果。算法代表了用系统的方法来描述解决问题的一种策略机制。

完成同一件事的不同的算法完成的时间和占用的资源可能并不相同,这就牵扯到效率的问题。算法的基本任务是针对一个具体的问题,找到一个高效的处理方法,从而完成任务。而这就是我们的责任了。

算法的五个特征:

一个典型的算法一般都可以抽象出5个特征:

有穷性:算法的指令或者步骤的执行次数和时间都是有限的。

确切性:算法的指令或步骤都有明确的定义。

输入:有相应的输入条件来刻画运算对象的初始情况。

输出:一个算应有明确的结果输出。

可行性:算法的执行步骤必须是可行的。

算法的分类:

根据应用分:

按照算法的应用领域,可以分为基本算法,数据结构相关算法,几何算法,图论算法,规划算法,数值分析算法,加密解密算法,排序算法,查找算法,并行算法,数值算法……

根据确定性分:

确定性算法:有限时间内完成,得到结果唯一。

非确定性算法:有限时间内完成,得到结果不唯一,存在多值性。

根据算法的思路分:

递推算法,递归算法,穷举算法,贪婪算法,分治算法,动态规划算法,迭代算法等。

算法和公式的关系

算法>=公式

如果没有接触到编程,的确很容易将算法理解为数学公式。公式的确具备算法的特征,但是算法并不等于公式,公式是一种高度精简的算法,算法的形式可以比公式更复杂,解决的问题更加广泛。

算法和程序的关系 程序也是算法的一种表现形式,也是一种工具

算法和数据结构的关系

数据结构是数据的组织形式,可以用来表现特定的对象数据。

因为不同的数据结构所采用的处理方法不同,计算的复杂程度也不同,因此算法往往依赖于某种某种数据结构。数据结构是算法实现的基础。

算法的表示:

自然语言表示:

就是用我们的口头语言来表示算法,这样很多算法难以描述,不利于发展交流。

流程图表示:

一般有三种流程结构:

顺序结构,分支结构,循环结构

N-S图表示:

NS图也叫作盒图或者CHAPIN图,是用于取代传统流程图的一种描述方式。 以 SP方法为基础,NS图仅含有下图4.61 的5种基本成分,它们分别表示SP方法的几种标准控制结构。

伪代码表示:

伪代码并不是程序代码,伪代码介于自然语言和编程用语言之间,是将算法描述成类似编程语言的一种形式。

算法的性能评价

算法的效率作为判断算法优劣的标准。

一个算法的优劣往往通过算法复杂度来衡量,算法复杂度包括时间复杂度和空间复杂度两个方面。其作用:时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。(算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度)。

时间复杂度

即通常所说的算法执行所需要耗费的时间,时间越短,算法越好。

计算方法

1.一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。

分析:随着模块n的增大,算法执行的时间的增长率和 f(n) 的增长率成正比,所以 f(n) 越小,算法的时间复杂度越低,算法的效率越高。

2. 在计算时间复杂度的时候,先找出算法的基本操作,然后根据相应的各语句确定它的执行次数,再找出 T(n) 的同数量级(它的同数量级有以下:1,log2n,n,n log2n ,n的平方,n的三次方,2的n次方,n!),找出后,f(n) = 该数量级,若 T(n)/f(n) 求极限可得到一常数c,则时间复杂度T(n) = O(f(n))。

1 for(i=1; i<=n; ++i) {
2 3 for(j=1; j<=n; ++j) {
4 5 c[i][j] = 0;//该步骤属于基本操作执行次数:n的平方次 6 7 for(k=1; k<=n; ++k)
8 9 c[i][j] += a[i][k] * b[k][j];//该步骤属于基本操作执行次数:n的三次方次 10 11 }
12 13 }

则有 T(n) = n 的平方+n的三次方,根据上面括号里的同数量级,我们可以确定 n的三次方 为T(n)的同数量级

则有 f(n) = n的三次方,然后根据 T(n)/f(n) 求极限可得到常数c

则该算法的时间复杂度:T(n) = O(n^3) 注:n^3即是n的3次方。

空间复杂度

空间复杂度可以分为两个方面:

1.程序保存所需要的存储空间,也就是程序的大小。

2.程序在执行过程中所需要消耗的存储空间资源,如程序在执行过程中的中间变量等。

简单算法实例:

随机生成一个20个整数数据的数组,然后输入要查找的数,然后用顺序查找法:

伪代码:

变量X<-输入待查找的数据

变量arr<-随机生成数据数组

for 1 to 20

  if arr[i] ==x

    break;找到数据

  else

输出该数据的位置

程序结束

1 import java.util.Random;
2 import java.util.Scanner;
3 4 public class P1_1 {
5 static int N=20;
6 public static void main(String[] args) {
7 int[] arr=new int[N];
8 int x,n,i;
9 int f=-1;
10 11 Random r=new Random(); //随机种子 12 for(i=0;i<N;i++)
13 {
14 arr[i]=r.nextInt(100); //产生数组 15 }
16 17 System.out.print("随机生成的数据序列:n");
18 for(i=0;i<N;i++)
19 {
20 System.out.print(arr[i]+" "); //输出序列 21 }
22 System.out.print("nn");
23 24 System.out.print("输入要查找的整数:");
25 Scanner input=new Scanner(http://System.in);
26 x=input.nextInt(); //输入要查找的数 27 28 for(i=0;i<N;i++) //顺序查找 29 {
30 if(x==arr[i]) //找到数据 31 {
32 f=i;
33 break;
34 }
35 }
36 37 38 if(f<0) //输出查找结果 39 {
40 System.out.println("没找到数据:"+x);
41 }
42 else 43 {
44 System.out.print("数据:"+x+" 位于数组的第 "+(f+1)+" 个元素处.n");
45 }
46 47 }
48 49 }

顺便推荐一下,我们家的平台,谢谢关注。平时能用的到的,可以省钱~

递归算法 流程图_什么是算法?如何学习算法?算法入门相关推荐

  1. 递归算法 流程图_什么是算法?如何学习算法?算法入门的学习路径

    什么是算法? 有一个很著名的公式 "程序=数据结构+算法". 曾经跟朋友吃饭的时候我问他什么是算法,他说算法嘛,就是一套方法,需要的时候拿过来,套用就可以,我吐槽他,他说的是小学数 ...

  2. 百度强化学习框架PARL入门强化学习

    1.什么是强化学习? 强化学习(Reinforcement Learning, RL),又称再励学习.评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互 ...

  3. python汉诺塔递归算法流程图_详解汉诺塔Python递归程序

    学习递归时,很多小伙伴对汉诺塔的递归算法非常疑惑,不清楚那么复杂的移动过程,为何用四五行代码就给解决了.汉诺塔问题:有三根柱子A,B,C.A柱上有若干碟子,每次移动一块碟子,小的只能叠在大的上面,把所 ...

  4. Python初级学习教程—从入门开始学习(函数、组合数据类型、文件操作、异常、模块)

    文章目录 入门 一.数据的相关操作 二.continue 和 break的区别(易混点) 三.函数 变量的作用域 三.函数进阶 1.函数多个返回值 2.函数参数种类 3.匿名函数 组合数据类型 一.列 ...

  5. 【.NET学习】.NET入门及学习路线

    目录 [前言].NET是什么? [博客目录] [资源] 学习路线 课程安排 [前言].NET是什么? .NET is a free, cross-platform, open source devel ...

  6. 零基础入门深度学习(3) - 神经网络和反向传播算法

    无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就o ...

  7. raptor五个数排序流程图_数据结构与算法(一):排序(上)

    做这个系列一是记录自己的学习过程,二是整合目前我所接触的比较好的资料,给出最直观,最通俗的算法解释 总体概况 十大排序算法:(比较排序):冒泡.选择.插入.归并.快速.希尔.堆排序 基数排序.桶排序. ...

  8. a*算法流程图_如何从0开始,搭建A/B test平台产品?

    一.什么是A/B test A/B-test,本质就是对照实验.为同一个目标和假设,设计A.B两个方案.从一波用户中,随机分为A.B两组,A组用A方案,B组用B方案.上线后,验收两组实验的数据情况,从 ...

  9. python闭环最短路径_深度学习经典算法 | 蚁群算法解析

    蚁群算法基本思想 蚁群算法的基本原理来源于自然界中蚂蚁觅食的最短路径问题.根据昆虫学家的观察,发现自然界的蚂蚁虽然视觉不发达,但它可以在没有任何提示的情况下找到从食物源到巢穴的最短路径,并且能在环境发 ...

最新文章

  1. python做定时任务的方式及优缺点_python BlockingScheduler定时任务及其他方式的实现...
  2. 京东广告典型源码示例二
  3. Wallace树专题研究
  4. 柳编产业临沭谋定转型升级 农民丰收节交易会技能兴鲁
  5. HttpURLConnection 中Cookie 使用
  6. AIX安装JDK1.7教程
  7. mysql 做回归模型_技术分享 | 我对 MySQL 隔离级别的剖析
  8. zabbix4.4 使用自动发现监测web网站健康状态(通过mysql表获取web地址)
  9. Python数据可视化 - 直方图hist ≠ 条形图bar ( pandas与hist快速作图 )
  10. docker容器测试技巧
  11. Oracle 10G 64位下载
  12. SQL 函数 —— TRUNCATE详解示例
  13. (复习)基础算法--搜索--深入训练(USACO-Feb08、WOW模拟赛Day2-T4、USACO-Dec13、CTSC-1999)
  14. zzuli OJ 1127: 矩阵乘积
  15. 北漂五年,分享一下关于我的职场故事
  16. STM32三条总线(AHB、APB1、APB2)的外设映射情况
  17. 记录一次油猴脚本开发的Demo(入门级)、开发过程
  18. spring mvc 常用注解详解
  19. linux启动mysql1820_linux下安装mysql的问题解决
  20. 命运歌姬服务器停服维护中,命运歌姬2月27日更新什么? 2月27日双端维护内容公告...

热门文章

  1. IOS15仿微信我的页面
  2. html获取微信code,get-weixin-code.html
  3. android m权限工具类,android M权限适配,简单工具类
  4. mysql不支持union_Mysql中Union的子句不支持order by
  5. mysqldump导出数据库视图_mysql数据库的基本操作:索引、视图,导入和导出,备份和恢复...
  6. matlab读取黑白图目标位置的坐标,matlab对图像处理——裁剪 获取灰度图 获取坐标点...
  7. python写日志文件_Python logging日志模块 配置文件方式
  8. python基础有哪些内容_Python基础练习
  9. make_shared和shared_ptr的区别
  10. php7中使用 xhprof 分析