我试图了解如何检查时间复杂度,但无法解决此示例:
图片:
有人可以帮我解决它,并逐步解释如何做吗?
答案 0 :(得分:3)
算法循环直到m达到0。在每次迭代中,m减半(如果是偶数)或减1(如果是奇数)。如果算法在每次迭代中仅将m减半,则将需要log(m)个步骤(在复杂性的上下文中,log()通常应以2为底)。但是,在我们的情况下,我们最多可能有两倍的迭代次数,即,如果在将偶数减半后得到一个奇数。这些奇数减1会导致创建下一个偶数。
将步数加倍是一个恒定因素,在以Big-O表示法计算复杂度时并未考虑到这一点,因此复杂度保持在O(log(n))。