Алгоритмы: разделяй и властвуй (применение быстрой сортировки ?!)

Мы будем благодарны за любую помощь относительно того, как можно подойти к указанной ниже проблеме. Я также опубликовал некоторые мысли по проблеме.

Вы - ТА класса, в котором обучается n студентов. У вас есть их окончательные оценки (без сортировки), и вы должны присвоить им одну из доступных оценок G (A, B, C и т. Д.). Ограничения следующие (при условии, что n кратно G):

  • Ровно (n / G) учеников получают каждую оценку (например, если n = 30 и G = {A, B, C}, то ровно 10 учеников получают A, 10 получают B и 10 получают C)
  • Учащийся с более низким баллом не получает более высокую оценку, чем учащийся с более высоким баллом (однако они могут получить одинаковую оценку). Предполагая, что каждый учащийся получил разную оценку, выведите эффективный алгоритм и укажите его сложность в терминах n. и G. Любой алгоритм, который первым сортирует оценки, получит нулевой балл.

Мой ответ: Хорошо, в последней строке проблемы говорится, что я не годен, если я попытаюсь сначала отсортировать массив и разделить массив на G равных частей. Это займет O (n log n), если используется лучший алгоритм сортировки. Итак, я подумал о хитроумном решении. Я рассматриваю эту проблему как случай, когда быстрая сортировка может оказаться полезной, поскольку нам не нужно сортировать учащихся, принадлежащих к одному классу, у нас может быть k основных элементов, и все ключевые элементы расположены на одинаковом расстоянии. Но нам не выставляют оценки учеников, и нам также говорят, что у каждого ученика разные оценки.

Во-первых, я вычисляю максимальную и минимальную оценку, используя алгоритм MaxMin Divide and Conquer Algorithm, который займет время O (n). Используя Максимум и Минимум, мы можем приблизительно найти ключевые элементы для каждой оценки путем вычислений. (Макс-Мин) / k = самая низкая оценка, 2 * (Макс-Мин) / k = 2-я самая низкая оценка. и k-1 * (Макс-Мин) / k = высшая оценка.

Теперь, используя их в качестве основных элементов, мы можем выполнить только метод разделения для быстрой сортировки, который занимает n количество времени в первый раз, n- (Max-Min) / k во второй раз и так далее. Таким образом, временная сложность алгоритма будет O (n), поскольку задача min-max имеет сложность O (n), а Partition in Quick sort имеет сложность O (n).

Пожалуйста, поделитесь своими мыслями.


person whyme    schedule 08.02.2015    source источник
comment
Какой у нас конкретный вопрос?   -  person Oliver Charlesworth    schedule 08.02.2015
comment
Предполагая, что каждый студент получил разную оценку, выведите эффективный алгоритм и укажите его сложность в терминах n и G. Есть ли другой / лучший подход к этой проблеме, которого мне не хватает. Правильно ли мое мышление?   -  person whyme    schedule 08.02.2015
comment
Я не уверен, что это работает, потому что предполагается, что оценки равномерно распределены в диапазоне [min; Максимум]. Предположим, что баллы равны [1,2,3,4,5,6,20]   -  person BlackBear    schedule 08.02.2015
comment
Почему не сортировка слиянием? Я знаю, что в большинстве случаев быстрая сортировка более эффективна, но какая конкретная причина?   -  person Evan Bechtol    schedule 08.02.2015


Ответы (2)


Вы можете поместить все оценки в очередь с максимальным приоритетом, а затем извлечь из нее группы n / G. Это все еще неявная сортировка, но, тем не менее, она не запрещена правилами.

person BlackBear    schedule 08.02.2015

По сути, это проблема выбора, только то, что вы делаете выбор G сразу.

Здесь должна работать модификация алгоритма http://en.wikipedia.org/wiki/Quickselect. Хотя Quicksort всегда рекурсивно спускается в оба раздела, а исходный Quickselect спускается только в тот, который содержит k-й индекс, алгоритм для этой проблемы должен спускаться в раздел, если и только если он содержит один из массива n/G, 2*n/G, ... (G-1)*n/G индексы - те, которые разделяют оценки между оценками.

Эти индексы являются точками разделения между оценками, поэтому вы получаете массив, в котором элементы между точками разделения не обязательно сортируются, но блоки между точками сортируются.

person Rafał Dowgird    schedule 08.02.2015