Я пытался узнать о распределенных вычислениях и столкнулся с проблемой поиска медианы большого набора чисел:
Предположим, что мы имеем большой набор чисел (допустим, количество элементов N * K), которые не могут вписаться в память (размер N). Как мы находим медиану этих данных? Предположим, что операции, выполняемые в памяти, независимы, то есть мы можем считать, что есть K машин, каждый из которых может обрабатывать не более N элементов.
Я думал, что медиана медиан может использоваться для этой цели.
Мы можем одновременно загружать N чисел в память. Мы находим медиану этого набора в O(logN)
времени и сохраняем его.
Затем мы сохраняем все эти медианы K и выясняем медиану медианов. Снова O(logK)
, до сих пор сложность была O(K*logN + logK)
.
Но эта медиана медианов - всего лишь приблизительная медиана. Я думаю, что будет оптимально использовать его в качестве стержня, чтобы получить наилучшую производительность, но для этого нам нужно будет вместить все номера N * K в памяти.
Как мы можем найти реальную медиану набора теперь, когда у нас есть хороший приблизительный стержень?