下面算法的时间复杂度是多少?

时间:2016-10-11 13:53:55

标签: algorithm time-complexity

二进制到十进制转换的时间复杂度是什么?

我认为如果二进制数中有K位,那么TC将是 O(K),但是,由于我们总是倾向于使用二进制数中的N位,所以TC会 O(N)

我是如何得到这个,因为我认为十进制数包含多少位来表示 N位二进制数。

然后,它是10 ^ k-1 = 2 ^ N-1 => K = N Log2 base10 =>这给出了 TC = O(N)

有人可以澄清一下吗?

此外,是否有机会减少这种时间复杂度?

2 个答案:

答案 0 :(得分:1)

  1. 10 ^ k - 1 = 2 ^ N - 1
  2. 起点。

    1. K = N Log2 base10
    2. 左边和右边都有

      -1,所以我们添加了1.我们有:

      10 ^ k = 2 ^ N现在。

      为了从10 ^ k得到K,我们将左右两个放入基数10的对数中。由于对数是你需要放置基数来获得参数的幂,因此基数10的log(10 ^ k)将会产生K.另一方面,N Log2 base10是我们因对数化而达到的值。

      1. 由于K,比特数是复杂度,复杂性与N Log2基数10直接相关,N Log2基数10是N乘以正标量。如果假设N是无穷大的,那么标量在分析上并不意味着很大的差异,因此,我们可以将N Log2基数10简化为O(N)

答案 1 :(得分:0)

十进制数字可以表示log(10)/ log(2)二进制数字,大约3.22。但是你想要二进制到十进制,所以假设每个十进制数字需要4位。无论如何,您的输出大小为O(N),其中N是您的输入大小。

现在,这对于未说明的算法的时间复杂性几乎没有说明。

对于小N,我们可以只查表O(1),但是当N很大时,例如10 ^ 6?

一个朴素的算法将一次处理一位输入,在输出小数上进行乘法/加法。这是输入上的O(N),每个步骤都花费O(N),因为这是在输出上移位/添加的成本。所以O(N ^ 2)是你的时间复杂度。