![](/img/trans.png)
[英]Is there an elegant way to print all items in one way and the last item the other in python
[英]Python: Elegant way to store items for checking item existence in a container
在遇到的情况下,我想定义“优雅”,其具有1)常数O(1)时间复杂度,用于检查一项是否存在,以及2)仅存储项 , 仅此而已。
例如,如果我使用列表
num_list = []
for num in range(10): # Dummy operation to fill the container.
num_list += num
if 1 in num_list:
print("Number exists!")
根据[ 链接 ],“输入”操作将花费O(n)时间。
为了达到恒定的检查时间,我可以使用字典
num_dict = {}
for num in range(10): # Dummy operation to fill the container.
num_dict[num] = True
if 1 in num_dict:
print("Number exists!")
在字典的情况下,“输入”操作根据[ 链接 ]花费O(1)时间 ,但是需要额外的O(n)存储来存储伪值。 因此,这两种实现/容器似乎都不美观。
什么是更好的实现/容器,以便在仅存储项目时获得恒定的O(1)时间来检查项目是否存在? 如何将资源需求保持在最低限度?
这里的解决方案是使用set
,它不需要您为每个值保存一个虚拟变量。
通常,您无法同时优化空间和时间。 您可以做的一件事是获取有关数据范围(此处为num的最小值至最大值)和数据大小(此处为循环运行的次数,即10)的更多详细信息。 然后,您将有两个选择:
如果选择正确的方法,则可能会为大型样品获得恒定的时间和空间
编辑: 设置这是一个哈希表,通过一些优化使Python dict实现得非常相似,这些优化利用了值始终为null的事实(在一个设置中,我们只关心键)。 设置操作确实需要对至少一个操作数表进行迭代(在联合情况下均为两者)。 迭代并不比其他任何集合便宜(O(n)),但是成员资格测试的平均水平为O(1)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.