你如何计算Big-O表示法的复杂性?任何机构都可以在下面的代码中解释

时间:2016-10-20 11:27:55

标签: time-complexity big-o complexity-theory asymptotic-complexity space-complexity

void KeyExpansion(unsigned char key[N_KEYS], unsigned int* w)
{
    unsigned int temp;
    for(int i=0; i< N_KEYS; i++)
    {
        w[i] = (key[N_KEYS*i]<<24) + (key[N_KEYS*i+1]<<16) + (key[N_KEYS*i+2]<<8) + key[N_KEYS*i+3];
    }

    for(int i = 4; i< EXPANDED_KEY_COUNT; i++) 
    {
        temp = w[i-1];
        if(i % 4 == 0)
            temp = SubWord(RotWord(temp)) ^ Rcon[i/4];

        w[i] = temp ^ w[i-4] ;
    }
}

1 个答案:

答案 0 :(得分:0)

Big-O帮助我们根据输入进行分析。您的问题的问题在于,似乎有几个输入,这些输入可能相互关联,也可能不相关。

输入变量看起来像N_KEYSEXPANDED_KEY_COUNT。根据提供的内容,我们也不知道SubWord()RotWord()做了什么。

由于未提供SubWord()RotWord(),因此我们假设它们是常量,以便于计算。

你有基本的循环并迭代每个值,所以它很直接。这意味着您拥有O(N_KEYS) + O(EXPANDED_KEY_COUNT)。因此总体时间复杂度取决于两个输入,并且将受到更大的约束。

如果SubWord()RotWord()执行任何非常规时间的特殊操作,则会影响O(EXPANDED_KEY_COUNT)部分代码的时间复杂度。您可以通过乘以它来调整时间复杂度。但是通过方法的名称,听起来他们的时间复杂度将基于字符串的长度,将是另一个不同的输入变量。

所以这不是一个明确的答案,因为问题并不完全清楚,但我试图尽我所能为你解决问题。