Этот ответ на вопрос о кворе ясно объясняет весь процесс шаг за шагом http://qr.ae/dMkGc. Просто скопируйте его для не-Коранов
Предположим, у вас есть главный узел (или вы можете использовать согласованный протокол длявыбрать мастера из числа ваших серверов).Мастер сначала запрашивает у серверов размер их наборов данных, назовите его n, чтобы он знал, как искать самый большой элемент k = n / 2.
Мастер затем выбирает случайный сервер и запрашиваетэто для случайного элемента из элементов на этом сервере.Ведущий передает этот элемент каждому серверу, и каждый сервер делит свои элементы на элементы, которые больше или равны широковещательному элементу, и те, которые меньше широковещательного элемента.
Каждый сервер возвращает мастеру размер большего- чем раздел, назовите это м.Если сумма этих размеров больше k, мастер указывает каждому серверу игнорировать значение меньше заданного для остальной части алгоритма.Если оно меньше k, то мастер указывает на игнорирование наборов, превышающих наборы, и обновляет k = k - m.Если это ровно k, алгоритм завершается, и возвращаемое значение - это пивот, выбранный в начале итерации.
Если алгоритм не завершается, начните с выбора нового случайного пивота из оставшихся элементов.
Анализ:
Пусть n - общее количество элементов, а s - количество серверов.Предположим, что элементы примерно случайным образом и равномерно распределены между серверами (каждый сервер имеет O (n / s) элементов).В итерации i мы ожидаем выполнить работу O (n / (s * 2 ^ i)) на каждом сервере, так как размер наборов элементов каждого сервера будет примерно уменьшен вдвое (помните, мы предположили, что распределение элементов примерно случайное) и O (s) работают над мастером (для трансляции / получения сообщений и сложения размеров вместе).Мы ожидаем O (log (n / s)) итераций.Добавление их на всех итерациях дает ожидаемое время выполнения O (n / s + slog (n / s)), и, предполагая, что s << sqrt (n), как это обычно бывает, становится просто (O (n / s)), это лучшее, на что вы могли бы надеяться. </p>
Обратите внимание, что это работает не только для нахождения медианы, но и для нахождения k-го наибольшего значения для любого значения k.