Сравнение сортировки - теоретическое - PullRequest
1 голос
/ 16 февраля 2012

Может кто-нибудь объяснить мне решение этой проблемы?

Предположим, вам дана последовательность n элементов для сортировки.Входная последовательность состоит из n = k подпоследовательностей, каждая из которых содержит k элементов.Все элементы в данной подпоследовательности все меньше, чем элементы в последующей подпоследовательности, и больше, чем элементы в предыдущей подпоследовательности.Таким образом, все, что необходимо для сортировки всей последовательности длиной n , - это сортировка элементов k в каждой из подпоследовательностей n = k .Покажите n lg k нижнюю границу для числа сравнений, необходимых для решения этого варианта задачи сортировки.

Решение:

Пусть S быть последовательностью n элементов, разделенных на n / k подпоследовательностей, каждая из которых имеет длину k , где все элементы в любой подпоследовательности больше, чем все элементыпредыдущая подпоследовательность и меньшая, чем у всех элементов последующей подпоследовательности.

Заявка

Любой алгоритм сортировки на основе сравнения для сортировки S должен принимать (nLG K) время в худшем случае.

Доказательство

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

Теперь рассмотрим дерево решений высоты h для любого вида сравнения для S. Поскольку элементы каждой подпоследовательности могут быть в любом порядке, любой из k! перестановки соответствуют окончательному отсортированному порядку подпоследовательности.И, поскольку существует n / k таких подпоследовательностей, каждая из которых может быть в любом порядке, существует (k!) ^ N / k перестановок S, которые могут соответствоватьсортировка некоторого порядка ввода.Таким образом, любое дерево решений для сортировки S должно иметь как минимум (k!) ^ N / k листьев.Поскольку бинарное дерево высотой h имеет не более 2 ^ h листьев, мы должны иметь 2 ^ h ≥ (k!) ^ (N / k) или h ≥ lg ((k!) ^ n / k) .Таким образом, мы получаем

     h ≥ lg((k!)^n/k)          -- unbalanced parens - final one added?
       = (n/k) lg(k!)
       ≥ (n/k) lg((k/2)^k/2)
       = (n/2) lg(k/2)

Третья строка взята из k! , чьи k / 2 наибольшие слагаемые составляют не менее k / 2 каждый.(Мы неявно предполагаем, что k четно. Мы могли бы отрегулировать по этажам и потолкам, если бы k были нечетными.)

Поскольку в любом дереве решений для сортировки S существует хотя бы один путьимеет длину не менее (n / 2) lg (k / 2) , наихудшее время выполнения любого алгоритма сортировки на основе сравнения для S составляет (n lg k) .

Может ли кто-нибудь провести меня через шаги в блоке кода?Особенно шаг, когда lg k! становится lg ((k / 2) ^ k / 2) .

1 Ответ

3 голосов
/ 16 февраля 2012

Я перепечатал математику ниже:

(1) h ≥ lg (k! n / k )

(2) = (н / к) lg (к!)

(3) ≥ (н / к) lg ((к / 2) к / 2 )

(4) = (н / 2) LG (к / 2)

Давайте пройдемся по этому. Переход от строки (1) к строке (2) использует свойства логарифмов. Аналогично, переход от строки (3) к строке (4) использует свойства логарифмов и факта, что (n / k) (k / 2) = (n / 2). Таким образом, хитрый шаг идет от линии (2) к линии (3).

Здесь заявлено следующее:

Для всех k, k! & GE; (к / 2) (к / 2)

Интуитивно, идея заключается в следующем. Рассмотрим к! = k (k - 1) (k - 2) ... (2) (1). Если вы заметите, половина этих терминов больше, чем k / 2, а половина из них меньше. Если мы отбросим все термины, которые меньше k, мы получим что-то (близкое к следующему):

к! & GE; k (k - 1) (k - 2) ... (k / 2)

Теперь у нас есть это k / 2 & ge; к, так что у нас есть

к! & GE; k (k - 1) (k - 2) ... (k / 2) & ge; (К / 2) (к / 2) ... (к / 2)

Это произведение (k / 2) на себя (k / 2) раз, поэтому оно равно (k / 2) k / 2 . Эта математика не точна, потому что логика для нечетных и четных значений немного отличается, но, по сути, используя эту идею, вы получаете набросок доказательства более раннего результата.

Подводя итог: с (1) по (2) и с (3) по (4) используются свойства логарифмов, а с (2) по (3) используется приведенный выше результат.

Надеюсь, это поможет!

...