在二进制搜索中,我知道它的复杂性与log2(n)一起运行。搜索利用列表是有序的这一事实,因此我们可以假设数组中的每个项都有一个“标记”(其索引)作为减少运行时的附加信息。有没有办法添加额外的“标签”以进一步降低其复杂性?换句话说,我们可以实现另一个组织级别来更有效地搜索项目吗?
答案 0 :(得分:0)
如果您的搜索算法基于比较,并且列表是有序的,则log2(n)是下限。但是,有一些时空权衡算法或数据结构也可用于搜索。最常见的是HashTable。
答案 1 :(得分:0)
我不知道这是否适用于您的情况,但如果您正在处理简单的关联逻辑(即,您没有键/值区别,只有键),并且您的客户已经可以访问密钥,并且只是想弄清楚一个元素是否属于容器,那么这里有一个非常简单快速的解决方案,在寻找数据结构来完成工作时经常会遇到很多问题
只需将一个或多个后退指针(或反向引用,具体取决于语言)存储到密钥内的容器中。现在,您不再搜索容器以查看密钥是否属于它。您可以在其后退指针中搜索密钥本身,以查看它是否属于容器。
即使是最快的哈希表实现,如果您的密钥一次不属于太多容器,这通常会胜过最快的哈希表实现。如果它们一次只属于一个容器,那么它就是一个快速的恒定时间检查,只需查看后指针是否指向您感兴趣的容器。
这是一个比你的关键表示完全脱离的容器更具侵入性的解决方案,但它很难超越设定逻辑的速度(发现某些东西属于一个集合,找到集合交叉点,联合,差异)如果您的需求符合标准:即您使用简单的关联逻辑,并且您的密钥不会同时属于太多此类聚合。