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

什么是算法?

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

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

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

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

37e84fe2fdbb5afae7d2d3d7db38e909.png

算法的五个特征:

  • 一个典型的算法一般都可以抽象出5个特征:
  • 有穷性:算法的指令或者步骤的执行次数和时间都是有限的。
  • 确切性:算法的指令或步骤都有明确的定义。
  • 输入:有相应的输入条件来刻画运算对象的初始情况。
  • 输出:一个算应有明确的结果输出。
  • 可行性:算法的执行步骤必须是可行的。

算法的分类:根据应用分:

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

根据确定性分:

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

根据算法的思路分:

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

算法和公式的关系

算法>=公式

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

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

算法和数据结构的关系

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

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

算法的表示:自然语言表示:

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

流程图表示:

一般有三种流程结构:

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

776230dc19cf7a11075e71ac05df36ec.png

e52ccf5ff44a4f5c7cccf7172af418a9.png

N-S图表示:

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

49c8129598959284099c421e7324de1a.png

伪代码表示:

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

747d898233364509cefbbf9dedf14beb.png

算法的性能评价

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

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

时间复杂度

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

计算方法

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))。

for(i=1; i<=n; ++i) {for(j=1; j<=n; ++j) {//该步骤属于基本操作执行次数:n的平方次c[i][j] = 0;for(k=1; k<=n; ++k)//该步骤属于基本操作执行次数:n的三次方次c[i][j] += a[i][k] * b[k][j];}
}

复制代码

则有 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
输出该数据的位置


本文来源:WEB明教光明顶WEB明教光明顶 算法什么是算法?如何学习算法?算法入门的学习路径

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java webmethod 参数_java详解Spring接收web请求参数的方式

本篇文章给大家带来的内容是java详解Spring接收web请求参数的方式 。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你们有所帮助。1 查询参数请求格式&#xff1a;url?参数1值1&参数2值2...同时适用于GET和POST方式spring处理查询参数的方法又…

envoy重试_具有Envoy代理的微服务模式,第二部分:超时和重试

envoy重试该博客是系列文章的一部分&#xff0c;该系列文章更深入地介绍了Envoy Proxy和Istio.io &#xff0c;以及它如何实现一种更优雅的连接和管理微服务的方式。 跟随我christianposta &#xff0c;紧跟这些博客文章的发布。 什么是Envoy代理 &#xff0c;它如何工作&…

python中字符串格式化的形式_Python中format函数字符串格式化入门

格式化在程序开发中非常常见&#xff0c;大家肯定不陌生&#xff0c;Python中也存在多重格式化方式&#xff0c;format函数就是其中一种。函数原型format(value[, format_spec])参数意义value&#xff1a; 需要被格式化的字符串format_spec&#xff1a; 格式化的格式函数定义与…

Java的超类/基类Object

文章目录简介主要方法equals简介 所有的类都继承了 Object&#xff0c;即 Object 是所有类的父类&#xff0c;所以所有的 Java 类都继承了 Object 的所有方法。 比如你写一个类如下&#xff1a; public class Question { ... }实际上这个类是继承自 Object 的&#xff0c;默…

网络研讨室_即将举行的网络研讨会:调试生产中Java的5种最佳实践

网络研讨室您的团队是否花费超过10&#xff05;的时间在生产中调试Java&#xff1f; 将新代码部署到生产中是一项艰巨的任务。 在您的本地环境中起作用的东西在生产中的作用并不相同&#xff0c;您可以通过用户来了解。 不理想吧&#xff1f; 生产中的调试是一个关键要素&…

window部署python项目_Django在Window下的部署

转载 : codingsoho.com前言本文主要介绍利用apache去部署Django项目&#xff0c;所有步骤均在本机Window7和阿里云验证通过。配置本例的基本配置如下&#xff1a;工作目录&#xff1a; C:/virtualenv/zakkabag项目名称&#xff1a; zakkabag最终的安装版本如下&#xff0c;后面…

chrome gwt1.7_快速提示:使用Chrome开发工具调试GWT应用程序

chrome gwt1.7调试是软件开发的重要方面。 拥有正确的工具可以节省大量时间和头痛。 在GWT Super Dev模式之前&#xff0c;经典的Dev模式允许使用JVM调试。 开发人员可以在其IDE中设置断点&#xff0c;并使用调试模式来跟踪错误和错误。 现在&#xff0c;在超级开发模式下&…

java事件编程_java基础 ---Swing事件编程

java基础 ---Swing事件编程GUI的设计就剩个菜单组建&#xff0c;这个组件也是想当于容器套容器&#xff0c;在设计方面没有什么难度&#xff0c;主要是一些事件的响应。还有另一种事件的监听方式&#xff0c;也就是适配器监听方法。1、菜单要设计一个菜单那么有三大组件是不可或…

python3鄙视python2_Python3 正在毁灭 Python的原因分析

Python 3毫不费力地成为发生在Python社区里最糟糕的事。我还记得第一次使用Python的时候&#xff0c;我还在花大量时间在C这块上&#xff0c;而Python就像是我的一次开光。我可以打开文本编辑器用几秒钟或者几分钟写出一个可以工作的程序&#xff0c;而不是用几小时或几天。我记…

Java如何加载类的呢?

JVM加载类 首先查看内存中是否存在该类&#xff08;内存中所有类都是以Class的实例对象存在&#xff09;&#xff0c;若不存在则会通过环境变量中的路径值在电脑或者其它设备的硬盘中找到该类&#xff08;即.class文件&#xff09;&#xff0c;然后JVM会将其读取到内存中&…

brew卸载jenv_使用brew,cask和jenv在MacOSX上设置多个Java JRE / JDK

brew卸载jenv昨天在Java9的Jigsaw HackTheTower事件中&#xff0c;我意识到我需要加强我的游戏并改善我现有的机制&#xff0c;以在我的机器上维护几个不同的JDK。 我曾经手动下载jdk&#xff0c;或使用brew cask来安装它们&#xff0c;我会在我的〜/ bash_profile中设置bash …

java过滤器api_springboot集成过滤器

封装自定义接口filter包含两个方法,第一个过滤的路径数组,第二个为过滤器执行的顺序.spring boot 会按照order值的大小&#xff0c;从小到大的顺序来依次过滤。package com.theeternity.common.baseFilter;import javax.servlet.Filter;/*** program: ApiBoot* description: 封…

Servlet 运行原理

文章目录Servlet 如何运行演示 Servlet 运行原理Servlet 如何运行 用户向浏览器地址栏输入&#xff1a;http://ip:port/helloweb/sayHello?namezs 浏览器使用 ip:port(端口号)连接服务器 浏览器将请求数据按照 http 协议打成一个数据包(请求数据包)发送给服务器 请求数据包…

python dicom 器官分割_python+opencv阈值分割

37 #获取像素点的最大值和最小值38 arr_temp np.reshape(img_arr,(lens,))39 max_val max(arr_temp)40 min_val min(arr_temp)41 #图像归一化42 img_arr (img_arr-min_val)/(max_val-min_val)43 #绘制图像并保存44 #保存图片时去掉周围白边45 plt.axis(off)46 fig plt.gcf()47…

解析浏览器访问服务器 Servlet 应用程序的交互过程(Servlet 容器如何处理请求资源路径)

案例 1&#xff1a; 请求资源路径&#xff1a;http://localhost:8080/web01/greeting?namezs 浏览器通过 localhost:8080 连接服务器&#xff1b;服务器在 webapps 目录下寻找 web01 目录&#xff0c;找到后进入web01 目录内寻找 WEB-INF 目录&#xff0c;在进入 WEB-INF 目…

java github_GitHub Research:超过50%的Java记录语句写错了

java github为什么生产日志无法帮助您找到错误的真正根本原因&#xff1f; 询问您是否使用日志文件监视您的应用程序几乎就像询问…您是否喝水。 我们都使用日志&#xff0c;但是我们如何使用它们则是一个完全不同的问题。 在下面的文章中&#xff0c;我们将对日志进行更深入…

yolov5论文_YOLOv5的妙用:学习手语,帮助听力障碍群体

编辑&#xff1a;魔王、杜伟计算机视觉可以学习美式手语&#xff0c;进而帮助听力障碍群体吗&#xff1f;数据科学家 David Lee 用一个项目给出了答案。如果听不到了&#xff0c;你会怎么办&#xff1f;如果只能用手语交流呢&#xff1f;当对方无法理解你时&#xff0c;即使像订…

python制作系统程序与html交互_python+html语音人物交互_flask后台与前端(html)交互的两种方法...

基于python flask框架搭建webflask后台与前端(html)交互的两种方法&#xff1a;方法1 使用flask-wtf 提供的表单用常见的登录为例&#xff1a;// An highlighted blockfrom flask_wtf import Formclass LoginForm(Form): # 登录表单ROLE SelectField(角色, choices[(s, 管理员…

Java 程序执行过程的内存流程图(结合类加载器 ClassLoader 讲解)

Student s new Student(); s.play(); Student s2 new Student();以上代码的执行流程如下&#xff1a; JVM 作为操作系统的一个迚程在系统中执行&#xff0c;那么系统会为 JVM 分配一块内存空间&#xff0c;这块内存空 间被 JVM 分为 3 大块(栈区、堆区、方法区) 一般而言&a…

java javap_javap的用途不断发展:您的Java类文件中隐藏了什么?

java javap什么是Javap&#xff0c;如何使用它以及何时要反汇编类文件&#xff1f; 作为Java开发工具包&#xff08;JDK&#xff09;的一部分&#xff0c;我们可以使用许多工具&#xff0c;这些工具有助于更好地理解Java代码。 这些工具之一是javap命令&#xff0c;它使我们能…