递归算法的时间复杂度

时间:2011-04-26 21:04:47

标签: algorithm recursion time-complexity

我有一个带有 x -sided字段的网格。每个字段都包含指向其周围字段的 x 的链接。 [ x是常数]

我有一个在这个领域实现的算法(可能可以优化):

[java like pseudocode]

public ArrayList getAllFields(ArrayList list) {

  list.addToList(this);

  for each side {
    if ( ! list.contains(neighbour) && constantTimeConditionsAreMet()) {
      neighbour.getAllFields(list) //Recursive call
    }
  }

  return list;

}

我很难找到时间复杂度。

  • ArrayList#contains(Object)以线性时间运行
  • 我如何找到时间复杂度?我的方法是:

    T(n) = O(1) + T(n-1) +
    c(nbOfFieldsInArray - n) [The time to check the ever filling ArrayList]
    
    T(n) = O(1) + T(n-1) + c*nbOfFieldsInArray - cn
    

    这会给我T(n) = T(n-1) + O(n)吗?

    1 个答案:

    答案 0 :(得分:2)

    您添加到代码中的评论没有帮助。 getContinent做了什么?

    在任何情况下,由于您对列表的每个可能添加使用线性搜索(ArrayList.contains),因此看起来复杂性将为Omega(n ^ 2)。