1》递归相关:

  递归:递归算法是一种直接或间接地调用自身算法的过程,在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且                   易于理解;
  特点:

    (1)递归就是在过程或函数中调用自身;
    (2)在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口;
    (3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低,所以一般不提倡使用递归算法设计程序;
    (4)在递归调用的过程当中系统为每一层的返回点,局部量等开辟了栈来存储,递归次数过多容易造成栈溢出等,所以一般不提倡使用递归算法设计                          程序;
  要求:
    递归算法所体现的“重复”一般有三个要求:
    (1)每次调用在规模上都有所缩小(通常是减半);
    (2)相邻两次重复直接有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);
    (3)在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条                          件递归调用将会成为死循环而不能正常结束;
  示例:

2》通过递归实现裴波那契数列(每个数总是等于前两个数的值的数列):

3》算法基础之二分查找:

上图会找不到1,现做出改正:

       

4》算法基础之二维数组:

1>生成列表方法:

      

       2>生成二维数组方法:

      

         eg:将一个二维数组翻转90度:
        自己做的:

           

参考老师代码:

            

5》算法基础之冒泡排序:

    

6》时间复杂度介绍:  

  1>时间频度:

     一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机进行测试才能知道,当我们可能也没有必要对每个算法都上机测试,只需知道哪个算           法花费等待时间多,哪个算法花费的时间少就可以了;并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费             时间就多,一个算法中的语句执行次数称为语句频度或者时间频度,记为T(n);
 2>时间复杂度:
    在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化;但有时我们也想指定它变化时呈现什么规律,为此,我们            引入时间复杂度概念;一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大              时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数,记作T(n)=O(f(n)),称O(f(n))为算法的渐进时
          间复杂度,简称时间复杂度;
 3>指数时间:
  指的是一个问题求解所需要的计算时间m(n),依输入数据的大小n而呈指数成长(即输入数据的数量依线性成长,所花的时间将会以指数成长)
 4>示例:

         第一个for循环的时间复杂度为O(n),第二个for循环的时间复杂度为O(n^2),则整个算法的时间复杂度为O(n+n^2)=O(n^2);              

  5>常数时间:
    若对于一个算法,T(n)的上界与输入大小无关,则称其具有常数时间,记作O(1)时间;一个例子是访问数组中的单个元素,因为访问它只需要一条指             令,但是,找到无序数组中的最小元素则不是,因为这需要遍历所有元素找到最小值,这是一项线性时间的操作,或称O(n)时间;但如果预先知道元素的数          量并假设数量保持不变,则该操作也可被称为具有常数时间;
      6>对数时间:
    若算法的T(n)=O(log n),则称其具有对数时间;常见的具有对数时间的算法有二叉树的相关操作和二分搜索;对数时间的算法是非常有效的,因为每增加         一个输入,其所需要的额外计算时间会变小;递归将字符串砍半并且输出是这个类别函数的一个简单例子;
     7>线性时间:
    如果一个算法的时间复杂度为O(n),则称这个算法具有线性时间,或O(n)时间,非正式地说,这意味着
             对于足够大的输入,运行时间增加的大小与输入成线性关系。例如,一个计算列表所有元素的和的程序,需要的时间与列表的长度成正比;

