如何用τ-notation分析if语句复杂度?示例解法正误判断
τ-notation分析if语句的正确性判断
问题说明
针对语句 if(x>=y[z]) 用τ-notation做复杂度分析,现有两种解法:
- 解法a:
4τfetch + τ[.] + τ< - 解法b:
5τfetch + τ[.] + τ< + τreturn
需判断哪种解法正确,或指出错误所在。
我的推理过程
推理1(对应解法a)
拆解语句 if(x>=y[z]) 的操作步骤:
- 计算
y[z]:3τfetch + τ[.] - 获取
x:τfetch - 执行比较操作
>=:τ<
合计得到解法a:4τfetch + τ[.] + τ<
推理2(对应解法b)
拆解语句 if(x>=y[z]) 的操作步骤:
- 计算
y[z]:3τfetch + τ[.] - 获取
x:τfetch - 执行比较操作
>=:τ< - 额外计入
if()的τfetch + τreturn
合计得到解法b:5τfetch + τ[.] + τ< + τreturn
判断结论
τ-notation仅统计实际运算、内存访问类的基本操作,控制结构本身的框架性操作(如if的“调用/返回”)不属于统计范畴:
- 解法b错误:错误额外统计了
if()的τfetch + τreturn,这部分不属于τ-notation要求统计的基本操作。 - 解法a正确:准确统计了所有必要的基本操作:
y[z]包含3次fetch(取y的地址、z的值、y[z]的内容)+1次下标运算τ[.]x的1次fetch- 比较操作
τ<
合计4τfetch + τ[.] + τ<,完全符合τ-notation的统计规则。
内容的提问来源于stack exchange,提问作者Michael2523
相关产品推荐
相关产品推荐

