Повторить с помощью центра в алгоритме выбора
У меня проблема, и я не могу получить назначение строк (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-й пункт должен быть в правильном разделе, поэтому мы вернемся к этому.
Мы продолжаем это, пока не достигнем раздела, который содержит только один элемент - тот, который мы ищем.