}
size_t inversionDistance(const GeneOrder& go){
- size_t cycles = countCycles(go);
+ size_t distance = go.size() - 1;
+ distance -= countCycles(go);
+
+ ComponentTree t(findComponents(go));
+ t.makeUnoriented();
+ size_t leaves = t.countLeaves();
+ distance += leaves;
+ if (leaves % 2 != 0){
+ size_t sb = t.shortBranches();
+ if (sb == 0)
+ distance += 1;
+ }
- return go.size() - 1 - cycles;
+ return distance;
}
int sign(Gene g){