Python之算法基础的更多相关文章

  1. Python学习笔记——基础篇【第四周】——迭代器&生成器、装饰器、递归、算法、正则表达式

    目录 1.迭代器&生成器 2.装饰器 a.基本装饰器 b.多参数装饰器 3.递归 4.算法基础:二分查找.二维数组转换 5.正则表达式 6.常用模块学习 #作业:计算器开发 a.实现加减成熟及 ...

  2. 腾讯2017年暑期实习生编程题【算法基础-字符移位】(C++,Python)

     算法基础-字符移位 时间限制:1秒 空间限制:32768K 题目: 小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间. 你能帮帮小Q吗? ...

  3. Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发

    本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...

  4. Python学习笔记——基础篇【第五周】——算法(4*4的2维数组和冒泡排序)、时间复杂度

    目录 1.算法基础 2.冒泡排序 3.时间复杂度 (1)时间频度 (2)时间复杂度 4.指数时间 5.常数时间 6.对数时间 7.线性时间 1.算法基础  要求:生成一个4*4的2维数组并将其顺时针旋 ...

  5. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  6. Python之路,第一篇:Python入门与基础

    第一篇:Python入门与基础 1,什么是python? Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 2,python的特征: (1)易于学习,易于利用: (2)开 ...

  7. Python:笔记(1)——基础语法

    Python:笔记(1)——基础语法 我很抱歉有半年没有在博客园写过笔记了,客观因素有一些,但主观原因居多,再多的谴责和批判也都于事无补,我们能做的就是重振旗鼓,继续出发! ——写在Python之前 ...

  8. Python入门篇-基础数据类型之整型(int),字符串(str),字节(bytes),列表(list)和切片(slice)

    Python入门篇-基础数据类型之整型(int),字符串(str),字节(bytes),列表(list)和切片(slice) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Py ...

  9. Python入门篇-基础语法

    Python入门篇-基础语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编程基础 1>.程序 一组能让计算机识别和执行的指令. 程序 >.算法+ 数据结构= 程 ...

随机推荐

  1. 将自己数据转化为cifar10支持的lmdb

    大家都知道,在caffe里面,要运行cifar10的例子就得先由cifar10的数据库.由于caffe为了提高运行效率,减少磁盘寻道时间等,统一了数据接口(lmdb,leveldb). 首先,看一下c ...

  2. ubuntu下安装stm32开发环境

    在windowns下开发stm32刚开始学最烦的就是创建工程模板,都不知道为什么要那样设置,而且步骤繁多.现在我告诉大家一个好消息,在linux下配置stm32开发环境包括创建工程,使用JLink仿真 ...

  3. 手把手教你使用node-inspector调试nodejs

    最近再看nodejs,这个东西是运行在服务端的,也就是说我们在客户端看不到相应的js代码,那么怎么调试了?目前主流的方法有三种.第一是采用node-inspector.第二种采用nodejs内置的调试 ...

  4. Netty的ChannelHandler,ChannelHandlerContext,ChannelPipeline

    本小节一起学习一下ChannelHandler,ChannelHandlerContext,ChannelPipeline这三个Netty常用的组件,不探究它们的底层源码,我们就简单的分析一下用法 首 ...

  5. GeoServer之图层的新建与发布

    GeoServer之图层的新建与发布 GeoServer的图层发布并不复杂,在经过: 1.创建工作区 2.添加新的数据存储 3.编写styles 后:我们就可以很简单的创建图层了. 1.在新建图层中选 ...

  6. pandas 读取excle ,迭代

    # -*-coding:utf-8 -*- import pandas as pd xls_file=pd.ExcelFile('D:\python_pro\\address_list.xlsx') ...

  7. Redis实战——redis主从复制和集群实现原理

    出自:https://blog.csdn.net/nuli888/article/details/52136822 redis主从复制redis主从配置比较简单,基本就是在从节点配置文件加上:slav ...

  8. Linux大牛分享的7道经典面试题和秒收 offer 的技巧

    笔者其实没有想到去面试,只是在智联上更新了一下简历,就陆陆续续接到很多猎头的邮件和电话,闲话少说,下面就分享给大家Linuxer的面试经历: 首先,猎头或者公司人资会把公司的介绍及岗位要求发到你邮箱( ...

  9. ServletContextListener中@Autowired失效的解决方法

    @WebListener public class ContextWebListener implements ServletContextListener { @Override public vo ...

  10. linux服务器中Apache隐藏index.php失败

    可以通过URL重写隐藏应用的入口文件index.php,下面是相关服务器的配置参考: [Apache] httpd.conf配置文件中加载了mod_rewrite.so模块 AllowOverride ...