NickFoubert / simple-segment

Piecewise linear representation of 1D data in Python
89 stars 38 forks source link

Bug in bottom-up algorithm #1

Open seekinglambda opened 7 years ago

seekinglambda commented 7 years ago

Bottom-up algorithm contains a bug that causes it to underperform severely unless max error is very low. Bug was caused by some kind of offset error with mergesegments array. I changed the function as follows to solve it:

while min(mergecosts) < max_error:
        idx = mergecosts.index(min(mergecosts))

        new_seg = create_segment(sequence, (segments[idx][0], segments[idx+1][2]))
        segments[idx] = new_seg
        del segments[idx+1]

        if idx > 0:
            merge_seg = create_segment(sequence,(segments[idx-1][0],segments[idx][2]))
            mergecosts[idx-1] = compute_error(sequence,merge_seg)

        if idx+1 < len(mergecosts):
            merge_seg = create_segment(sequence,(segments[idx][0],segments[idx+1][2]))
            mergecosts[idx] = compute_error(sequence,merge_seg)

        del mergecosts[idx]

    return segments
h-kouame commented 5 years ago

I second this bug report