Algorithm 时间复杂度算法分析
我已经写了一个函数,合并两个链表。(请注意,该函数基于预先给定的代码,以防您想知道我为什么调用函数Algorithm 时间复杂度算法分析,algorithm,time-complexity,Algorithm,Time Complexity,我已经写了一个函数,合并两个链表。(请注意,该函数基于预先给定的代码,以防您想知道我为什么调用函数节点(i)) 第一部分O(n) 第二部分O(n) 总体复杂度O(n) 还是O(n^2),因为我遍历列表两次?遍历两次只是一个常数乘数。只要乘数不依赖于n,它仍然是O(n)。编辑:但是,请确保插入到其他列表中的时间是恒定的。如果执行时间与另一个列表的大小成正比,那么,我想你可以看到接下来会发生什么。因为你遍历了两次列表,它是O(2n)。。哪个是O(n)。它是线性增长 此外,在大多数编程语言中,集合的长
节点(i)
)
第一部分O(n)
第二部分O(n)
总体复杂度O(n)
还是O(n^2),因为我遍历列表两次?遍历两次只是一个常数乘数。只要乘数不依赖于n,它仍然是O(n)。编辑:但是,请确保插入到其他列表中的时间是恒定的。如果执行时间与另一个列表的大小成正比,那么,我想你可以看到接下来会发生什么。因为你遍历了两次列表,它是O(2n)。。哪个是O(n)。它是线性增长 此外,在大多数编程语言中,集合的长度已经被跟踪,因此您可以直接提取该属性,而不是重复两次。O(n^2)算法的示例类似于查找两个数组中元素的交点。它是O(n^2),因为您将从第一个数组中获取第一个元素,并将其与第二个数组中的每个元素进行比较。然后取第二个元素并将其与第二个数组中的每个元素进行比较。重复一遍
值得思考的是,您可以通过散列一个数组中的所有元素(即O(n))将上述示例转换为O(n),然后检查第二个数组中的每个元素(也就是O(n)) 一个简单的方法是使用不同的n值运行代码。例如,尝试10、100、1000、10000。。。直到你得到不平凡的时光。当你把n乘以10,时间会发生什么变化?如果n*10=>time*10,则为O(n)。如果n*10=>time*100,则为O(n2)。在这两者之间,它可能是O(n logn)。来自一个学术的p.O.v.和一个大的Oh符号p.O.v.这是100%正确的。我认为值得注意的是,对于比较两个O(n)算法,每n个原子操作的数量也很有趣(对于原子,在这种情况下,请考虑(浮点)运算、逻辑运算和分支)
public SLL mergeUnsorted(SLL otherList)
{
// find length of this list
int length = 0 ;
Iterator itr = this.iterator() ;
while (itr.hasNext())
{
Object elem = itr.next() ;
length++ ;
}
// get each node from this list and
// add it to front of otherList list
int i = length -1 ;
while (i >= 0)
{
// returns node from this list
SLLNode ins = node(i) ;
ins.succ = otherList.first ;
otherList.first = ins ;
i-- ;
}
return this ;
}