]> ruin.nu Git - germs.git/commitdiff
calculate the proper distance, with hurdles
authorMichael Andreen <harv@ruin.nu>
Thu, 16 Aug 2007 09:17:46 +0000 (09:17 +0000)
committerMichael Andreen <harv@ruin.nu>
Thu, 16 Aug 2007 09:17:46 +0000 (09:17 +0000)
src/genealgorithms.cpp

index 174c6f7b0414277b006b562f2736a83077db9fb7..3fb2aaac0c7f180bd73edde5918731c7bcc8c8e0 100644 (file)
@@ -94,9 +94,20 @@ size_t countCycles(const GeneOrder& go){
 }
 
 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){