数据结构笔记----搜索,排序和复杂度分析

算法描述了最终能解决一个问题的计算过程。可读性和易维护性是重要的质量指标。

在计算机上运行算法会消耗两种资源:处理时间和空间或内存。当解决相同的问题或处理相同的数据集的时候,消耗这两种资源较少的算法会比消耗资源更多的算法具有更高的质量,因此,它也是更加合适的算法。

3.1.1度量算法的运行时间

# -*- coding:utf-8 -*-
import time

problemSize = 10000000
print('%12s%16s' % ('ProblemSize', 'second'))
for count in range(5):
    # 定义起始时间
    start = time.time()
    work = 1
    # 循环遍历问题大小
    for x in range(problemSize):
        # 使用work增减统计次数
        work += 1
        work -= 1
    # 再次调用时间减去开始时间得到运行时间
    elapsed = time.time() - start

    print('%12s%16.3f' % (problemSize, elapsed))
    # 问题大小翻倍
    problemSize *= 2
 ProblemSize          second
    10000000           1.553
    20000000           2.749
    40000000           5.514
    80000000          11.129
   160000000          29.064

不同硬件平台的处理速度不同,因此,一个算法的运行时间,在不同机器上是不同的。

对于很大的数据集合来说,确定某些算法的运行时间是不切实际的。

3.1.2统计指令

#-*- coding:utf-8 -*-
problemSize = 1000
print('%12s%15s' % ('ProblemSize', 'Iterations'))
for count in range(5):
    #定义次数
    number = 0
    
    work = 1
    #循环嵌套遍历问题大小的平方
    for j in range(problemSize):
        for k in range(problemSize):
            #统计次数
            number += 1
            work += 1
            work -= 1

    print('%12d%15d' % (problemSize, number))
    #循环一次后问题大小翻倍
    problemSize *= 2
ProblemSize     Iterations
        1000        1000000
        2000        4000000
        4000       16000000
        8000       64000000
       16000      256000000

估算算法性能的另一种技术,是统计对不同的问题规模所要执行的指令的数目。

#-*- coding:utf-8 -*-
from counter import Counter
#递归实现Fibonacci函数
def fib(n, counter):
    #递增一次,并记数
    counter.incremnet()
    if n < 3:
        return 1
    else:
        return fib(n-1, c
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值