Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import csv
- from binarytree import Node, pprint
- st_drzav = 47
- imena_drzav = []
- dolzine = [[] for _ in range(st_drzav)]
- drevo = []
- def evklidska_razdalja(x, y):
- diffs = [(int(a) - int(b)) ** 2 for a, b in zip(x, y) if a != '' and b != '']
- if len(diffs) == 0: return 0
- return (sum(diffs) / len(diffs)) ** 0.5
- def najmanjsa_razdalja(dolzine):
- minimum = [100, 0, 0]
- for i in range(len(dolzine)):
- for j in range(len(dolzine[i])):
- if dolzine[i][j] != 0:
- if dolzine[i][j] < minimum[0]: minimum = [dolzine[i][j], i, j]
- return minimum
- f = open("eurovision-final.csv", "rt")
- tocke = [[] for x in range(st_drzav)]
- for l in csv.reader(f):
- stevec = 0
- for i in range(16, 63):
- if l[0] == 'Year':
- imena_drzav.append(l[i])
- else:
- tocke[stevec].append(l[i])
- stevec += 1
- for i in range(st_drzav):
- n = Node(imena_drzav[i])
- drevo.append(n)
- for k in range(0, i): dolzine[i].append(dolzine[k][i])
- for j in range(i, st_drzav): dolzine[i].append(evklidska_razdalja(tocke[i], tocke[j]))
- for i in range(st_drzav - 1):
- minimum = najmanjsa_razdalja(dolzine)
- # update drevo
- manjsi = min(minimum[1], minimum[2])
- vecji = max(minimum[1], minimum[2])
- link = Node(round(minimum[0], 1))
- link.left = drevo[minimum[1]]
- link.right = drevo[minimum[2]]
- drevo[manjsi] = link
- del drevo[vecji]
- for j in range(len(dolzine)):
- if j == manjsi:
- dolzine[j][manjsi] = 0
- else:
- if dolzine[j][minimum[1]] == 0:
- dolzine[j][manjsi] = dolzine[j][minimum[2]]
- elif dolzine[j][minimum[2]] == 0:
- dolzine[j][manjsi] = dolzine[j][minimum[1]]
- else:
- dolzine[j][manjsi] = min(dolzine[j][minimum[1]], dolzine[j][minimum[2]])
- del dolzine[j][vecji]
- for j in range(len(dolzine[0])):
- if j == manjsi:
- dolzine[manjsi][j] = 0
- else:
- if dolzine[minimum[1]][j] == 0:
- dolzine[manjsi][j] = dolzine[minimum[2]][j]
- elif dolzine[minimum[2]][j] == 0:
- dolzine[manjsi][j] = dolzine[minimum[1]][j]
- else:
- dolzine[manjsi][j] = min(dolzine[minimum[1]][j], dolzine[minimum[2]][j])
- del dolzine[vecji]
- pprint(drevo[0])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement