Member 14669503 Ответов: 1

Найдите сложность алгоритма сортировки подсчета построчно


Как твои дела? Приветствую вас всех. У меня есть задача, и она состоит в том, чтобы найти сложность алгоритма подсчета сортировки строка за строкой, чтобы наконец найти T(n). Правда в том, что это была довольно сложная тема для меня, но я работал над этим, поэтому я хотел бы знать, может ли кто-то, кто знает об этом, сказать мне, правильно это или неправильно. псевдокод:

Что я уже пробовал:

..............................cost..............repetitions
for i = 1 to k do...................2.....................k+1
c[i] = 0 ...................... ....1..................... k
for j = 1 to n do ..................2 .....................n+1
c[A[j]] = c[A[j]] + 1...............2..................... n
for i = 2 to k do.............. ....2 .....................k+2
c[i] = c[i] + c[i-1] ...............2 ..................... k
for j = n-1 down to 1...............2..................... n+1
B[ c[A[j]]] = A[j]..................1 ..................... n
c[A[j]] = c[A[j]] - 1.........,.....2 ..................... n

следовательно, t(n)= 2k+2+k+2n+2+2n+2k+4+2k+2n+2+n+n

T(n)=7k+8n+8

Я не совсем уверен в этом анализе, но это лучшее, что я мог бы сделать :v. спасибо за любое предложение
Я исследовал,что сложность равна O(n+k), но мне нужно знать, что это такое (T(n)), чтобы позже найти c1, c2 и No для среднего случая и лучше, поэтому я делаю анализ построчно, если вы дадите мне что-то вроде T(n)=2n+4k, например

1 Ответов

Рейтинг:
2

CPallini

При условии, что циклы не являются вложенными, ваш конечный результат, на мой взгляд, является правильным. С

for i = 1 to k do  // k * const
  c[i] = 0 
for j = 1 to n do   // n * const
  c[A[j]] = c[A[j]] + 1
for i = 2 to k do // (k-1) * const
  c[i] = c[i] + c[i-1] 
for j = n-1 down to 1 // (n-1) * const
  B[ c[A[j]]] = A[j]
  c[A[j]] = c[A[j]] - 1

Это делает сложность идти с (2*n*const) то есть O(n).


Maciej Los

Звучит разумно ;)
Это тоже может быть полезно: Сложность алгоритма[^]