Какая быстрая реализация медианы в scala?
Это то, что я нашел на rosetta code:
def median(s: Seq[Double]) =
{
val (lower, upper) = s.sortWith(_<_).splitAt(s.size / 2)
if (s.size % 2 == 0) (lower.last + upper.head) / 2.0 else upper.head
}
Мне это не нравится, потому что это похоже. Я знаю, что есть способы вычислить медиану в линейном времени.
EDIT:
Я хотел бы иметь набор медианных функций, которые я могу использовать в различных сценариях:
- быстрое, на месте медианное вычисление, которое можно выполнить в линейном времени
- медиана, которая работает в потоке, который вы можете проходить несколько раз, но вы можете сохранить
O(log n)
значения в памяти как это - медиана, которая работает в потоке, где вы можете хранить не более
O(log n)
значений в памяти, и вы можете пересекать поток не более одного раза (возможно ли это?)
Пожалуйста, отправляйте только код, который компилирует и правильно вычисляет медиану. Для простоты вы можете предположить, что все входы содержат нечетное число значений.