用于插入,删除和搜索的高效数据结构

时间:2018-06-29 11:33:46

标签: python python-2.7 performance data-structures

当使用某些资源时,我需要跟踪打开和关闭状态。我使用的第一个结构是两个open_states_listclosed_states_list,它们在状态更新时会添加和删除。

  • 如果我们忽略内部内存分配和重新分配机制,则插入为O(1),我猜:open_states_list.append(x)
  • 删除为O(n):open_states_list.remove(x)
  • 搜索就像删除一样,是O(n):x in open_states_list
  • 获取列表显然是O(1)。

我使用的第二个结构是具有布尔值open_states = {}的单个字典,其中如果open_states[x]True,则x是打开的,如果{{1} },然后将其关闭。

  • “插入”是O(1),因为我们只是在设置键和值:False
  • 出于同样的原因,“删除”为O(1):open_states[x] = True
  • “搜索”也是O(1),只是访问键的值:open_states[x] = False
  • 获取列表的时间为O(n):open_states[x]

我们最常见的操作是检查[x for x, s in open_states.iteritems() if s]是否打开(搜索),因此第二种选择更好。但是,在第二种最常见的操作中,获取打开状态或使用状态的列表非常紧密地跟随搜索操作,在第一种选择中效率更高。但是,我们无法选择第一个选项,因为检查资源的状态为O(n)。

插入也很常见。删除不是必需的。

满足这些需求的最有效的数据结构是什么?

0 个答案:

没有答案