悦读:时空复杂度与程序优化

1.常见误区解析

        1.时间复杂度越低,程序越好:很经典的一个错误结论,首先,程序的设计除了算法性能,还需要综合考虑数据本身的特点,就时间复杂度来说,当数据量足够小的时候,冒泡,插入,选择排序的实际耗时是要优于快排归并的,就程序本身的特点来说,我们都知道快速排序的时间复杂度虽然和归并排序和堆排序是一个数量级的,但是速度其实更快,但能说明快速排序就一定好吗?归并排序的稳定性和堆排序的省空间也是程序设计的重要考察部分。因此时间复杂度与程序的好坏有关,但不是决定性因素

        2.空间复杂度是文件大小:明显错误,空间复杂度是实际所占空间大小,涉及到结构体对齐,内存对齐(与结构体对齐极其类似)

2.计算

        1.计算时间复杂度,首先应计算循环的执行次数和递归的具体深度(把递归画成一棵树),将其作为主元,其次进行常数忽略,最后就得到了时间复杂度

        2.logn是怎么来的,假如生成一棵满二叉树,要生成n个节点就要生成log2n+1层,递归深度和时间复杂度就是log2n+1层*每层的常数个顶点即o(log2 n-1),忽略所有的数字(你看到的)就是(logn)

        3.计算空间复杂度:递归深度*每层所占空间

        4.如何判断一个结构是常量还是变量?将不同数值的变量代入程序,观察该结构是否发生改变,如构建n个节点的满二叉树,当n为100时,每层是1,2,4,8.......个,当n为500时也是,所以所消耗的时间和空间是常量,但是构建满m叉树,当m为1时每层1,1,1.......个,当m为2时每层1,2,4,8......个,每层的时间复杂度和空间复杂度会随着变量的改变而改变,因此这是一个变量3.

3.优化程序

        1.整体思路:以空间换时间,比如哈希表就是一个典型的例子,可以迅速找到一个字符串中出现频率第n小的字符

        2.整体优化:用变量来储存每次递归的结果,可以实现n到logn的飞跃

        3.局部优化:增加递归终止条件以减少递归次数(不常用)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值