Advertisement
Guest User

Untitled

a guest
Oct 20th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.37 KB | None | 0 0
  1. import csv
  2. from binarytree import Node, pprint
  3.  
  4. st_drzav = 47
  5. imena_drzav = []
  6. dolzine = [[] for _ in range(st_drzav)]
  7. drevo = []
  8.  
  9.  
  10. def evklidska_razdalja(x, y):
  11.     diffs = [(int(a) - int(b)) ** 2 for a, b in zip(x, y) if a != '' and b != '']
  12.     if len(diffs) == 0: return 0
  13.     return (sum(diffs) / len(diffs)) ** 0.5
  14.  
  15.  
  16. def najmanjsa_razdalja(dolzine):
  17.     minimum = [100, 0, 0]
  18.     for i in range(len(dolzine)):
  19.         for j in range(len(dolzine[i])):
  20.             if dolzine[i][j] != 0:
  21.                 if dolzine[i][j] < minimum[0]: minimum = [dolzine[i][j], i, j]
  22.     return minimum
  23.  
  24. f = open("eurovision-final.csv", "rt")
  25.  
  26. tocke = [[] for x in range(st_drzav)]
  27. for l in csv.reader(f):
  28.     stevec = 0
  29.     for i in range(16, 63):
  30.         if l[0] == 'Year':
  31.             imena_drzav.append(l[i])
  32.         else:
  33.             tocke[stevec].append(l[i])
  34.             stevec += 1
  35.  
  36. for i in range(st_drzav):
  37.     n = Node(imena_drzav[i])
  38.     drevo.append(n)
  39.     for k in range(0, i): dolzine[i].append(dolzine[k][i])
  40.     for j in range(i, st_drzav): dolzine[i].append(evklidska_razdalja(tocke[i], tocke[j]))
  41.  
  42. for i in range(st_drzav - 1):
  43.     minimum = najmanjsa_razdalja(dolzine)
  44.     # update drevo
  45.     manjsi = min(minimum[1], minimum[2])
  46.     vecji = max(minimum[1], minimum[2])
  47.     link = Node(round(minimum[0], 1))
  48.     link.left = drevo[minimum[1]]
  49.     link.right = drevo[minimum[2]]
  50.     drevo[manjsi] = link
  51.     del drevo[vecji]
  52.  
  53.     for j in range(len(dolzine)):
  54.         if j == manjsi:
  55.             dolzine[j][manjsi] = 0
  56.         else:
  57.             if dolzine[j][minimum[1]] == 0:
  58.                 dolzine[j][manjsi] = dolzine[j][minimum[2]]
  59.             elif dolzine[j][minimum[2]] == 0:
  60.                 dolzine[j][manjsi] = dolzine[j][minimum[1]]
  61.             else:
  62.                 dolzine[j][manjsi] = min(dolzine[j][minimum[1]], dolzine[j][minimum[2]])
  63.         del dolzine[j][vecji]
  64.     for j in range(len(dolzine[0])):
  65.         if j == manjsi:
  66.             dolzine[manjsi][j] = 0
  67.         else:
  68.             if dolzine[minimum[1]][j] == 0:
  69.                 dolzine[manjsi][j] = dolzine[minimum[2]][j]
  70.             elif dolzine[minimum[2]][j] == 0:
  71.                 dolzine[manjsi][j] = dolzine[minimum[1]][j]
  72.             else:
  73.                 dolzine[manjsi][j] = min(dolzine[minimum[1]][j], dolzine[minimum[2]][j])
  74.     del dolzine[vecji]
  75. pprint(drevo[0])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement