bisect: merge ancestor lists when pushing to children
- eliminate some redundant tests and assignments
- move ancestor list merging to child update
bisect: skip calculations on candidates with too many ancestors
Once an ancestor list has grown past the perfect threshold, all
descendants are less optimal. Use a poison dict to avoid pointless
operations on their long ancestor lists, thus eliminating most of the
work.
bisect: use a dict for children
We fill in the children only for ancestors of badrev
bisect: propagate ancestor lists directly to children
- calculate the children of all candidates
- for each candidate, combine ancestor lists
- pass ancestor lists to children
- store ancestor count
This eliminates the O(n**2) memory usage, while maintaining about the
same performance.
Backed out changeset
c2a21fe60994
Unfortunately, this breaks backward compatibility.