我们能否找到元素是不是存在于数组 1,2,...,n 中,其中元素 m 个不同的元素在 Θ(m) 中? [关闭]
Posted
技术标签:
【中文标题】我们能否找到元素是不是存在于数组 1,2,...,n 中,其中元素 m 个不同的元素在 Θ(m) 中? [关闭]【英文标题】:Can we find if element exists in an array 1,2,...,n with elements m different elements in Θ(m)? [closed]我们能否找到元素是否存在于数组 1,2,...,n 中,其中元素 m 个不同的元素在 Θ(m) 中? [关闭] 【发布时间】:2015-03-01 15:15:22 【问题描述】:假设我们有一个数组 A[1...n]
,并且这个数组有 m 个不同的键。n→∞
的复杂度是否有可能变成Θ(m)
?这意味着如果m = constant
那么Θ(1)
。
【问题讨论】:
@amit 数组未排序。但我不知道我是否可以将其用作假设, 我想你可能会在 Theoretical Computer Science 网站上得到更多关于这个问题的回答,因为它不涉及编码问题。 取决于数组的存储方式。或者,换一种说法,如果问题是“是否有一个大小为 O(n+m) 的数据结构可以存储n
范围内的有序值 1..m
,并且可以在 O(1 ) 查询“对象 i 的值是多少?”和“是否存在值为 j 的对象?”,那么答案是肯定的。
【参考方案1】:
不,你不能。
此外,即使m=2
在O(1)
中找不到,因为这意味着您可以通过创建一个函数在O(1)
中的无限制数组(所有值都可能)中找到值x
:
f(i) = 1 arr[i] = x
0 otherwise
并搜索是否有值i
等于f(i) = 1
。
由于您无法在数组中找到O(1)
中的元素,因此在此了解最多m
不同元素对您没有帮助。
对于任何常量m>2
来说,上述情况显然是正确的。
【讨论】:
以上是关于我们能否找到元素是不是存在于数组 1,2,...,n 中,其中元素 m 个不同的元素在 Θ(m) 中? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用matlab获知某个字符是不是存在于一个字符集合内?