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] ;
}
}
答案 0 :(得分:0)
Big-O帮助我们根据输入进行分析。您的问题的问题在于,似乎有几个输入,这些输入可能相互关联,也可能不相关。
输入变量看起来像N_KEYS
和EXPANDED_KEY_COUNT
。根据提供的内容,我们也不知道SubWord()
或RotWord()
做了什么。
由于未提供SubWord()
和RotWord()
,因此我们假设它们是常量,以便于计算。
你有基本的循环并迭代每个值,所以它很直接。这意味着您拥有O(N_KEYS) + O(EXPANDED_KEY_COUNT)
。因此总体时间复杂度取决于两个输入,并且将受到更大的约束。
如果SubWord()
或RotWord()
执行任何非常规时间的特殊操作,则会影响O(EXPANDED_KEY_COUNT)
部分代码的时间复杂度。您可以通过乘以它来调整时间复杂度。但是通过方法的名称,听起来他们的时间复杂度将基于字符串的长度,将是另一个不同的输入变量。
所以这不是一个明确的答案,因为问题并不完全清楚,但我试图尽我所能为你解决问题。