对于一些包含递归的程序要一眼看出他的运行时间O并不是很容易的事,不过好在这也并不是一件很难的的事,至少《算法导论》中对递归式的时间求解就列举了三种方法:1.代换法,2.递归树,3.主方法。
在本文中将用到的递归式表示为T(n)=aT(n\b)+f(n),a>0,b>1;
1.代换法
代换法的核心在于猜,首先需要我们猜一个合适的运行时间(比如n,n^2等),假设我们现在对于某一个递归式的猜测为c(n^x),此时我们有T(n)的运行时间为c(n^x),我们在讲c(n^x)代入到递归式中,能够得到递归式的运行时间为m(m或为多项式),看最后的结果能不能满足当c取某一常数的时候有c(n^x)>=m,如果有,则说明我们的猜测至少不是错误的,但还是有可能我们猜测的运行时间远远大于实际的运行时间,此时c(n^x)>=m也成立,然后我们需要逐步减少猜测的运行时间,逐步进行确定,最后的到一个较为准确的时间。如果不满足c(n^2)>=m,则说明我们的猜测过于小,这时就需要增大猜测的运行时间,然后进行验证。
代换法并不是一个很好的求解递归式时间的方法,但这却是一个锻炼自己对递归式时间判断的好方法。当对各种各样的递归式了解的足够多的时候,可以