Он находит абсолютную медиану.
Как вы сказали, "Выбор" не находит истинную медиану, скорее, элемент, который достаточно медиан для цели выбора точки для быстрой сортировки. В частности, он достаточно медиан, чтобы на каждой итерации гарантированно выпадало не менее 30% набора данных.К сожалению, это также дорогостоящая операция.
Основная идея заключается в том, что медиана медиан меньше или равна 3 из каждых 5 элементов, медиана которых меньше или равна ей.Таким образом, он меньше или равен 3 из каждых 5 элементов для половины групп из 5, так что по крайней мере 30% набора меньше или равно ему.Таким образом, он находится в наибольших 70% набора данных.
Аналогично, он находится в наименьших 70% набора данных.
Это гарантирует, что вы избежите потенциальной ловушки быстрого выбора, которыйвыбирает опорные точки с экстремальными значениями.
Если вы хотите объединить эффективность и худший случай, вы можете комбинировать это с быстрым выбором.Например, 4 раунда быстрого выбора, за которым следует один раунд, за которым следуют 4 раунда быстрого выбора и т. Д. Дорогие раунды BFPRT гарантируют O(n)
, тогда как быстрый выбор в среднем будет быстрым.Откладывая ваш первый раунд BFPRT до нескольких раундов быстрого выбора, вы можете сделать дополнительное время бега всего на несколько процентов больше, чем в среднем быстрый выбор.(Стоимость наихудшего случая возрастает совсем немного, но мы не ожидаем, что столкнемся с этим.)