Guest User

Untitled

a guest
Jan 21st, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.29 KB | None | 0 0
  1. # values[(geoid, lang)] = count     неаккумулированные данные
  2. # parent[geoid] = parent_id         родители
  3. # Оба следующих обхода выглядят так: берем лист и идем вверх до корня.
  4. # В первом случае мы идем вверх, только если пришли в вершину в первый раз,
  5. # а во втором - только если пришли в последний раз
  6. # 1. Получить количества детей вершин (geoid, lang)
  7. children_count = {}
  8. for (geo, lang) in values.iterkeys():
  9.     while parent[geo]:
  10.         p_node = (parent[geo], lang)
  11.         if p_node in children_count:
  12.             children_count[p_node] += 1
  13.             break
  14.         else:
  15.             children_count[p_node] = 1
  16.             geo = p_node[0]
  17.  
  18. # 2. аккумулировать данные, уменьшая счетчик children_count, и переходя вверх,
  19. # когда он достигнет 0
  20. nodes = values.keys()
  21. for (geo, lang) in nodes:
  22.     while parent[geo]:
  23.         p_node = (parent[geo], lang)
  24.         values[p_node] += values[(geo, lang)]
  25.         children_count[p_node] -= 1
  26.         if children_count[p_node]:
  27.             break
  28.         geo = p_node[0]
Add Comment
Please, Sign In to add comment