Arrays 给定大小为m和n的两个不同整数A和B的数组,查找一个公共元素的下限复杂度是多少?

Arrays 给定大小为m和n的两个不同整数A和B的数组,查找一个公共元素的下限复杂度是多少?,arrays,algorithm,Arrays,Algorithm,我有以下问题: 给定大小为m和n的两个不同整数A和B的数组,查找第一个公共元素的上界复杂度是多少?除了输入数组之外,我最多可以使用O(k)内存 k是一个常数(意味着除了输入外,我只能使用常数内存) 我已经在另一个网站上问过这个问题: 但是没有解决问题我将在你的《论CS》中破解第二个问题,因为我不确定你对问题的总结是不是最好的 给定两个不同整数的未排序数组,A和B,大小分别为m和n;知道数组之间的公共元素在两个数组中具有相同的相对顺序,并且对于每两个连续的公共元素,它们的距离最多为k(常数),确

我有以下问题:

给定大小为m和n的两个不同整数A和B的数组,查找第一个公共元素的上界复杂度是多少?除了输入数组之外,我最多可以使用O(k)内存

k是一个常数(意味着除了输入外,我只能使用常数内存)

我已经在另一个网站上问过这个问题:


但是没有解决问题

我将在你的《论CS》中破解第二个问题,因为我不确定你对问题的总结是不是最好的

给定两个不同整数的未排序数组,AB,大小分别为m和n;知道数组之间的公共元素在两个数组中具有相同的相对顺序,并且对于每两个连续的公共元素,它们的距离最多为k(常数),确定两个数组之间的所有公共元素,保持它们的相对顺序,除了输入数组外,最多使用O(k)内存

我将再次使用评论中提到的堆和您对原始问题的编辑中提到的堆,但这次我们只需要一个堆

注意,为了确定元素A[i]在数组B中是否有匹配项,我们只需要检查元素B[i-k]…B[i+k]。在B的子阵列上使用heapify在O(k)时间和2k+1=O(k)空间中构建这些元素的堆B'。确定B'中是否存在a[i]的匹配需要O(log k)。然后,我们迭代i=1..m的A,更新B',并检查与A[i]的匹配。这将保持输出中的相对顺序。要确定A中的所有m元素是否存在匹配,需要O(km log k)或O(m)时间

注:


  • 显然,您应该遍历较小的数组,将较大数组的元素放入堆中。我自始至终都假设m可能是因为缺少咖啡,这让我不禁要问,但是
    O(k)
    其中
    k
    是什么?你为什么关心下限Ω()?这类问题通常用上限O()表示。下限对于这项任务没有意义。幸运的话,第一次考试就成功了。我想你想知道上界(最坏的情况)请告诉我你知道在同一个问题上,算法的下界复杂度和最优算法的复杂度之间的区别我刚才看到在我键入答案时,问题已经结束了。我建议您更新此问题,将信息包含在您在CS上的原始帖子中,以便重新打开此问题。