所以我的数据结构类覆盖了时间复杂度,我只是对arraylist和treemap的性能有一个快速的问题。
ArrayList的get方法是O(1),TreeMap的get方法是o(log n)
现在,如果我做了一个遍历整个列表或树的循环,例如
for (int i = 0; i < blahblah.size(); i++)
{
blah blah
}
对于arraylist,这个循环性能是o(1)还是o(n)?我意识到当你检索1个项目时,性能是O(1),但是这个循环遍历整个列表,所以不是1 * n项目会使它成为n吗?
树图是一样的,因为你要遍历整个树,所以它是o(log n)或n log n。
答案 0 :(得分:1)
由于您需要数据结构的所有n个元素,因此结果不仅取决于给定的数据结构,还取决于您要检索的元素数量。
所以是的,结果将是O(n)或O(n log n),但是根据数据结构,你可以做得更好。考虑一个链表 - 而不是得到O(n * n)你可以用O(n)做得很好。
然而,除了大O之外,还有更多的表现 - 实际上常数很重要。一个例子是基数类型的32位数字。用于排序的O(n)听起来很棒,但对于大多数合理的输入大小,快速排序肯定会更快。
答案 1 :(得分:1)
“ArrayList的get方法是O(1),TreeMap的get方法是o(log n)”
ArrayList.get()是O(1)的原因是因为按索引查找只是从原点的偏移量。如果数组有5或5M元素,那么它的工作量是相同的。
TreeMap.get()是O(log n),因为它可能必须向下遍历二叉树的多个元素。
答案 2 :(得分:0)
是的,那将是O(n)。 O值几乎总是最坏的情况。
答案 3 :(得分:-1)
通过所有元素将O(n)
,因为您必须至少访问一次。
树形图也应该是O(n)
,原因与您是否按顺序,按顺序或预订顺序访问节点有关。