vic*_*oom 2 python big-o dictionary time-complexity python-3.x
如果可能的话,我需要一种方法来在 O(1) 时间或真正的任何次线性时间内在充满 Node 对象的字典中找到最小值。
这是我需要的示例:
'''
Nodes have 4 attributes:
- stack
- backwards
- forwards
- total_score
'''
dict = {str(Node1.stack): Node1,
str(Node2.stack): Node2, ... } # note that keys are the stacks as strings
key, smallest = min(frontier.items(), key=lambda pair: pair[1].total_score)
( ^^^ something better than this! ^^^ )
Run Code Online (Sandbox Code Playgroud)
上面的最后一行(关键,最小...)是我到目前为止所拥有的。它工作正常,但速度太慢。我在网上读到 min() 函数需要 O(n) 时间。我有很多节点要处理,所以速度更快会很棒。
编辑之前应该提到过,但这是在 A* 算法中运行的 - 前沿动态更新。我需要能够做的操作是:
不可能在 O(1) 时间内从字典中获取最小值,因为您必须检查每个值。但是,如果将数据存储在堆或排序树中(数据按值排序),则可以进行快速查找。树通常为您提供 O(log n) 的插入和搜索时间。
如果您实际上只需要数据的最小值并且您永远不需要查找其他值,您可以创建一个minValue变量,每次插入或删除项目时都会保持更新。
| 归档时间: |
|
| 查看次数: |
1246 次 |
| 最近记录: |