我有一个带有 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)
吗?
答案 0 :(得分:2)
您添加到代码中的评论没有帮助。 getContinent
做了什么?
在任何情况下,由于您对列表的每个可能添加使用线性搜索(ArrayList.contains
),因此看起来复杂性将为Omega(n ^ 2)。