md5与des算法有何不同_Python算法详解:为什么说算法是程序的灵魂?

算法是程序的灵魂,只有掌握了算法,才能轻松地驾驭程序开发。软件开发工作不是按部就班,而是选择一种最合理的算法去实现项目功能。算法能够引导开发者在面对一个项目功能时用什么思路去实现,有了这个思路后,编程工作只需要遭循这个思路去实现即可。本章将详细讲解计算机算法的基础知识,为读者步入后面的学习打下基础。

1.1 算法的基础

自然界中的很多事物并不是独立存在的,而是和许多其他事物有着千丝万缕的联系。就拿算法和编程来说,两者之间就有着必然的联系。在编程界有一个不成文的原则,要想学好编程,就必须学好算法。要想获悉这一说法的原因,先看下面对两者的定义。

算法是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对符合一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。

编程是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。为了使计算机能够理解人的意图,人类就必须将需要解决的问题的思路、方法和手段通过计算机能够理解的形式"告诉"计算机,使计算机能够根据人的指令一步一步去工作,完成某种特定的任务。编程的目的是实现人和计算机之间的交流,整个交流过程就是编程。

在上述对编程的定义中,核心内容是思路、方法和手段等,这都需要用算法来实现。由此可见,编程的核心是算法,只要算法确定了,后面的编程工作只是实现算法的一个形式而已。

1.1.1算法的特征

在1950年,算法(Algorithm )一词经常同欧几里得算法联系在一起。这个算法就是在欧几里得的《几何原本》中所阐述的求两个数的最大公约数的过程,即辗转相除法。从此以后,算法这一叫法一直沿用至今。

随着时间的推移,算法这门学科得到了长足的发展,算法应该具有如下5个重要的特征。

有穷性:保证执行有限步骤之后结束。

确切性:每一步骤都有确切的定义。

输入:每个算法有零个或多个输入,以刻画运算对象的初始情况。所谓零个输入,是指算法本身舍弃了初始条件。

输出:每个算法有一个或多个输出,显示对输入数据加工后的结果,没有输出的算法是室无意义的。

可行性:原则上算法能够精确地运行,进行有限次运算后即可完成一种运算。

1.1.2 何为算法

为了理解什么是算法,先看一道有趣的智力题。"烧水泡茶"有如下5道工序: 1、烧开水, 2、洗茶壶, 3、洗茶杯, 4、拿茶叶,5、泡茶。烧开水、洗茶壶、洗茶杯、拿茶叶是泡茶的前提。其中,烧开水需要15min ,洗茶壶需要2min ,洗茶杯需要1min ,拿茶叶需要1min ,泡茶需要1min.下面是"烧水泡茶"的两种方法。

方法1的步骤如下。

第1步:烧水。

第2步:水烧开后,洗刷茶具,拿茶叶。

第3步:沏茶。

方法2的步骤如下。

第1步:烧水。

第2步:烧水过程中,洗刷茶具,拿茶叶。

第3步:水烧开后沏茶。

习题:比较这两种方法有何不同,并分析哪种方法更优。

上述两种方法都能最终实现“烧水泡茶的功能,每种方法的3个步骤就是一种算法。算法是指在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗点说,就是计算机解题的过程。在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是推理实现的算法,后者是操作实现的算法。

1.2计算机中的算法

众所周知,做任何事情都需要一定的步骤。计算机虽然功能强大,能够帮助人们解决很多问题,但是计算机在解决问题时,也需要遵循一定的步骤。在编写程序实现某个项目功能时,也需要遭循一定的算法。在本节的内容中,将一起探寻算法在计算机中的地位,探索算法在计算机中的基本应用知识。

1.2.1认识计算机中的算法

计算机中的算法可分为如下两大类。

数值运算算法:求解数值。

非数值运算算法:事务管理领域。

假设存在如下运算: 1x2x3x4x5,为了计算上述运算结果,最普通的做法是按照如下步骤进行计算。

第1步:先计算1乘以2,得到结果2。

第2步:将步骤1得到的乘积2乘以3,计算得到结果6。

第3步:将6再乘以4,计算得24。

第4步:将24再乘以5,计算得120。

最终计算结果是120,上述第1步到第4步的计算过程就是一个算法。如果想用编程的方式来解决上述运算,通常会使用如下算法来实现。

第1步:假设定义t=1。

第2步:令i=2。

第3步:把x的乘积仍然放在变量中,可表示为txi——t。

第4步:把的值加1,即i+1——i。

第5步:如果i≤5,返回重新执行步骤3以及其后的步骤4和步骤5 ;否则,算法结束。

由此可见,上述算法方式就是数学中的"n,公式。既然有了公式,在具体编程的时候,只需要使用这个公式就可以解决上述运算问题。

