我想用给定的值计算字典中的项目数(假设字典中的值只是数字),我在网上搜索并找到两种方法,first one:
sum(x == chosen_value for x in d.values())
第二种方法是在Counter模块中使用Collections。
但是,我认为两种方法的运行时间都是O(N)
,其中N
是字典中的项目总数。我想找到一种方法在O(logN)
中执行此操作,是否可能?
提前感谢您的任何帮助和建议!
更新
感谢所有快速回复!它不能在O(logN)
中完成。我可以使用二叉树来存储(键,值)对。
答案 0 :(得分:5)
没有。你为什么期望它成为可能?可能是你有一个二叉搜索树,但是dicts是无序的,所以你必须遍历这些值。
答案 1 :(得分:2)
如果您没有这些值的先验知识,则必须读取给定字典中的每个值,这是正常情况。因此,在通常情况下, 为O(N)
。
答案 2 :(得分:0)
您可以维护另一个字典,该字典将值映射到count。这会给你在O(1)中寻找的计数。这个想法是实现一个更高阶的数据结构,就像字典一样,但通过在内部维护另一个字典,增加了返回值的能力。
我意识到这可能不是你要问的。只是把它放在那里,只是冒险。