Проблемаанализируя этот алгоритм (большой-O)
Что этот алгоритм делает? Что представляет собой 0x01? Что это означает, что m = m >> 1 во внутреннем цикле while? Что это за алгоритм big-O?
while(n>0)
{
m = n;
while(m)
{
if(m & 0x01)
{
c++;
}
m = m >> 1;
}
}
Покушение
Глядя @ алгоритм, я понимаю, что т правильно сдвинутых одно место.
(Например, если т = 1010, т >> 1 = 0101. Это правильно?)Потому что вложенная в то время как цикл, и потому, что каждый в то время как итерация п раз, я думаю, что этот алгоритм O (N^2). Это верно?
bitcount of "1" s. Число «1» в n рассчитывается бесконечно много раз. –
Это не цикл 'O (n^2)'. Это 'O (бесконечность)', так как 'n' никогда не изменяется. – Jashaszun
Если сдвиг вправо в этом компиляторе/машине расширяет бит знака, а m подписан и n не подписан, но имеет тот же размер, что и m, и имеет этот верхний бит, будет ли внутренний цикл также работать вечно? –