HEAP-P6

Median of a stream

Practice 6 of 6Heaps8 tests

The problem

Values arrive one at a time. After any of them, you may be asked for the median of all values so far: the middle value once they are sorted, or the average of the two middle values when the count is even. Return it as a float.

m = MedianFinder()
m.add(5);  m.median()    # 5.0
m.add(15); m.median()    # 10.0
m.add(1);  m.median()    # 5.0
m.add(3);  m.median()    # 4.0

median is only called after at least one add. Values are integers and can repeat.

The modules heapq and bisect are switched off.

One test passes in numbers that count how often they are compared with <, <=, > or >=. They behave like ordinary numbers otherwise. This is how the tests tell an O(log n) heap step from an O(n) scan, which a timer cannot always do.

Limits

  • Up to 50,000 values, with a median after each. add should take O(log n) comparisons and median O(1).

Builds on HEAP-6 Median of a stream.

Continue on a laptop

Practice runs Python in the browser and needs a keyboard and a wider screen. Read the problem and open hints here, then write your solution on a laptop. Progress is saved per browser for now, so hints opened here stay on this device.

Need a hint?0 of 3 opened

  1. Hint 1Nudge
  2. Hint 2Approach Open hint 1 first
  3. Hint 3Pseudocode Open hint 2 first
  4. Worked solutionlast resort Opens after all 3 hints
Python waits for a wider screensolution.py

Ctrl + Enter runs the tests. Tab indents; press Esc, then Tab, to leave the editor.

8 tests, not run yet
Test results
#TestResultReads · time
1Odd and evenNot run
2Lesson 6's streamNot run
3Repeated valuesNot run
4Negative valuesNot run
5IncreasingNot run
6DecreasingNot run
7ComparisonsNot run
850,000 valuesNot run