algorithm - 以下方法的时间复杂度是多少?
问题描述
我试图了解如何检查时间复杂度,但我无法解决这个例子:
图片 :
有人可以帮我解决它并逐步解释如何做吗?
解决方案
算法循环直到 m 达到 0。在每次迭代中,m 要么减半(如果它是偶数),要么减 1(如果它是奇数)。如果算法在每次迭代中只将 m 减半,那么这将采取 log(m) 步骤(在复杂性的上下文中,log() 通常意味着以 2 为底)。然而,在我们的例子中,我们最多可能有两倍的迭代次数,也就是说,如果在偶数减半后得到一个奇数。这些奇数减 1,从而产生下一个偶数。
将步数加倍是一个常数因素,在使用 Big-O 表示法计算复杂度时不考虑该因素,因此复杂度保持在 O(log(n))。
推荐阅读
- python - PyInstaller and Kivy builds but doesn't run
- c - Copy bytes to buffer starting from nth byte of buffer in C
- r - 在一系列系列中,如何从这些事件中的每个第 n 个数字中减去每个子系列事件中的每个第一个数字?
- javascript - Cypress custom command with no prev subject not working?
- arrays - Aggregate columns and build array in bigquery
- python-3.x - Get text to csv format using python
- spacy - Is it possible to reduce the NER model for training on an existing SpaCy model?
- linux - 无法连接到在 Windows 10 虚拟机中运行的 postgresql 服务器
- python - 计算每次迭代和时间的损失(MSE)Tensorflow
- mysql - 连接到内部 MySQL 服务器