java - 你如何找出七次搜索的大 O 和大 Omega?

标签 java algorithm runtime big-o

在家庭作业中,我们得到了一个叫做“七分搜索”的东西,它类似于二分搜索,但不是将数据结构减半,而是将其分割为 7 组。我们被要求通过编写递归方程并求解它来证明最坏情况下的运行时间在 BigTheta(log n) 中。

这是七次搜索的伪代码:

septenarySearch(L, s):
  HELPER(L, 0, L.length-1, s)

HELPER(L, Lo, Hi, s):
  if Hi - Lo + 1 > 7:
    basic_group_size = floor((Hi - Lo + 1) / 7)
    number_of_larger_groups = (Hi - Lo + 1) % 7
    for i in 0 .. 6:
      group_size = basic_group_size
      if i < number_of_larger_groups:
        group_size = group_size + 1
      first_element_of_group = i*group_size
      last_element_of_group = (i+1)*group_size - 1
      if L[first_element_of_group] <= s <= L[last_element_of_group]:
        return HELPER(L, first_element_of_group, last_element_of_group, s)
  else:
    for index in Lo .. Hi:
    if s == L[index]:
      return true
    return false

我们还得到提示,考虑的元素数量 递归调用HELPER中至少有1/7传入的范围(Lo和Hi之间),且数量不超过1/4。

我很确定其中一个递归方程是 T(n) = c + T(n/7) 其中 c 是某个常数值,我认为这让我 BigO(log n)。如果我试图证明 Big Theta,我也需要证明 BigOmega(log n),对吗?我如何找到 BigOmega 是什么?

我确定 1/4 应该用于查找 BigOmega,但不确定如何执行此操作(甚至不知道 1/4 从何而来)。

最佳答案

给出的提示:

Number of elements in recursive call >= n/7                     (+)
Number of elements in recursive call <= n/4                     (++)

因此,算法运行时间的下限和上限由下式给出

Lower bound: 
Assume all recursive calls contains n/7 number of elements from
range passed to previous call call (n elements). 
Recurrence relation: 

     T_L(n) = T(n/7) + c                                        (i)

Upper bound: 
Assume all recursive calls contains n/4 number of elements from
range passed to previous call call (n elements). 
Recurrence relation:  

     T_U(n) = T(n/4) + c                                        (ii)

您可以通过展开递归来解决 (i)(ii),这将直接为您提供 Big-Θ 关系:

enter image description here

现在你被问及最坏情况下的复杂度,在这种情况下 T(n) = T_U(n)。因此,最坏的情况是T(n) ∈ Θ(log_4 n)

关于java - 你如何找出七次搜索的大 O 和大 Omega?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35028268/

相关文章:

Java:使用泛型扩展类

java - 代号一本地通知不适用于 ios

algorithm - 是否有一种有效的方法可以按特定顺序迭代未排序的容器,而无需排序/复制/引用原始容器?

java - 计算函数的运行时间

java - java中的Eclipse代码checkstyle缩进模块?

java - 为什么这个错误 Exception in thread "main"java.lang.IllegalArgumentException : adding a window to a container

algorithm - 无向图中的循环数

algorithm - 不同复杂度等级算法的实时 CPU 数据

c# - 匹配规则在运行时变化

java - 在运行时将按钮添加到布局