for循环嵌套if判断语句时间复杂度的计算,该怎么解决
for循环嵌套if判断语句时间复杂度的计算
for里面有if怎么算时间复杂度?if判断语句中的条件也要算进去吗?
------解决方案--------------------
其实很难定义“最内侧”,就算是“最内侧”也不一定是执行次数最多的代码,不过也有估算价值
改变程序的规模直接测运行时间也可以做估算
但是如果你要较准确的时间复杂度,那最好阅读算法导论
------解决方案--------------------
如果基本操作就是比较,那么一条if 语句的计数为1
如果比较不是基本操作,相对基本操作,比较的时间可以忽略,那么只需要对基本操作计数
if 语句中,不执行基本操作的不计数,执行的计数。
时间复杂度是针对基本操作来说的;
一般循环的判断,计数,以及if 的比较操作,不计算在内,除非比较,循环计数,就是基本操作。
以各种基于比较的排序为例,有两种基本操作:
1)比较元素的大小的比较操作
2)交换元素的位置;
很多时候,由于这两种操作,的耗时时间差距不大,都是不可忽略的,所以都属于基本操作。
那么,以这两种操作的,时间复杂度最高的,计算时间复杂度。
如果,比较只是针对,大对象的一个比较小的键值的操作,
那么比较也是可以忽略的,可以不用计算他的时间复杂度。
这个排序过程中,还会执行循环变量的比较,和递增递减操作,不过和前面两种操作比较起来,耗时可以忽略。。。
特别是对象比较大的时候,所以他们不是基本操作。
基本操作,就是解决一个问题的主要操作,往往是耗时最长的操作,而且执行次数,往往和数据规模相关。
------解决方案--------------------
循环本身,如果有和规模相关的控制条件的话,可以判断基本操作的执行的次数
if 语句,可以提前终止循环,从而可以缩小基本操作的执行的次数。。。比只考虑循环时候执行的次数要少。
同样是排序。
内部排序,内存读写,比较属于基本操作。
外部排序,外设的读写操作,才是基本操作。
for里面有if怎么算时间复杂度?if判断语句中的条件也要算进去吗?
------解决方案--------------------
其实很难定义“最内侧”,就算是“最内侧”也不一定是执行次数最多的代码,不过也有估算价值
改变程序的规模直接测运行时间也可以做估算
但是如果你要较准确的时间复杂度,那最好阅读算法导论
------解决方案--------------------
如果基本操作就是比较,那么一条if 语句的计数为1
如果比较不是基本操作,相对基本操作,比较的时间可以忽略,那么只需要对基本操作计数
if 语句中,不执行基本操作的不计数,执行的计数。
时间复杂度是针对基本操作来说的;
一般循环的判断,计数,以及if 的比较操作,不计算在内,除非比较,循环计数,就是基本操作。
以各种基于比较的排序为例,有两种基本操作:
1)比较元素的大小的比较操作
2)交换元素的位置;
很多时候,由于这两种操作,的耗时时间差距不大,都是不可忽略的,所以都属于基本操作。
那么,以这两种操作的,时间复杂度最高的,计算时间复杂度。
如果,比较只是针对,大对象的一个比较小的键值的操作,
那么比较也是可以忽略的,可以不用计算他的时间复杂度。
这个排序过程中,还会执行循环变量的比较,和递增递减操作,不过和前面两种操作比较起来,耗时可以忽略。。。
特别是对象比较大的时候,所以他们不是基本操作。
基本操作,就是解决一个问题的主要操作,往往是耗时最长的操作,而且执行次数,往往和数据规模相关。
------解决方案--------------------
循环本身,如果有和规模相关的控制条件的话,可以判断基本操作的执行的次数
if 语句,可以提前终止循环,从而可以缩小基本操作的执行的次数。。。比只考虑循环时候执行的次数要少。
同样是排序。
内部排序,内存读写,比较属于基本操作。
外部排序,外设的读写操作,才是基本操作。