【发布时间】:2015-09-06 13:46:29
【问题描述】:
如何比较这两种方法的O 复杂度?
这里是第一种方法:
protected static List<Integer> removeDuplicates1(List<Integer> source) {
List<Integer> tmp = new ArrayList<Integer>();
for (Integer element : source) {
if (!tmp.contains(element)) {
tmp.add(element);
}
}
//Collections.sort(tmp);
return tmp;
}
第二个:
protected static List<Integer> removeDuplicates2(List<Integer> source) {
return new ArrayList<Integer>(new HashSet<Integer>(source));
}
UPD
我不知道如何计算这两种方法的 O 复杂度。
UPD2
好的,第一种方法的时间复杂度是O(n^2),第二种是O(n)。那么内存使用情况呢?谁更贪婪,为什么?
【问题讨论】:
-
查看源代码,如果您不能提供大量列表并测量时间(至少对于时间复杂度而言)。有一些工具可以监控堆/堆栈使用情况,其中最简单的工具之一是在 jdk 中构建“ jconsole" 位于 bin 目录中
-
你知道如何计算每一个的O复杂度吗?如果你这样做了,那么比较它们应该很容易。如果您不这样做,请编辑您的问题以反映这一点,因为措辞似乎建议您这样做。我不确定问题到底是什么。
-
@Palcente 我一直认为算法复杂度是一个与某些理论有关的东西,与实践无关。
-
@yshavit 我不知道该怎么做。
-
哪一个?两个都?您阅读过哪些计算大 O 的资源,以及在此处应用这些资源有哪些不明白的地方?到目前为止,这个问题非常广泛,基本上是“我如何计算大 O”——对于 SO 的格式来说太宽泛了。
标签: java time-complexity space-complexity