Быстрый выбор медианы - PullRequest
       2

Быстрый выбор медианы

3 голосов
/ 09 апреля 2011

Как мы можем выбрать медиану 3-элементного разбиения для реализации быстрой сортировки.Точно так же мы можем выбрать медиану из 5, 7 или 11 элементов для быстрой сортировки?Если так, то как ??

1 Ответ

6 голосов
/ 09 апреля 2011

Вам следует заглянуть в алгоритм Медиана медиан . Это линейный алгоритм времени со следующим повторением ...

T(n) ≤ T(n/5) + T(7n/10) + O(n)

... что O (n). Алгоритм подробнее ...

  1. разделить список на n / 5 подпоследовательностей по 5 элементов в каждой
  2. найти медиану каждого списка по грубой силе. их будет n / 5
  3. Пусть m_1, ..., m_n / 5 - эти медианы.
  4. рекурсивно найти медиану этих медиан. это будет 1 элемент, стержень!

... и некоторый псевдокод ...

MedianOfMedians (A[1],...,A[n]) 
begin
    for i=1 to n/5 do {
        let m_i be the median of A[5i − 4], A[5i − 3],..., A[5i];
    }
    pivot = Select(m1,...,m_n/5, n/10); // the pivot
    return pivot
end

Ссылки

Надеюсь, это поможет.
Христо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...