再看下面的一个数学应用问题。

假设有80个学生,要求打印输出成绩在60分以上的学生。

在此用n表示学生学号,用n表示第个学生的学号;用cheng表示学生成绩,用chengi表示第i个学生的成绩。根据题目要求,可以写出如下算法。

第1步: 1——i。

第2步:如果chengi≥60,则输出ni和chengi,否则不输出。

第3步: i+1——i。

第4步:如果i≤80,返回步骤2 ;否则,结束。

由此可见,算法在计算机中的地位十分重要。所以在面对一个项目应用时,一定不要立即编写程序,而是要仔细思考解决这个问题的算法是什么。想出算法之后,以这个算法为指导思想来编程。

1.2.2为什么说算法是程序的灵魂

算法是计算机处理信息的基础,因为计算机程序本质上就是算法,告诉计算机确切的步骤来执行一个指定的任务,如计算职工的薪水或打印学生的成绩单。通常,当算法在处理信息时,数据会从输入设备读取,写入输出设备,也可能保存起来供以后使用。

著名计算机科学家沃思提出了下面的公式。

数据结构+算法=程序

实际上,一个程序应当采用结构化程序设计方法进行程序设计,并且用某种计算机语言来表示。因此,可以用下面的公式表示。

程序=算法+数据结构+程序设计方法+语言和环境

上述公式中的4个方面是一种程序设计语言所应具备的知识。在这4个方面中,算法是灵魂,数据结构是加工对象,语言是工具,编程需要采用合适的方法。其中,算法是用来解决“做什么"和怎么做"的问题。实际上程序中的操作语句就是算法的体现,所以说,不了解算法就谈不上程序设计。数据是操作对象,对操作的描述便是操作步骤,操作的目的是对数据进行加工处理以得到期望的结果。举个通俗点的例子,厨师做菜肴,需要有菜谱。菜谱上一般应包括: 1、配料(数据) , 2、操作步骤(算法)。这样,面对同一原料可以加工出不同风味的菜肴。

本文节选自《Python算法详解》

375a214a70924872c4bfba954d2bf526.png

全书共13章,基于Python分别讲解了算法是程序的灵魂,数据结构,常用的算法思想,线性表、队列和栈,树,图,查找算法,内部排序算法,经典的数据结构问题,解决数学问题,经典算法问题,解决图像问题,游戏和算法等内容。全书内容以“技术解惑”贯穿全书,引领读者全面掌握算法的核心技术。

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

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

相关文章

java json 解析null_解析包含null的原始json数组

Json数组遇新是直朋能到:{"userName":null," msgArr":[null],"numrow":0} //String resultGson:new Gson().fromJson(result, MyClass.class);MyCl作一新求抖直微圈ass:public String userName;public int[] msgArr;...错…

python运维脚本部署jdk_基于Java/Python搭建Web UI自动化环境

Java搭建UI自动化测试环境下载JDK8https://www.cnblogs.com/thloveyl/p/12378124.html配置Java环境1.解压Jdk压缩包2.配置环境变量计算机->属性->高级->环境变量->系统变量->Path3.添加根目录下的bin与lib目录、jre下的bin目录(近期我发现只将bin目录加入Path就…

eclipse JAVA用户注册_如何eclipse编写一个简单实用的登陆界面

