Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
if (A[i]<B_tid) K_tid++;можно заменить на
K_tid+=(A[i]<B_tid);
array_i = [94, 89, 238, 121, 244, 64, 175, 60, 166, 181, 77, 24, 111, 0, 47, 212, 68, 76, 174, 124, 40, 227, 123, 101, 58, 177, 148, 134, 36, 21]
array_k = [ 0 ]*len(array_i)
array_o = [ None ]*len(array_i)
for i1, c1 in enumerate(array_i):
cnt = 0
for i2, c2 in enumerate(array_i):
if c1 > c2:
cnt += 1
elif c1 == c2 and i1 < i2:
cnt += 1
array_k[i1] = cnt
for i, k in enumerate(array_k):
array_o[k] = array_i[i]
print "array_i =", array_i
print "array_o =", array_o

Сортировка массива за O(N)
Временная сложность у приведенного алгоритма O(N)
Если бы при решении задачи использовался алгоритм «сортировки выбором»
Во вторых, O(N²/количество_ядер) когда количество_ядер = N, значительно лучшем чем просто O(N^2) или O(N log N)
И если нет желания использовать большой сложный код
А с чего Вы решили, что алгоритмы имеющие сложность O(N*logN) не будут параллелиться?Если вы внимательно читали пост, то вначале я привел пример распараллеленного qsort.
Основные ограничения CUDA:
* отсутствие поддержки рекурсии для выполняемых функций;
* минимальная ширина блока в 32 потока;
Если он при этом работает эффективнее, то почему не должно быть желания его использовать?
Временная сложность алгоритма (в худшем случае) — это функция размера входных и выходных данных, равная максимальному количеству элементарных операций, проделываемых алгоритмом для решения экземпляра задачи указанного размера. В задачах, где размер выхода не превосходит или пропорционален размеру входа, можно рассматривать временную сложность как функцию размера только входных данных.
edeldm * 17 декабря 2010, 19:54 *Поэтому замечание ваше неверное.
Как вообще определение O(f(x)) соотносится с ограничением x<1000?В посте хотел показать что рассматривались алгоритмы сортировки в диапазоне ArraySize <= MaxThreads. И если так ограничить размер исходного массива, то выбор используемого алгоритма сортировки следует осуществлять несколько «переосмыслив» их эффективность. И в качестве критерия выбора предложил
Применение сортировки подсчётом целесообразно лишь тогда, когда сортируемые числа имеют (или их можно отобразить в) диапазон возможных значений, который достаточно мал по сравнению с сортируемым множеством, например, миллион натуральных чисел меньших 1000. Эффективность алгоритма падает, если при попадании нескольких различных элементов в одну ячейку, их надо дополнительно сортировать. Необходимость сортировки внутри ячеек лишает алгоритм смысла, так как каждый элемент придётся просматривать более одного раза.
Сортировка массива за O(N) на CUDA