Повторить с помощью центра в алгоритме выбора

У меня проблема, и я не могу получить назначение строк (14,15,16,17) этого сайта для алгоритма выбора.

Сайт, на котором был этот вопрос, был расположен здесь.

РЕДАКТИРОВАНИЕ: Кроме того, правильно ли писать эти строки для части "Разбиение и повторение с помощью сводки"? ("m" - это мой стержень, а "i" - вход этого алгоритма)

         arrOne<--{a of arr : a<m}
         arrTwo<--{a of arr : a>m}
         if    (i < m ) then
               return Select(arrOne,i)
         else if (i > m)  then
                return Select(arrTwo,i-m)
         else 
                return m

1 ответ

Именно здесь он выбирает раздел, в котором будет проходить рекурсию.

Для иллюстрации предположим, что вы ищете медиану массива из 100 элементов. При первом разбиении вы получаете разделы, скажем, из 60 и 40 предметов. Поскольку вы ищете 50-й предмет, вы знаете, что он должен находиться в левом разделе (который содержит 60 предметов).

Затем вы разбиваете это и получаете, скажем так, левый и правый разделы по 25 и 35 предметов соответственно. На этот раз мы видим, что 50-й пункт должен быть в правильном разделе, поэтому мы вернемся к этому.

Мы продолжаем это, пока не достигнем раздела, который содержит только один элемент - тот, который мы ищем.

Другие вопросы по тегам