数据结构与算法的引入

数据结构与算法

  • 什么是数据结构?

    • 广义上讲,数据结构就是一组有结构的数据
  • 什么是算法

    • 算法就是操作数据的方法
  • 数据结构与算法的关系

    • 数据结构与算法是相辅相成的。数据结构是为算法服务的,算要作用在特点的数据结构之上。
    • 数据结构是静态的,它只是组织数据的一种方式。如果不在它的基础上操作、构建算法,孤立存在的数据是没有用的。
    • 算法的引入
    import time
    start_time = time.time()
     for a in range(1, 1001): 
     	for b in range(1, 1001): 
    		 for c in range(1, 1001):
      			 if a**2 + b**2 == c**2 and a+b+c == 1000: 
     			 print("a, b, c: %d, %d, %d" % (a, b, c)) 
       end_time = time.time() 
       print("times: %f" % (end_time - start_time)) 
    
    import time
    start_time = time.time()
    for a in range(1, 1001):
        for b in range(1, 1001):
            c = 1000 - a - b
            if a**2 + b**2 == c**2:
                print('a,b,c:%d,%d,%d' % (a, b, c))
    end_time = time.time()
    print('time:%f' % (end_time - start_time))
    
    • 俩个代码的作用是一样的,但是效果是截然不同的

      • 执行结果

      time的单位是秒

      第一次执行结果:
      a,b,c:200,375,425
      a,b,c:375,200,425
      time:1330.780704
      
      第二次执行结果:
      a,b,c:200,375,425
      a,b,c:375,200,425
      time:1.239683
      
    • 出现这种效果的原因就显而易见了,三个循环变为俩个循环,代码的规模数量级的递减,本来是1000的3次方变为了平方,所以执行时间的长短就显而易见了。

    • 但是这不是绝对的,仅仅凭借时间是不准确的,这和测试环境也就是电脑CPU的运算速度是是有关系的。

    • 既然凭借时间是不可靠的,所以引入了一种表示方法,大O表示法。

  • 大O表示法

    • 公式:T(n)=O(f(n))
    • 利用timeit测试python内置的数据类型
    def test1():
        l =[]
        for i in range(1000):
            l = l + [i]
    
    def test2():
        l =[]
        for i in range(1000):
            l.append(i)
    
    def test3():
        l = [i for i in range(1000)]
    
    def test4():
        l = list(range(1000))
    
    def test5():
        l = []
        for i in range(1000):
            l.insert(0,1)# 按照索引添加
    
    from timeit import Timer
    t1 = Timer("test1()","from __main__ import test1")
    print('add',t1.timeit(number=1000))
    t2 = Timer("test2()","from __main__ import test2")
    print('append',t2.timeit(number=1000))
    t3 = Timer("test3()","from __main__ import test3")
    print('list derivation',t3.timeit(number=1000))
    t4 = Timer("test4()","from __main__ import test4")
    print('list range',t4.timeit(number=1000))
    t5 = Timer("test5()","from __main__ import test5")
    print('list insert',t5.timeit(number=1000))
    
    # 执行结果如下所示:
    add 1.9101277470447664
    append 0.0971444667175394
    list derivation 0.04159321139222838
    list range 0.016761584285372777
    list insert 0.43026811662878917
    
    • 由于大O表示法公式各个字母代表的含义,在思维导图中已经写过了,就不在重复写了
    • 以下是我用xmind做的学习笔记的思维导图
    • 顺便提一下,用xmind做学习笔记比较方便,有想用的同学可以下载一下,只能普通的功能都是免费的,导出格式用png也是免费的,但是pdf需要激活订阅版或者直接购买才能使用。
      在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WSZFSNFK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值