lepsi poradi prohozeni
authorTomas Musil <tomik.musil@gmail.com>
Wed, 4 Apr 2012 20:06:34 +0000 (22:06 +0200)
committerTomas Musil <tomik.musil@gmail.com>
Wed, 4 Apr 2012 20:06:34 +0000 (22:06 +0200)
jakobsen3.py

index a2c55f8..6b76c44 100644 (file)
@@ -64,21 +64,28 @@ def jakobsen(zprava, ref):
                   )
     vzdal = vzdalenost(tabulka, ref.tabulka, ref.abeceda)
 
-    vzdal_old = vzdal + 1
-    while vzdal_old > vzdal:
-        vzdal_old = vzdal
-        for (x, y) in combinations(ref.abeceda, 2):
+    a, b = 1, 1
+
+    slvnk = ref.poradi
+
+    while b < len(ref.abeceda):
+        x, y = slvnk[a-1], slvnk[a+b-1]
+        slovnik[x], slovnik[y] = slovnik[y], slovnik[x]
+        nova_vzdalenost = vzdalenost(
+                    nova_tabulka(
+                        substituce(zprava, slovnik),
+                        ref.abeceda),
+                    ref.tabulka,
+                    ref.abeceda)
+        if  nova_vzdalenost < vzdal:
+            vzdal = nova_vzdalenost
+            slvnk[a-1], slvnk[a+b-1] = slvnk[a+b-1], slvnk[a-1] 
+            a, b = 1, 1
+        else:
             slovnik[x], slovnik[y] = slovnik[y], slovnik[x]
-            nova_vzdalenost = vzdalenost(
-                     nova_tabulka(
-                         substituce(zprava, slovnik),
-                         ref.abeceda),
-                     ref.tabulka,
-                     ref.abeceda)
-            if  nova_vzdalenost < vzdal:
-                vzdal = nova_vzdalenost
-            else:
-                slovnik[x], slovnik[y] = slovnik[y], slovnik[x]
+            a += 1
+            if a + b > len(ref.abeceda):
+                a, b = 1, b + 1
     return slovnik