повторить с помощью центра в алгоритме выбора - PullRequest
2 голосов
/ 19 июня 2010

У меня проблема, и я не могу получить назначение строк (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 Ответ

4 голосов
/ 19 июня 2010

Здесь выбирается раздел для рекурсии.

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

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

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

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