Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # values[(geoid, lang)] = count неаккумулированные данные
- # parent[geoid] = parent_id родители
- # Оба следующих обхода выглядят так: берем лист и идем вверх до корня.
- # В первом случае мы идем вверх, только если пришли в вершину в первый раз,
- # а во втором - только если пришли в последний раз
- # 1. Получить количества детей вершин (geoid, lang)
- children_count = {}
- for (geo, lang) in values.iterkeys():
- while parent[geo]:
- p_node = (parent[geo], lang)
- if p_node in children_count:
- children_count[p_node] += 1
- break
- else:
- children_count[p_node] = 1
- geo = p_node[0]
- # 2. аккумулировать данные, уменьшая счетчик children_count, и переходя вверх,
- # когда он достигнет 0
- nodes = values.keys()
- for (geo, lang) in nodes:
- while parent[geo]:
- p_node = (parent[geo], lang)
- values[p_node] += values[(geo, lang)]
- children_count[p_node] -= 1
- if children_count[p_node]:
- break
- geo = p_node[0]
Add Comment
Please, Sign In to add comment