【问题标题】:running time of changetoBinary algorithm?changetoBinary 算法的运行时间?
【发布时间】:2014-03-22 07:48:02
【问题描述】:

我设计了一个算法来将 10 的幂转换为二进制,假设 n 是 2 的幂。 我使用高斯方法来使用这种好方法的快速运行时间。为此,我将 n 除以 2 并将其发送到 Gauess 方法,如下所示:

changetoBinary(n)
if n=1
    return binary of 10 which is 1010

else

 return gauess(n/2,n/2)

很明显,Guess方法会先分而治再结合。最后,我们将数字更改为二进制。现在我的问题是关于算法的运行时间:我的理解是,由于 Guess 运行时间是 Theta(n^log3(base2)) 我们可以说这个算法的运行时间也是一样的,因为大部分工作已经完成通过猜测。另一方面,当我尝试找到递归关系时,我想出了 T(n/2)+O(n),即 Theta(n) 那么哪个是正确的?我在计算中是否遗漏了某事我有矛盾吗?

【问题讨论】:

    标签: algorithm big-o divide-and-conquer big-theta


    【解决方案1】:

    你的算法的递归关系不是 T(n)=T(n/2)+n;

    算法的复杂度为 O(1)。 所以你是对的,高斯函数的复杂度就是你算法的复杂度。

    如果您的算法是: change_to_binary(n) { change_to_binary(n/2);..... }

    那么 T(n)=T(n/2) 本来是你的记录。关系。

    【讨论】:

    • 感谢您的回答,我想知道为什么运行时间只有 T(n)= T(n/2) 因为最后它应该添加二进制文件,例如 1010 和 1010 变为 (2^2 *10+10)(2^2*10+10) 并且我们至少有 2 个二进制加法需要 n(该级别的输入大小)?
    • T(n)=T(n/2)+c;并且 c=1 用于算法“change_to_binary”。完成二进制的加法是“高斯”函数,它的复杂性已经给出。其次,每个函数都会添加二进制编号。并且由于参数减少到原始(n)的一半(n / 2),因此在最后一次调用函数时将导致输入大小为“1”位。
    • 所以只是为了澄清我的想法,你的意思是这个alg的运行时间是Theta(n^log3(base2))?
    • 是的,如果高斯函数具有复杂度“Theta(n^log3(base2))”,那么您的整个算法将具有复杂度“Theta(n^log3(base2))”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    相关资源
    最近更新 更多