Perfectly understandable. You are slightly off-topic here but as I
can't think of anywhere else to give a sartifactory answer, here we
go...
As previously suggested, box-plotting (AKA candlestick) is the
appropriate technique for this problem. If the target audience is not
statistically literate, a simplified version displaying min, max and
mean (as opposed to quartiles and median) may be preferable; in such a
case the data required per box could be:-
{
float startTime, endTime;
float sampleMin, sampleMax, sampleTotal;
integer sampleCount;
} Box;
You would declare an array of boxes (any more than 128 boxes is likely
to be a problem for clarity of display) and add one sample value to
each box until the boxes are filled. Once all boxes are filled with
the same number of samples, you must then merge pairs of adjacent
boxes (thus doubling the number of samples per box and halving the
number of boxes). Subsequent samples are then added to the next free
box until it has the same number of samples as previous boxes; then
move onto the next free box and so on. When the boxes are once again
all filled with the same number of samples, merge pairs of adjacent
boxes as before.
Merging is a straightforward operation:
mergedBox.startTime= MIN(box1.startTime, box2.startTime);
mergedBox.endTime= MIN(box1.endTime, box2.endTime);
mergedBox.sampleMin= MIN(box1.sampleMin, box2.sampleMin);
mergedBox.endTime= MIN(box1.sampleMax, box2.sampleMax);
mergedBox.sampleTotal= box1.sampleTotal + box2.sampleTotal;
mergedBox.sampleCount= box1.sampleCount + box2.sampleCount;
The complexity is all in managing the box data structures; using two
lists (source and destination) for the merge process will help to make
it more understandable. Should you require any help with lists, you
definately should not request it from this group...


|