Advertisement
Guest User

Untitled

a guest
May 24th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.03 KB | None | 0 0
  1. import time
  2. from timeit import default_timer as timer
  3. from random import randint
  4. from copy import deepcopy
  5. from copy import copy
  6. import sys
  7.  
  8. sys.setrecursionlimit(1000000000)
  9.  
  10. def makeEuGraphMatrix(rozmiar, pokrycie):
  11.     matrix = [[0]*rozmiar for x in range(rozmiar)]
  12.     MAX = rozmiar*(rozmiar-1) * pokrycie
  13.     dodane = 0
  14.     stopien = 1
  15.     while stopien < rozmiar / 2.0 and dodane < MAX:
  16.         for start in range(stopien):    
  17.             aktualny = start
  18.             while True:
  19.                 nastepny = (aktualny + stopien) % rozmiar
  20.                 if matrix[aktualny][nastepny] > 0:
  21.                     break
  22.                 matrix[aktualny][nastepny] = matrix[nastepny][aktualny] = 1
  23.                 dodane += 2
  24.                 aktualny = nastepny
  25.             if dodane >= MAX:
  26.                 break
  27.         stopien += 1
  28.     return matrix
  29.  
  30.  
  31.  
  32. def makeListaIncydencjiFromMatrix(matrix):
  33.     lista = []
  34.     for i in range(len(matrix)):
  35.         sasiedzi = []
  36.         for j in range(len(matrix)):
  37.             if matrix[i][j] > 0:
  38.                 sasiedzi.append(j)
  39.         lista.append(sasiedzi)
  40.     return lista
  41.  
  42. def printMatrix(matrix):
  43.     linia = "\t"
  44.     for i in range(len(matrix)):
  45.         linia += "%d\t" % i
  46.     print(linia)
  47.     for i in range(len(matrix)):
  48.         linia = "%d\t" % i
  49.         for j in matrix[i]:
  50.             linia += "%d\t" % j
  51.         print(linia)
  52.  
  53. def printListaIncydencji(lista):
  54.     for i in range(len(lista)):
  55.         linia = "%d | " % i
  56.         for j in lista[i]:
  57.             linia += "%d " % j[0]
  58.         print(linia)
  59.  
  60.  
  61.  
  62. def SearchEulerPath(graph):
  63.     stack =[0]
  64.     path = []
  65.     while len(stack) > 0:
  66.         v = stack[-1]
  67.         if len(graph[v]) > 0:
  68.             u = graph[v][0]
  69.             del graph[v][0]
  70.             del graph[u][graph[u].index(v)]
  71.             stack.append(u)
  72.         else:
  73.             path.append(stack.pop())
  74.     return path
  75.  
  76. def SearchHamiltonPath(graph):
  77.     def SHP(v, visited = [False] * len(graph), path = []):
  78.         visited[v] = True
  79.         path += [v]
  80.         for w in graph[v]:
  81.             if not visited[w]:
  82.                 finalPath = SHP(w, visited, path)
  83.                 if not finalPath == None:
  84.                     return finalPath
  85.         if len(path) == len(graph):
  86.             if path[0] in graph[path[-1]]:
  87.                 return path
  88.         visited[v] = False
  89.         return None
  90.     return SHP(0)
  91.  
  92.  
  93. def SearchAllHamiltonPaths(graph):
  94.     tab = []
  95.     def SHP(v, visited = [False] * len(graph), path = []):
  96.         visited[v] = True
  97.         path = path + [v]
  98.         for w in graph[v]:
  99.             if not visited[w]:
  100.                 SHP(w, visited, path)
  101.         if len(path) == len(graph):
  102.             if path[0] in graph[path[-1]]:
  103.                 tab.append(path[:])
  104.         visited[v] = False
  105.     SHP(0)
  106.     return tab
  107.  
  108. average_H_03 = 0
  109. average_H_07 = 0
  110. average_EU_03 = 0
  111. average_EU_07 = 0
  112. average_AH_05 = 0
  113.  
  114. wierzcholki_alg_1_2 = int(input("Podaj ilość wierzchołków do algorytmów 1 i 2: "))
  115. #zageszczenie_1_2 = float(input("Podaj zagęszczenie wieszchołków do algorytmów 1 i 2: "))
  116. wierzcholki_alg_3= int(input("Podaj ilość wierzchołków do algorytmu 3: "))
  117.  
  118.  
  119. print("\n")
  120. print("Wierzchołki_1_2 : ", wierzcholki_alg_1_2,"\t\t\tWierzchołki_3 = ", wierzcholki_alg_3, "\n\n")
  121.  
  122. for i in range(10):
  123.     graph_1 = makeEuGraphMatrix(wierzcholki_alg_1_2, 0.3)
  124.     graph_1 = makeListaIncydencjiFromMatrix(graph_1)
  125.  
  126.     graph_2 = makeEuGraphMatrix(wierzcholki_alg_1_2, 0.7)
  127.     graph_2 = makeListaIncydencjiFromMatrix(graph_2)
  128.  
  129.     graph_3 = makeEuGraphMatrix(wierzcholki_alg_3, 0.5)
  130.     graph_3 = makeListaIncydencjiFromMatrix(graph_3)
  131.  
  132.  
  133.     graph_kopia1_03 = deepcopy(graph_1)
  134.     graph_kopia2_03 = deepcopy(graph_1)
  135.     graph_kopia3_07 = deepcopy(graph_2)
  136.     graph_kopia4_07 = deepcopy(graph_2)
  137.     graph_kopia5_05 = deepcopy(graph_3)
  138.  
  139.  
  140.  
  141.  
  142.     start_SearchHamiltonPath_03 = timer()
  143.     SearchHamiltonPath(graph_kopia1_03)                                             #Ścieżka Hamiltona_03
  144.     time_SearchHamiltonPath_03 = timer() - start_SearchHamiltonPath_03
  145.  
  146.     start_SearchHamiltonPath_07 = timer()
  147.     SearchHamiltonPath(graph_kopia3_07)                                             #Ścieżka Hamiltona_07
  148.     time_SearchHamiltonPath_07 = timer() - start_SearchHamiltonPath_07
  149.  
  150.     start_SearchEulerPath_03 = timer()
  151.     SearchEulerPath(graph_kopia2_03)                                                   #Ścieżka Eulera_03
  152.     time_SearchEulerPath_03 = timer() - start_SearchEulerPath_03
  153.  
  154.     start_SearchEulerPath_07 = timer()
  155.     SearchEulerPath(graph_kopia4_07)                                                   #Ścieżka Eulera_03
  156.     time_SearchEulerPath_07 = timer() - start_SearchEulerPath_07
  157.  
  158.     start_SearchAllHamiltonPaths_05 = timer()
  159.     SearchAllHamiltonPaths(graph_kopia5_05)                                        #Wszystkie ścieżki Hamiltona_5
  160.     time_SearchAllHamiltonPaths_05 = timer() - start_SearchAllHamiltonPaths_05
  161.  
  162.     #time_hamilton = end_SearchHamiltonPath - start_SearchHamiltonPath
  163.     #time_euler = end_SearchEulerPath - start_SearchEulerPath
  164.     #time_all_hamilton = end_SearchAllHamiltonPaths - start_SearchAllHamiltonPaths
  165.  
  166.     average_H_03 = average_H_03 + time_SearchHamiltonPath_03
  167.     average_H_07 = average_H_07 + time_SearchHamiltonPath_07
  168.     average_EU_03 = average_EU_03 + time_SearchEulerPath_03
  169.     average_EU_07 = average_EU_07 + time_SearchEulerPath_07
  170.     average_AH_05 = average_AH_05 + time_SearchAllHamiltonPaths_05
  171.     print( time_SearchHamiltonPath_03, "\t", time_SearchHamiltonPath_07, "\t", time_SearchEulerPath_03, "\t", time_SearchEulerPath_07, "\t", time_SearchAllHamiltonPaths_05)
  172.  
  173. print("H_03\nH_07\nEU_03\nEU_07\nAH_05\n")
  174.  
  175. print("\n")
  176. average_H_03 = average_H_03 / 10
  177. print(average_H_03)
  178.  
  179. average_H_07 = average_H_07 / 10
  180. print(average_H_07)
  181.  
  182. average_EU_03 = average_EU_03 / 10
  183. print(average_EU_03)
  184.  
  185. average_EU_07 = average_EU_07 / 10
  186. print(average_EU_07)
  187.  
  188. average_AH_05 = average_AH_05 / 10
  189. print(average_AH_05)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement