元素唯一性可以在确定的线性时间内解决吗?


9

考虑以下问题:

输入:列出整数的Xÿ

目标:确定两个列表中是否都存在整数X

假设两个列表的大小均为n。是否存在确定性的线性时间算法来解决此问题?换句话说,您可以在不使用随机性的情况下确定地在O n 时间内解决此问题吗?XÿñØñ

不幸的是,您不能假定列表元素都很小。


我可以看到如何使用随机算法在预期时间内求解它:随机选择一个2通用哈希函数h,将X的元素存储到哈希表中(使用h作为哈希函数),然后查找Y的每个元素以查看其是否在哈希表中。预期的运行时间为O n 。但是,我看不到如何找到运行时间为O n 的确定性算法。如果您尝试对此进行非随机化并修复单个特定的哈希函数,则将存在最坏情况的输入,导致此过程在ØñHXHÿØñØñ时间。我能找到的最好的确定性算法涉及对值进行排序,但这不是线性时间。我们可以达到线性运行时间吗?Θñ2

另外,如果您假设所有列表元素都是范围内的整数(基本上,进行计数排序),我可以看到如何在线性时间内解决它-但我对一般情况会感兴趣我们无法假设的情况。[1个ñ]

如果答案取决于计算模型,那么您会想到RAM模型,但对于任何合理的计算模型,我都会对结果感兴趣。我知道用于元素唯一性的决策树算法下界,但这不是确定的,因为有时即使在Ω n log n 界中也可以找到线性时间算法决策树模型。Ωñ日志ñ Ωñ日志ñ


当您需要处理冲突时,哈希表为O(n log n)。
托尔比约恩Ravn的安德森

1
@ThorbjørnRavnAndersen,我看不到你从哪里得到的。使用2通用哈希函数和适当大小的哈希表可确保哈希冲突次数最少(可能性很高),因此我相信运行时间是可以实现的。我不确定你从哪里得到O n lg n ;如果您不执行特殊操作(例如使用2通用哈希),则由于冲突,最坏的情况是O n 2ØñØñlgñØñ2
DW

细节在于魔鬼,这里是“大小合适的哈希表”。如果您不希望发生碰撞,则结果可能会很大。典型的n-log-n是(如果我没记错的话)用于处理与列表的哈希函数冲突。
托尔比约恩Ravn的安德森

1
@ThorbjørnRavnAndersen映射到相同地址的键的预期数量是恒定的(对于未重载的表),因此冲突解决的类型无关紧要。另请参阅此处。如果您使用(外部)平衡BST而不是列表,则最坏的情况。O(nlogn)
拉斐尔

Answers:


1

如果您有足够的内存为X和Y中的每个可能值分配一个位数,则可以解决线性时间问题。这并不会对X和Y的顺序施加任何限制。

  1. 最初,所有位均未设置。
  2. 在X上迭代以设置相应的位。
  3. 遍历Y,检查是否在上面设置了相应的位。

2
不幸的是,您不能假设所有整数都很小(不能假设它们足够小以至于该算法无法工作)。在一般情况下,此算法的运行时间在列表元素的位长中是指数级的。不过谢谢你!
DW

那么我们将其命名为“大小合适的位数组”。比特长度的线性也等于log-n。您是否真的想在不对输入数据施加任何限制或前提条件的情况下获得登录性能?
托尔比约恩Ravn的安德森

2
@ThorbjørnRavnAndersen该空间的位长是指数级的(您需要从所有可能的值进行映射),而时间在整个列表大小中是线性的(您需要查看两个列表中的所有值)。位长没有线性关系。
wchargin 2015年

0

因为您说的是两个列表包含整数,所以我想我们可以对两个列表进行基数排序,然后对两个列表进行等效条件的线性搜索。


4
这仅在数字的大小有界限时才有效。
路加·马蒂森

但我认为高幅值仅会在计数排序和基数排序方面出现问题,我们可以选择足够高的基数来解决该问题...请让我知道我在这里缺少的内容
anirudh 2015年

如果数字之一是2 ^(2 ^ 128)怎么办?
miniBill 2015年

@anirudh,但是对于不同的输入大小,您有不同的算法-每次增加基数时都需要一个更大的字母,您只是在导出增加幅度的复杂度以增加字母大小。当然,从理论上讲这也是可行的,我不认为有很多硬件允许您更改表示数字的基础(我们可以假装在输入和输出端,但是可以归结为(主要是)二进制) )。
2015年

0

为什么不将每个列表的整数插入简单的按位Trie?这会不会是最佳的,在某种意义上说,它是,其中¯ 是整数的平均比特大小; 具体来说,我看不出如何做得更好,因为简单地*阅读*这两个列表将花费大量时间。Øñ¯¯


感谢您的来信。请参阅问题的最后一段,它解决了这一点。在RAM模式,你可以在阅读的两个列表时间-它并不需要Ø ñ \划线时间。所以这就是计算模型的用处-这个答案实际上并不能证明确定性线性时间是不可能的。ØñØñ\ overbar
DW

@DW在RAM模型中,有一个字大小这是一个常数,它界定并且因此也¯ ,其导致的运行时间ø Ñ ,还是我误?wmm¯O(n)
Realz Slaw

嗯,也许认为为常数是错误的。w
Realz Slaw

不被认为是常数,而是取决于n:您可以使它wñññ
greybeard

-1

它类似于Elemet唯一性问题,在该问题中,您有一组n个数字,并且您想确定所有元素是否都不同。该问题的代数计算树下限为Øñ日志ñ


1
问题是关于线性确定时间的非常明确的,而不是对数线性的。另外,要确定集合(不包含什么值)仅具有唯一元素,您可以比对数线性更快。
Evil

1
您的意思是吗?如果是这样,则可能表明问题无法在线性时间内解决。但是仅仅说一个相关的问题可以在对数线性时间内解决并不能真正回答这个问题。(cc @EvilJS)Ωñ日志ñ
David Richerby '16

1
感谢您的来信。我想知道您是否错过了问题的最后一句话。我在这里重复一下:“我知道决策树算法具有元素唯一性下界,但这并不是确定的,因为有时即使存在决策树模型中的Ω n log n 。” 换句话说,这个答案不能回答问题。它只是重复了我已经知道的问题中已经说过的内容,但是并不能解决问题。Ωñ日志ñ Ωñ日志ñ
DW

Øñ日志日志ñØñ日志ñΩñ日志ñ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.