Вопрос интервью: найти медиану из мега числа целых чисел

Существует файл, который содержит 10G (1000000000) целых чисел, найдите медиану этих чисел. вам дают 2G памяти, чтобы сделать это. Кто-нибудь может придумать разумный путь? Спасибо!

Я пытаюсь сделать ситуацию с потоком производитель / потребитель более эффективной, пропуская дорогостоящие операции с событиями, если это необходимо, с помощью чего-то вроде:

//cas(variable, compare, set) is atomic compare and swap
//queue is already lock free

running = false


// dd item to queue – producer thread(s)

if(cas(running, false, true))
{
  // We effectively obtained a lock on signalling the event
  add_to_queue()
  signal_event()
}
else
{
  // Most of the time if things are busy we should not be signalling the event
  add_to_queue()

  if(cas(running, false, true))
    signal_event()
}

...

// Process queue, single consumer thread

reset_event()

while(1)
{
  wait_for_auto_reset_event() // Preferably IOCP

  for(int i = 0; i &lt SpinCount; ++i)
    process_queue()

  cas(running, true, false)

  if(queue_not_empty())
    if(cas(running, false, true))
      signal_event()
}

Очевидно, что попытка исправить все это немного сложно (!), Так же как и приведенный выше псевдокод правильный? Решение, которое сигнализирует о событии больше, чем нужно, подходит, но не то, которое делает это для каждого элемента.

8
задан Boris Pavlović 26 August 2010 в 07:19
поделиться