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. 深入浅出 Java Concurrency (9): 锁机制 part 4 锁释放与条件变量 (Lock.unlock And Condition)

    本小节介绍锁释放Lock.unlock(). Release/TryRelease unlock操作实际上就调用了AQS的release操作,释放持有的锁. public final boolean ...

  2. Android APP压力测试实战

    环境准备: Android SDK Python   压测实战步骤 1.在手机开发者工具中,将USB调试选上 2.确认手机,电脑成功连接(通过adb devices) 3.安装测试app(adb in ...

  3. nginx 1.12 配置解析php

    server { listen 80; server_name foo.com; root /path; index index.html index.htm index.php; location ...

  4. 05_java之方法

    01方法的概述 * A: 为什么要有方法 * 提高代码的复用性 * B: 什么是方法 * 完成特定功能的代码块. 02方法的定义格式 * A: 方法的格式 * 修饰符 返回值类型 方法名(参数类型 参 ...

  5. [Z]牛人林达华推荐有关机器学习的数学书籍

    1. 线性代数 (Linear Algebra): 我想国内的大学生都会学过这门课程,但是,未必每一位老师都能贯彻它的精要.这门学科对于Learning是必备的基础,对它的透彻掌握是必不可少的.我在科 ...

  6. python变量、引用、拷贝之间的关系

    Python中一切皆为对象,不管是集合变量还是数值型or字符串型的变量都是一个引用,都指向对应内存空间中的对象. 简而言之: 变量直接赋值:新变量本身及其内部的元素都与原变量指向相同的内存空间,并且值 ...

  7. Linux启动流程【转载】

    探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程. 这个部分比较有意思.因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多:但是,一旦进入操作系统,程序员几乎可以定制 ...

  8. jssip音视频及短信开发demo(中文注释完整版)

    完整案例demo下载地址:http://download.csdn.net/download/qq_39421580/10214712 <!DOCTYPE html> <html l ...

  9. 4.redis 键

    转自:http://www.runoob.com/redis/redis-tutorial.html Redis 键(key) Redis 键命令用于管理 redis 的键. 语法 Redis 键命令 ...

  10. 控件的WndProc WindowProc

    SubClassWndProc This example shows how to use the WndProc method and the WindowProc property to subc ...