【问题标题】:python and fast lookups of a tree where nodes have multiple attrubutes and valuespython和快速查找节点具有多个属性和值的树
【发布时间】:2013-03-07 08:57:12
【问题描述】:

我需要一个非常快的 python 中的树对象。查找速度比内存更重要。叶节点是我想要的值。 因此,如果给定 state=NY、postion=3、hourOfDay=2 和 dayOfWeek=3,我需要快速获得值 =100。带 * 的节点是叶子节点。

0) root
    1) {state: [NY,LA]}
        2) {howOfDay:[1,2,3,4,5], postion:[1,2,3]}
                             *3) {dayOfWeek:[234]} => value:100
            4) {state: [FL,NV,……rest of the states]}
                5) {howOfDay:[1,6,7,8,9….23]}
                      *6) {dayOfWeek:[1,5,6,7]} => value:120

在我的数据库中,我的数据看起来像这样,属性为 json 对象。

parent child attribute value

0 1 state NY,LA
1 2 {howOfDay:[1,2,3,4,5], postion:[1,2,3]}
2 3 dayOfWeek dayOfWeek [2,3,4] 100
0 3 state  [FL,NV,……rest of the states]
4 5 howOfDay:[1,6,7,8,9….23]
5 6 dayOfWeek:[1,5,6,7] 120

那么,我应该使用什么 python 库和树结构来最好地找到一个值?如何将数据转换为最好的快速查找?

【问题讨论】:

  • 除非树太大,你应该坚持dict
  • 树会很大。我应该说我需要一种内存效率最高但内存效率最高的树结构...选择在查找中具有最佳性能的树结构。

标签: python tree hashtable binary-tree binary-search-tree


【解决方案1】:

如果您重视速度而不是内存,您可以将所有数据放入字典中,使用 tuple(state, position, hourOfDay, dayOfWeed) 作为键。

data = dict()

现在,对于每个离开节点,将数据插入字典:

data[state, position, hourOfDay, dayOfWeed] = value

然后您使用

访问数据
value = data[state, position, hourOfDay, dayOfWeed]

这比任何树遍历都快,因为它使用哈希字典的底层优化 CPython 实现。

【讨论】:

  • 你能告诉我如何用字典创建元组吗?
  • 简单:d[(1,2,3,4)] = 'foo'
  • >>> d[(1,2,3,4)] = 'foo' Traceback(最近一次调用最后):文件“”,第 1 行,在 NameError : 名称“d”未定义
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
相关资源
最近更新 更多