死宅日志——时空复杂度

本文探讨了评价代码质量的两个重要方面:良好的代码习惯和算法效率。着重讲解了如何通过时空复杂度来评估算法的优劣。举例说明了时间复杂度的概念,如O(n^2)、O(n!)等,并提供了一个寻找数组中元素最大值问题的解决方案,通过空间换时间的方法降低时间复杂度。同时,简要介绍了空间复杂度的概念,强调了变量存储空间的管理对算法效率的影响。

个人认为一段代码的好坏可以从良好的代码习惯和算法上来看。一个良好的代码习惯可以减少很多低级错误,尤其是php没有一个良好的代码习惯会产生许多漏洞。如:当你代码长了加注释可以防止自己看不懂自己写的代码,标识符或变量的名字不随便起。加缩进可以让代码更简洁。

而算法的优劣可以用时空复杂度来进行评估。

时间复杂度:

时间复杂度是算法的时间效率也就是说是代码运行所耗费的时间。代码运行所耗费的时间除了与所用的软件、计算机硬件环境有关外主要在于算法中指令执行的次数(语句的频度)。一个算法中所有语句的频度之和构成了算法运行的时间。

如:

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)s++;

这段代码中

频度为 n^2:s++、j++

频度为 n:i++、j=1

频度为1:i=1

所以其时间复杂度为O(3n2+2n+1)由于n特别大时n2和n相差过大n可以忽略所以在这里我们只看最高次,和极限一样。所以这段代码的时间复杂度为O(n^2)。通常

1<logN<ni<in<n!<n^n

O(1):时间复杂度为常数

O(i^n):时间复杂度为i的n次幂

这里举个例子:给定n个格子要求填进大小为1~n以内的n个数,有多少种。用枚举的方法时间复杂度为O(n2);若要求不重复时间复杂度为O(n!);若只能填入0、1则时间复杂度为O(2n)。

这里举个例子:

描述 Description

陶陶刚学了数组,并且他对查找一维数组中的最大值特别感兴趣,于是,他就产生了疑问:能不能找到数组中某个元素的 左边的最大值、右边的最大值和 不包含自身的最大值。

例如: 一个数组 共8个元素,

1 3 7 8 4 3 6 1

第 5个数(4) 左边的最大值是 8 右边最大值 是6,不包含自身的最大值 是 8

输入格式 Input Format

第一行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值