数据结构基础

数据结构
(一) 算法

  1. 算法的引入:
    算法是指解题方案的准确且完整的描述,是一系列解决问题的清晰指令,算法代表的是用系统的方法描述解决问题的策略机制

  2. 算法的特性:
    1) 输入: 有0个或者多个输入
    2) 输出: 至少有一个或者多个输出
    3) 有穷性: 有限的步骤结束后就会自动结束
    4) 确定性: 每一步都有自己的含义
    5) 可行性: 每一步算法都是可行的

  3. 算法效率衡量
    (1) 执行时间反应算法效率的内容:实现算法程序执行的时间可以反映出算法的效率,即算法的优劣
    (2) 但是光靠运行时间来判断算法的优劣是不客观准确的
    (3) 时间复杂度: 假设存在函数g , 使得算法A 处理规模为n 的问题示例所用的时间为T(n) = O (g(n)) ,则称O(g(n)) 为算法A 的渐近时间复杂度,记为T(n)
    (假定计算机执行算法每一个基本操作时间是固定的一个时间单位,那么有多少个基本操作就代表会花费多少时间单位)
    “大O 记法” : 计量算法基本操作数量的规模函数中那些常量因子可以忽略不计
    eg: a+b+c=1000,且 a2+b2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?

    #方法一:
     import time
    
     start_time = time.time()
     for a in range(0, 1001):
         for b in range(0, 1001):
             for c in range(0, 1001):
                 if a + b + c == 1000 and a ** 2 + b ** 2 == c ** 2:
                     print(a, b, c)
     end_time = time.time()
     print('run: %.6f' % (end_time - start_time))
     
     #方法二:
     # a:0~1000 , b: 0~ 1000 , c= 1000-a-b
     import time
     start_time = time.time()
     for a in range(0, 1001):
         for b in range(0, 1001 - a):
             c = 1000 - a - b
             if a ** 2 + b ** 2 == c ** 2:
                 print(a, b, c)
     end_time = time.time()
     print('run: %.6f' %(end_time-start_time))
    

运行结果为:
方法一:
在这里插入图片描述

方法二:
在这里插入图片描述由上面的两个实验结果可以发现: 虽然是相同的题,但用不同的代码来实现,所需要的时间的差异还是很大的。当我们将代码进行优化后,所需要的运行时间就变少了很多。这也体现出时间复杂度对我们编程的重要性。

(二) 时间复杂度
时间复杂度的计算规则:
1) 基本操作: 只有常数项,认为时间复杂度为O(1)
2) 顺序结构: 时间复杂度按加法进行计算

3) 循环结构: 时间复杂度按乘法计算
4) 分支结构 : 时间复杂度取最大值
(一般情况来说,讨论的都是最坏时间复杂度)

常见的时间复杂度

在这里插入图片描述

在这里插入图片描述

性能分析
class timeit.Timer(stmt = ‘pass’ ,setup=‘pass’,timer <= timer function>)
Timer : 测量小段代码的执行速度的类
stmt 参数: 是测试代码的语句(statment)
setup 参数: 是运行代码时需要的设置
timer 参数: 是一个定时器函数,与平台有关
timeit.Timer.timeit(number = 1000000)
测试语句执行速度的对象方法,number 参数是测试代码时的测试次数,默认为1000000.

ps 常见类型的时间复杂度:

在这里插入图片描述

(三) 数据结构
1) 数据结构的引入
问题 ----> 数据结构 + 算法 ------> 解决问题
算法是为了解决问题而设计的,数据结构是算法需要处理的问题载体
2) 数据结构的分类
(1) 数据的逻辑结构
线性结构: 线性表,栈
非线性结构: 树 , 图
(2) 数据的存储结构
顺序存储
链式存储
索引存储
散列存储
(3) 数据的运算: 检索,排序,输入,输出,删除,修改

ps:python 提供现成的数据结构类型称作是python 的内置数据结构 eg: 列表,元组,集合,字典
python系统中没有直接定义,需要自己定义的称为python 的扩展数据类型 , eg : 栈,队列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值