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. python‘s third day for me 字符串方法

    基 础 数 据 类 型 初 始   int  运算.+  -  *  /  **  %... bool: 判断,真假,作为条件. str:  存储少量的数据.操作简单,便于传输. list:  列表[ ...

  2. new及placememt new 异同点

    new与定位new 区别如下: 简单概括: new 分配的内存地址空间来自于heap堆,用完需使用delete 释放内存 定位new 使用的不是heap堆内存,因此不需要使用delete 释放 定位n ...

  3. RHCE7-学习里程 root 密码重置换

    一.root 密码重置换 当忘记root 密码后,可以按照以下方法重置 root 密码 1.重启动电脑,出现如下界面,按  上  下 键盘, 选择   (core)--再按e 2.在下图linux16 ...

  4. windows共享连接显示无法打开

    Ping目标地址和名称可以连通,但是访问告知无法打开或找到名称,看凭据设置正常,重启无效. 判断:可能是由于凭据过期引起,更新凭据,重启,仍旧无效. 修改IP地址进行访问,成功打开. 清理网络连接状态 ...

  5. F5负载均衡架构图

    原文:https://blog.csdn.net/qq_35611533/article/details/51917279?locationNum=1&fps=1

  6. 3DMAX导出FBX的烘焙动画选项

    勾选了 [烘焙动画]选项时,表示由骨骼动画塌陷为逐帧动画,这样的结果就是:导出的动画确保是正确的,但体积增大,这是骨骼动画与逐帧去画的区别所在. 如果不勾选此选项,则导出的是骨骼动画,可能出现一些问题 ...

  7. 批量判断网页是否NOT found

    import java.net.HttpURLConnection;import java.net.URL; public class NetValible{ static String[] url ...

  8. poi解析excle文件(xls,xlsx)

    解析xls文件 /** * 解析xls文件 * * @param path 文件路径 * @throws Exception */ public static void showXls(String ...

  9. 高性能Web服务器Nginx的配置与部署研究(14)平滑升级你的Nginx

    1.概述(可以直接跳过看第2部分) Nginx方便地帮助我们实现了平滑升级.其原理简单概括,就是: (1)在不停掉老进程的情况下,启动新进程. (2)老进程负责处理仍然没有处理完的请求,但不再接受处理 ...

  10. 解剖Nginx·自动脚本篇(6)编译器名称变量脚本 auto/cc/name

    回顾变量 CC 最初是在auto/options脚本中初始化的: CC=${CC:-gcc} 1 C Compiler 的 feature Windows 平台的编译器叫做MSVC,其他平台的都统称为 ...