Time complexity 函数时间复杂度
我在一本书中读到,调用子例程被认为是一个常数时间操作,即使子例程本身不是在常数时间内执行的,而是取决于输入大小。 如果我有以下代码:Time complexity 函数时间复杂度,time-complexity,complexity-theory,asymptotic-complexity,code-complexity,Time Complexity,Complexity Theory,Asymptotic Complexity,Code Complexity,我在一本书中读到,调用子例程被认为是一个常数时间操作,即使子例程本身不是在常数时间内执行的,而是取决于输入大小。 如果我有以下代码: void func(int m){ int n = 10; subrout(m);//function which complexity depends on m subrout2(n);//function which complexity depends on n } 我想我可以把函数()看作是一个常数时间函数,例如O(1)? 如果我有这个:
void func(int m){
int n = 10;
subrout(m);//function which complexity depends on m
subrout2(n);//function which complexity depends on n
}
我想我可以把函数()看作是一个常数时间函数,例如O(1)? 如果我有这个:
void func(){
int n = 10;
Type object;
object.member_method(n);/*member function which time complexity depends upon n*/
}
仍然可以考虑函数()是否为常数时间函数? 这条规则是否适用于某些情况?
谢谢 >不,不能考虑<代码> FUNC(int m)< /C> >具有恒定的时间复杂度。其时间复杂度为
O(T1(m)+T2(10))
,其中T1
和T2
分别是描述子例程和子例程2
的时间复杂度的函数
在第二种情况下,时间复杂度在技术上是恒定的
作为一般性评论,使用渐近表示法指定时间复杂度的目的是描述操作数是如何随着输入大小的增加而增加的。这本书可能想说的是调用函数T\u func
的时间复杂度是T\u call+T\u callee
。这里,T\u call
是传递参数和为被调用方设置环境的时间操作,T\u calle
是在子例程中花费的时间。这本书说,假设T\u call
是常数是安全的,而对于T\u calle
没有这样的假设
func(s){
callee(s);
}
为了澄清,假设我们有一个调用一个子例程的函数func
func(s){
callee(s);
}
然后T_func(s)=T_call+T_被叫方
。如果size(s)=n
和T_callee=O(f(n))
则可以安全地说T_func=O(f(n))