python算法都有哪些
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python算法都有哪些相关的知识,希望对你有一定的参考价值。
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
一个算法应该具有以下七个重要的特征:
①有穷性(Finiteness):算法的有穷性是指算法必须能在执行有限个步骤之后终止;
②确切性(Definiteness):算法的每一步骤必须有确切的定义;
③输入项(Input):一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输 入是指算法本身定出了初始条件;
④输出项(Output):一个算法有一个或多个输出,以反映对输入数据加工后的结果。没 有输出的算法是毫无意义的;
⑤可行性(Effectiveness):算法中执行的任何计算步骤都是可以被分解为基本的可执行 的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性);
⑥高效性(High efficiency):执行速度快,占用资源少;
⑦健壮性(Robustness):对数据响应正确。
相关推荐:《Python基础教程》
五种常见的Python算法:
1、选择排序
2、快速排序
3、二分查找
4、广度优先搜索
5、贪婪算法
参考技术A 1. 冒泡排序:是一种简单直观的排序算法。重复地走访过要排序的数列,一次比较两个元素,如果顺序错误就交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该排序已经完成。2. 插入排序:没有冒泡排序和选择排序那么粗暴,其原理最容易理解,插入排序是一种最简单直观的排序算法啊,它的工作原理是通过构建有序序列,对于未排序数据在已排序序列中从后向前排序,找到对应位置。
3. 希尔排序:也被叫做递减增量排序方法,是插入排序的改进版本。希尔排序是基于插入排序提出改进方法的排序算法,先将整个待排序的记录排序分割成为若干个子序列分别进行直接插入排序,待整个序列中的记录基本有序时,再对全记录进行依次直接插入排序。
4. 归并排序:是建立在归并操作上的一种有效的排序算法。该算法是采用分治法Divide and的一个非常典型的应用。
5. 快速排序:由东尼·霍尔所发展的一种排序算法。又是一种分而治之思想在排序算法上的典型应用,本质上快速排序应该算是冒泡排序基础上的递归分治法。
6. 堆排序:是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质,即子结点的键值或索引总是小于它的父结点。
7. 计算排序:其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中,作为一种线性时间复杂度的排序,计算排序要求输入的数据必须是具有确定范围的整数。 参考技术B 回答
1 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的四位数?都是多少?for a in range( 1, 5):for b in range( 1, 5):for c in range( 1, 5):for d in range( 1, 5):if(a!=b and a!=c and a!=d and b!=c and b!=d and c!=d):print(a,b,c,d)
注意:start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
2 题目:打印出国际象棋图分析:行为0-7,列为0-7,当行列之和为奇数时为黑色import sysfor i in range( 8):for j in range( 8):if (i + j) % 2 != 0:print( chr( 219), end= \'\')print( chr( 219), end= \'\')else: print( \' \', end= \'\')print( \' \\n \', end= \'\')3题目: 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数判断是否为字母:str.isspace判断是否为空格:str.isalpha判断是否为数字:str.isdigit判断是否为其他字符:前三种都不是就是其他字符输入: str = input( \'please input a string:\\n\' )space = 0digit= 0alpha= 0other= 0str = "12jdfj wjdf dfj wejwi jsdifj,,nfiraj "for i in str:if(i.isalpha()):alpha=alpha+ 1 if(i.isspace()):space=space+ 1 if(i.isdigit()):digit=digit+ 1 else:other=other+ 1print( "space=",space, "digit=",digit, "alpha=",alpha, "other=",other)运行结果:space= 5 digit= 2 alpha= 28 other= 354 题目 汉诺塔Hanoi塔问题,算法分析如下,设A上有n个盘子(编号由上到下:1、2、3……、n)。A:初始塔,B:中转塔,C:目标塔 a、如果n=1,则将盘子从A塔直接移动到C塔(借助B塔)。 b、如果n=3,则: (1)将A塔上编号1~2的盘子(2个盘子)移动到B塔上(借助C塔); (2)将A塔上编号3的盘子(最后一个盘子)移动到C塔上; (3)将B塔上编号1~2的盘子(2个盘子)移动到C塔上(借助A塔)。 c、延伸,如果n=num,则: (1)将A塔上编号1~
运行结果:
(1)非线性时间比较类排序:
a. 交换类排序(快速排序、冒泡排序)
b. 插入类排序(简单插入排序、希尔排序)
c. 选择类排序(简单选择排序、堆排序)
d. 归并排序(二路归并排序、多路归并排序)
(2)线性时间非比较类排序:
a. 技术排序
b. 基数排序
c. 桶排序
总结:
(1)在比较类排序种,归并排序号称最快,其次是快速排序和堆排序,两者不相伯仲,但是有一点需要注意,数据初始排序状态对堆排序不会产生太大的影响,而快速排序却恰恰相反。
(2)线性时间非比较类排序一般要优于非线性时间比较类排序,但前者对待排序元素的要求较为严格,比如计数排序要求待待排序数的最大值不能太大,桶排序要求元素按照hash分桶后桶内元素的数量要均匀。线性时间非比计较类排序的典型特点是以空间换时间。 参考技术D 十种常见排序算法一般分为以下几种:
(1)非线性时间比较类排序:
a. 交换类排序(快速排序、冒泡排序)
b. 插入类排序(简单插入排序、希尔排序)
c. 选择类排序(简单选择排序、堆排序)
d. 归并排序(二路归并排序、多路归并排序)
(2)线性时间非比较类排序:
a. 技术排序
b. 基数排序
c. 桶排序
总结:
(1)在比较类排序种,归并排序号称最快,其次是快速排序和堆排序,两者不相伯仲,但是有一点需要注意,数据初始排序状态对堆排序不会产生太大的影响,而快速排序却恰恰相反。
(2)线性时间非比较类排序一般要优于非线性时间比较类排序,但前者对待排序元素的要求较为严格,比如计数排序要求待待排序数的最大值不能太大,桶排序要求元素按照hash分桶后桶内元素的数量要均匀。线性时间非比计较类排序的典型特点是以空间换时间。
python的优点都有哪些
优点
简单:Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。
易学:Python极其容易上手,因为Python有极其简单的说明文档 [10] 。
易读、易维护:风格清晰划一、强制缩进
用途广泛
速度快:Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快。 [7]
免费、开源:Python是FLOSS(自由/开放源码软件)之一。使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。
高层语言:用Python语言编写程序的时候无需考虑诸如如何管理你的程序使用的内存一类的底层细节。
可移植性:由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux开发的android平台。
解释性:一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。
运行程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行 程序。
在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。这使得使用Python更加简单。也使得Python程序更加易于移植。
面向对象:Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。
Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。
可扩展性、可扩充性:如果需要一段关键代码运行得更快或者希望某些算法不公开,可以部分程序用C或C++编写,然后在Python程序中使用它们。
Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。因此,很多人还把Python作为一种“胶水语言”(glue language)使用。使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目,例如Google Engine使用C++编写性能要求极高的部分,然后用Python或Java/Go调用相应的模块。《Python技术手册》的作者马特利(Alex Martelli)说:“这很难讲,不过,2004 年,Python 已在Google 内部使用,Google 召募许多 Python 高手,但在这之前就已决定使用Python,他们的目的是 Python where we can, C++ where we must,在操控硬件的场合使用C++,在快速开发时候使用 Python。”
可嵌入性:可以把Python嵌入C/C++程序,从而向程序用户提供脚本功能。
丰富的库:Python标准库确实很庞大。它可以帮助处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。
规范的代码:Python采用强制缩进的方式使得代码具有较好可读性。而Python语言写的程序不需要编译成二进制代码。Python的作者设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。其中很重要的一项就是Python的缩进规则。一个和其他大多数语言(如C)的区别就是,一个模块的界限,完全是由每行的首字符在这一行的位置来决定(而C语言是用一对花括号来明确的定出模块的边界,与字符的位置毫无关系)。通过强制程序员们缩进(包括if,for和函数定义等所有需要使用模块的地方),Python确实使得程序更加清晰和美观。
高级动态编程:虽然Python可能被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也广泛地使用它。Python的支持者较喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言,如shellscript、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。
做科学计算优点多:说起科学计算,首先会被提到的可能是MATLAB。除了MATLAB的一些专业性很强的工具箱还无法被替代之外,MATLAB的大部分常用功能都可以在Python世界中找到相应的扩展库。和MATLAB相比,用Python做科学计算有如下优点:
● 首先,MATLAB是一款商用软件,并且价格不菲。而Python完全免费,众多开源的科学计算库都提供了Python的调用接口。用户可以在任何计算机上免费安装Python及其绝大多数扩展库。
● 其次,与MATLAB相比,Python是一门更易学、更严谨的程序设计语言。它能让用户编写出更易读、易维护的代码。
● 最后,MATLAB主要专注于工程和科学计算。然而即使在计算领域,也经常会遇到文件管理、界面设计、网络通信等各种需求。而Python有着丰富的扩展库,可以轻易完成各种高级任务,开发者可以用Python实现完整应用程序所需的各种功能。
参考技术A 1. 简单:Python奉行简洁主义,易于读写,它使你能够专注于解决问题而不是去搞明白语言本身。2. 免费:Python是开源软件。这意味着你不用花一分钱便能复制、阅读、改动它,这也是Python越来越优秀的原因——它是由一群希望看到一个更加优秀的Python的人创造并经常改进着的。
3. 兼容性:Python兼容众多平台,所以开发者不会遇到使用其他语言时常会遇到的困扰。
4. 面向对象:Python既支持面向过程,也支持面向对象编程。在面向过程编程中,程序员复用代码,在面向对象编程中,使用基于数据和函数的对象。
5. 丰富的库:Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。
6. 规范的代码:Python采用强制缩进的方式使得代码具有极佳的可读性。
7. 可扩展性和可嵌入性。如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。 参考技术B
Python所具备的优点:
①Python语法优雅,程序编码简单易读。
②Python易上手,通过简单的操作就能让你写的程序运行。Python非常适合用来做原型开发或其他专门的编码任务,同时又不用为了维护而烦恼。
③Python拥有大量的标准库来支持一般的编码任务,例如连接网络服务器、用正则表达式搜索文字、读取和修改文件等。
④Python的交互模式可以很方便地检测代码片段。同时Python其实也自带了一个叫做IDLE的集成开发环境,初学者可以利用它方便地创建、运行、测试和调试Python程序。
⑤Python通过添加新的模块可以很容易进行扩展,这些模块可以是通过类似C或C++等编译型语言执行应用的。注意,Python是解释型脚本语言。
⑥Python也可以被嵌入应用中来提供一个可编程的接口。
⑦Python可以在任何环境运行,包括Mac OS X,Windows,Linux和Unix,通过非官方的构建,也可以在android和ios上运行。
⑧Python双重免费。首先下载和使用或是在你的应用中内置Python是完全免费的。其次Python可以被自由修改然后再发布,因为语言是完全开源的。
参考技术C python的优点:1、简单、易学:python非常简单,非常适合人类阅读,python的代码就像英语文章一样,这种伪代码是它最大的优点之一,使你能够专注于解决问题;python极其容易上手,python摒弃了c语言中非常复杂的指针,简化了python的语法,2、免费、开源:python的所有内容都是免费、开源的,可以任意发布软件的版本、阅读软件的源代码、对它做改动,3、可移植性:由于python是开源的,目前已经被移植到了大多数平台,如果的程序避开了对系统的依懒性,那么你的程序可以在任意平台运行使用,例如:Windows、MacOS、Linux、Andorid、iOS等等,python的缺点:1、速度慢:Python是解释型语言,所有运行速度会比C、C++慢,但是不影响使用,2、开源性:由于python的开源性导致python代码无法加密,3、强制缩进:如果你经常使用C语言或者Java语言来编写程序,那么python的强制缩进会让你很不适应,如果习惯看强制缩进,写出的代码排版非常美观。 参考技术D Python是一种计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。Python的特点如下:
1、简单
Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。
2、易学
Python极其容易上手,因为Python有极其简单的说明文档 。
3、速度快
Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快。
4、免费、开源
Python是FLOSS(自由/开放源码软件)之一。使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。
5、高层语言
用Python语言编写程序的时候无需考虑诸如如何管理你的程序使用的内存一类的底层细节。
6、可移植性
由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux开发的android平台。7、解释性
一个用编译型语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。
运行程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行 程序。
在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。这使得使用Python更加简单。也使得Python程序更加易于移植。
8、面向对象
Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。
9可扩展性
如果需要一段关键代码运行得更快或者希望某些算法不公开,可以部分程序用C或C++编写,然后在Python程序中使用它们。
10、可嵌入性
可以把Python嵌入C/C++程序,从而向程序用户提供脚本功能。
11、丰富的库
Python标准库确实很庞大。它可以帮助处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。
12、规范的代码
Python采用强制缩进的方式使得代码具有较好可读性。而Python语言写的程序不需要编译成二进制代码。
以上是关于python算法都有哪些的主要内容,如果未能解决你的问题,请参考以下文章