algorithm - 这种分而治之的算法有什么作用?
问题描述
我敢肯定这很简单,这就是为什么我很沮丧。我在一次采访中得到了这段代码,有人问我这段代码计算了什么,复杂性是什么。我仍然很困惑。我尝试将输出写为 2 的底数,但我仍然没有找到模式。这是代码:
def mystery(n):
if n == 0:
return 0
if n % 2 == 0:
return mystery(n/2)
else:
return mystery(2(n-1)) + 1
我知道第二行正在测试它何时是偶数,但是,我仍然不明白这个函数的整体作用。有任何想法吗?**编辑:将 A 更改为神秘。
解决方案
假设A
s 应该是对 的递归调用mystery
,那么:
这并不是真正的分而治之的算法。它只n
是以某种迂回的方式返回 1 的二进制表示中的位数。
如果您了解n
奇怪时会发生什么,就会更容易理解。然后n
=2x+1
对于一些x
, 和mystery(n)
= mystery(4x)+1
= mystery(2x)+1
= mystery(x)+1
=mystery(floor(n/2))+1
推荐阅读
- ios - 使用 Swift 的 Facebook 链接页面打开 Facebook 应用程序
- python - 在 python 中发送空白电子邮件
- mysql - mysql数据库中的空间优化
- function - 如何从 Google 表格中的日期值查询范围
- php - 如何在yii2中删除多请求方法
- java - 条码扫描器 zxing 在启动时崩溃
- python - 如何在某些索引处显示包含某些元素的列表?
- sql - 在 TOAD 数据点中将两行分组为一
- python - PyQt5 - 插槽不接受信号回调的参数
- r - 使用collapse_row和kable时如何解决pdf文档中长表的对齐/显示问题?