如何将d-Ary堆的运行时间从O(log d n)简化为O((log n)/(log d))?
正确的简化是: log d n = log d * log n
如何推导除法简化?
答案 0 :(得分:4)
这使用公共标识在对数基数之间进行转换:
logx(z) = logm(z) / logm(x)
通过将两边乘以log m (x),得到:
logm(z) = logx(z) * logm(x)
这相当于您网站提问中的答案。
有更多信息here。
答案 1 :(得分:3)
假设
x = logd(n)我们已经等同,
n = dx然后
log2n = log2(dx) = x log2(d)按日志划分 2 (d)产生:
log2(n) / log2(d) = x所以
log2(n) / log2(d) = x = logd(n)
当然,假设d
是固定的,那么log 2 (d)只是一个常数。所以
O( logd(n) ) = O( 1 / log2(d) * log2(n) ) = O( log2(n) )也就是说,就Big-Oh表示而言,你可以为任何其他(例如)对数基数改变任何对数基数(大于1)。因此习惯于删除基数并写入O(log(n))