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

什么是算法?

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

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

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

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

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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

Servlet 运行原理

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

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…

虚拟内存越大越好吗_手机的运行内存真的是越大越好吗?6GB和8GB到底又该如何选择?...

许多人买手机&#xff0c;除了看处理器、外观以外&#xff0c;关注最多的莫过于手机的运行内存了。选择一个合适的运行内存几乎关系到整个手机使用寿命和命脉。那么我们现在买手机选择多大的运行内存合适呢&#xff1f;真的是越大越好吗&#xff1f;下面我们就来一起看看吧。选…

显微镜自动聚焦原理是什么_什么是共聚焦显微镜?你了解过共聚焦显微镜吗?...

更出色的表面分析ZEISS Smartproof 5产品表面粗糙度质量控制ZEISS Smartproof 5是一款集成式转盘共聚焦显微镜&#xff0c;依托孔径关联技术将传统共聚焦显微镜的高分辨率与转盘系统的高速采集相结合&#xff0c;能够高速、准确地采集表面3D数据。二维测量&#xff1a;距离、高…

Java 程序执行过程的内存流程图(手写稿)

操作系统会分配一定的内存空间给JVM&#xff0c;空间大小可以在JVM里面设置&#xff0c;JVM会将内存分为三个区域&#xff1a;栈、堆、方法区。

dc/os_DC / OS中具有Java和数据库应用程序的服务发现

dc/os该博客将展示一个简单的Java应用程序如何使用DC / OS中的服务发现与数据库进行对话。 为什么要进行服务发现&#xff1f; 应用程序通常由多个组件组成&#xff0c;例如应用程序服务器&#xff0c;数据库&#xff0c;Web服务器&#xff0c;缓存和消息传递服务器。 通常&am…

python进阶项目设计_Python进阶循环设计

之前在“循环”一节&#xff0c;我们已经讨论了Python最基本的循环语法。这一节&#xff0c;我们将接触更加灵活的循环方式。1. 利用range(), 得到下标在Python中&#xff0c;for循环后的in跟随一个序列的话&#xff0c;循环每次使用的序列元素&#xff0c;而不是序列的下标。之…

Struts2请求处理的内部流程图/结构图/原理图(版本二)

文章目录请求处理流程图流程说明请求处理流程图 流程说明 第 1 步&#xff1a; 客户端初始化一个指向 Servlet 容器&#xff08;例如 Tomcat&#xff09;的请求&#xff0c;例如&#xff1a;在浏览器中输入 http:localhost:8080/Struts2/helloworld/helloworldAction.action …

xampp mysql 查询很慢_如何开启mysql的慢查询机制

1 在mysql中默认是不会开启慢查询日志功能的&#xff0c;我们可以使用show variables like ‘%slow%‘来查看一下。结果如下&#xff1a;参数说明&#xff1a;log_slow_queries表示服务器端是否开启慢查询日志记录功能&#xff0c;slow_query_log表示mysql监测满查询的功能是否…

uaa 授权_使用UAA OAuth2授权服务器–客户端和资源

uaa 授权在上一篇文章中&#xff0c;我介绍了如何使用Cloud Foundry UAA项目启动OAuth2授权服务器&#xff0c;以及如何使用OAuth2授权代码流程中涉及的一些参与者来填充它。 我在Digital Ocean网站上发现这篇文章在描述OAuth2授权代码流方面做得很好&#xff0c;因此&#xf…

ps背景不变换字_PS教程:复杂背景中,如何利用通道轻松抠出发丝?

点击图片 1元抢购 PS、PR、AE等课程活动无缝抠图复杂背景当我们常用的钢笔抠图解决不了细碎的头发丝时我们可以用通道进行抠图&#xff0c;换背景在复杂的背景中把头发丝抠出来配套PS素材请到QQ群&#xff1a;565256668下载首先打开素材&#xff0c;我们发现背景比较复杂&…

阿里云 ram 容器镜像_容器中Java RAM的使用:不会丢失内存的5大技巧

阿里云 ram 容器镜像在本文中&#xff0c;我们希望分享Java内存管理的细节以及容器内部的弹性&#xff0c;这些细节乍一看并不明显。 在下面&#xff0c;您将找到要注意的问题列表以及即将发布的JDK版本中的重要更新&#xff0c;以及针对核心痛点的现有解决方法。 我们收集了5…

java堆内存剩余多少合理_Java堆内存的10个要点

我刚开始学习Java编程时&#xff0c;可不知道什么是堆内存或堆空间(heap space)&#xff0c;甚至根本不管对象创建时都放在哪里去了。正式了写一些程序后&#xff0c;经常会遇到java.lang.outOfMemoryError等错误&#xff0c;我才开始关注堆内存。对大多数程序员都经历过这样的…