花了点时间写了一个简单的页面:package test;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class UserInterface extends JFrame implements WindowListener{JFrame jf;JPanel jpan1,jpan2,jpan3;JLabel username,password,lspace;JText…

java内存泄漏案例_寻找内存泄漏:一个案例研究

java内存泄漏案例一周前,我被要求修复一个有内存泄漏问题的webapp。 考虑到过去两年左右的时间里我已经看到并修复了数百个泄漏,我想这有多难。 但是事实证明这是一个挑战。 12小时后,我发现该应用程序中不少于5个漏洞,并设法修复…

doc无法编译java文件_java编译成jar文件.doc

java编译成jar文件Java程序打包成jar包(2012-06-08 10:28:23)转载▼标签:分类: 方法一:通过jar命令jar命令的用法:下面是jar命令的帮助说明:用法:jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-p…

python 档案管理系统_Python 写入档案的 4 个方法

在 Python 写入档案内容跟读取档案差不多, 也很简单方便,以下会介绍用 Python 逐行读取档案内容的 4 种方法。在看例子前先要了解开启档案的参数, 一般上读取档案会用 “r”, 即唯读的意思, 如果要写入档案, 分别可以用 “w” (即 write 的意思) 或 “a” (即 appen…

高可用性(HA),会话复制,多VM Payara群集

抽象 在研究如何创建高可用性(HA)时,我发现了会话复制的多机Payara / GlassFish群集,无法在一个参考中找到所需的一切。 我认为这将是一个普遍的需求并且很容易找到。 不幸的是,我的假设是错误的。 因此,本…

java时间日期工具类_java日期处理工具类

java日期处理工具类import java.text.DecimalFormat;import java.text.ParsePosition;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Locale;import java.util.Random;import java…

python运行结果闪退_Pyhton TestCase运行闪退与失败,原因不详。。。

把源码贴上来,希望某位大神可以指点迷津:"""Unit test for odbchelper.pyThis program is part of "Dive Into Python", a free Python book forexperienced programmers. Visit http://diveintopython.org/ for thelatest ver…

java.jsp.jdbc_Java-jsp使用JDBC访问数据库时显示乱码是怎么回事?

1.JSP页面编码你改成utf-8;2.servlet容器的编码格式你改成utf-8;以tomcat为例:找到你的安装目录tomcat下面 > conf > server.xml用记事本打开添加如下的代码:URIEncoding"utf-8"protocol"HTTP/1.1"port"8080"connec…

python实例讲解wxpythonhyh123_Python实例讲解 -- wxpython 基本的控件 (按钮)

使用按钮工作在wxPython 中有很多不同类型的按钮。这一节,我们将讨论文本按钮、位图按钮、开关按钮(toggle buttons )和通用(generic )按钮。如何生成一个按钮?在第一部分(part 1)中,我们已经说明了几个按钮的例子,所以这里我们只…

检测Java Web应用程序而无需修改其源代码

与其他系统进行交互时,大多数Java Web应用程序都使用标准Java接口。 使用接口javax.servlet.Servlet来实现基于HTTP的服务,例如网页或REST服务器。 使用JDBC接口java.sql.Statement和java.sql.Connection实现数据库交互。 这些标准几乎是通用的&#xff…

如何快速弄懂一个新模型_如何评估创业项目是否靠谱?一个新的模型 | 创创锦囊...

要判断一个创业项目是否靠谱,是否能拥有广阔的市场和巨大的增长潜力,不仅是投资人关心的话题,更是每一个创业者在创业过程中不断思考的问题。投资人关注大趋势、大机会,遵循自上而下的思维模型,在心仪的赛道上寻找合适…

java编译找不到符号 int age=in.nexint()_Java报错找不到符号,小白自学求大佬解决...

import java.util.*;public class guess_1{public static void main(String[] args){Scanner innew Scanner(System.in);System.out.println("--------猜拳游戏--------");System.out.println("请出拳(1.剪刀 2.石头 3.布)");int personin.nextInt();int c…

Java命令行界面(第24部分):MarkUtils-CLI

本系列中有关使用Java解析命令行参数的第一篇文章介绍了Apache Commons CLI库。 这是本系列中介绍的基于Java的命令行解析库中最古老的,而且可能是最常用的之一。 Apache Commons CLI确实显示了它的时代,特别是与一些更现代的基于Java的命令行处理库相比…

view如何接受json_如何将你的 ThinkJS 项目部署到 ZEIT 上

编者按:本文作者奇舞团前端开发工程师李喆明。什么是 ZEITZEIT(https://zeit.co) 是免费的云平台,支持部署静态网站以及 Serverless 函数。Serverless 是近几年比较火的概念,简单去理解就是你只需要去实现具体的业务逻辑,而与最终…

python 小爱音箱集成_python控制小爱音箱自定义设备开关_修仙教程_小爱同学

send send_to_login(ipport,cookie,start_time,end_time)def play(): name info,播放 message_json {"action":"play","media":"app_ios"} path mediaplayer method player_play_operation send.sned_to_cmd(message_json,path,me…

Spring MVC和REST中@RestController和@Controller注释之间的区别

Spring MVC中的RestController注释不过是Controller和ResponseBody注释的组合。 它已添加到Spring 4.0中,以简化在Spring框架中RESTful Web Services的开发。 如果您熟悉REST Web服务,您就会知道Web应用程序与REST API之间的根本区别在于,Web…

java patriciatrie_明明白白以太坊Merkle Patricia Trie

在以太坊数据结构中,Merkle Patricia Trie始终是个绕不过去的坎,世界状态,交易,交易收据等都是以这种树的形式存储在区块链数据库中,并将树root hash保存在区块头里。可以说不弄懂这种树的原理就没有办法真正明白以太坊…

python打开串口失败_python 如何防止串口通信失败?

python 对串口的操作我用的是“线程轮寻”方式。就是打开串口后,启动一个线程来监听串口数据的进入,有数据时,就做数据的处理(也可以发送一个事件,并携带接收到的数据)。我没有用到串口处理太深的东西。客户的原程序不能给你&…