У меня был вопрос, где он просит вас найти ранг строки среди ее перестановок, отсортированных по лексикографическому признаку.
O (N ^ 2) довольно ясно.
Некоторые веб-сайты также имеют решение O (n) . Оптимизированная часть в основном предварительно заполняет count array
таким образом, что
count [i] содержит количество символов, которые присутствуют в str и меньше, чем i.
Я понимаю, что это уменьшит сложность, но не могу понять, как мы вычисляем этот массив. Это функция, которая делает это (взято из ссылки):
// Construct a count array where value at every index
// contains count of smaller characters in whole string
void populateAndIncreaseCount (int* count, char* str)
{
int i;
for( i = 0; str[i]; ++i )
++count[ str[i] ];
for( i = 1; i < 256; ++i )
count[i] += count[i-1];
}
Может ли кто-нибудь дать интуитивное объяснение этой функции?