以下功能的最坏情况下的时间复杂度?

时间:2019-01-23 17:51:58

标签: algorithm time-complexity

  • V已排序
  • V.size()= N
  • 该函数最初称为searchNumOccurrence(V,k,0,N-1)
    int searchNumOccurrence(vector<int> &V, int k, int start, int end) {
    if (start > end) return 0;
    int mid = (start + end) / 2;
    if (V[mid] < k) return searchNumOccurrence(V, k, mid + 1, end);
    if (V[mid] > k) return searchNumOccurrence(V, k, start, mid - 1);
    return searchNumOccurrence(V, k, start, mid - 1) + 1 + searchNumOccurrence(V, k, mid + 1, end);
}

有人可以帮我解决这个问题吗?

预先感谢您的解释。

2 个答案:

答案 0 :(得分:0)

需要考虑的事情-假设您的向量包含n个完全相同的副本。在这种情况下,该函数将继续将阵列分成两半,并搜索两个部分以计算其中有多少个副本。这样一来,它将至少访问数组的每个元素一次(选中此按钮-您知道为什么吗?)因此,在这种情况下,每个元素的工作量是恒定的。基于此,您认为运行时复杂度是什么?

答案 1 :(得分:0)

相同的元素越多,通过二进制搜索找到它们的时间就越少。 当您只寻找一个元素log(n)时,最慢的首次搜索将发生 在其他情况下,找到第一个元素将发生在log(n / log(repsOfK))之类的事件中 但是,您要寻找的元素越多,意味着您将需要多次运行函数,因此这将是总和 O(n)= Log(n / log(repsOfK))+ 2 * log(n /(2 * log(repsOfK-1))+ ... + 2 ^ n log(n /(2 ^ n log(repsOfK-2 ^(n-1))))

您将必须找到此功能的最大值才能找出答案

相关问题