Java 使用迭代器的向量BigO
我做了一些研究,但没有找到一篇好文章。Java 使用迭代器的向量BigO,java,vector,big-o,Java,Vector,Big O,我做了一些研究,但没有找到一篇好文章。 我将多个向量添加到一个向量,然后打印它: Iterator it =vector.iterator(); while(it.hasNext()){ System.out.println(it.next()); } 如何确定此函数的大O表示法? 例如,如果输出为: [某物,某物,某物][某物, 某物,某物,某物][某物, 某物,某物,某物,某物] [某物,某物,某物,某物,某物, 某物][某物,某物,某物, 某物,某物,某物
我将多个
向量
添加到一个向量
,然后打印它:
Iterator it =vector.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
如何确定此函数的大O表示法?例如,如果输出为:
[某物,某物,某物]
[某物, 某物,某物,某物]
[某物, 某物,某物,某物,某物]
[某物,某物,某物,某物,某物, 某物]
[某物,某物,某物, 某物,某物,某物,某物]
我不明白的是,每一行都是一个向量,对于主向量我们需要一个循环,但是对于其中的向量我们不需要一个循环,为什么?
当你调用集合上的
toString
时(比如向量
),你会得到一个逗号分隔的列表,用方括号括起来,该集合中每个元素的toString
因此,您的代码所做的是在主
Vector
中的每个Vector
上调用toString
,然后在每个元素上调用toString
。因此,效率是O(n),其中n是调用toString
的对象总数。对集合调用toString
时(如向量
),会得到一个逗号分隔的列表,用方括号括住该集合中每个元素的toString
因此,您的代码所做的是在主
Vector
中的每个Vector
上调用toString
,然后在每个元素上调用toString
。因此效率是O(n),其中n是调用toString
的对象总数。假设您一直遵循这个“阶梯模式”:
如果第一个向量的大小为1,最后一个向量的大小为K,则使用求和公式,复杂度为:
K*(K+1)/2
K*N
现在,如果第一个向量的大小是kK(K+1)/2 - (k-1)(k)/2
最后,如果我们没有“阶梯模式”,但是N个大小小于K的向量,那么复杂性为:
K*(K+1)/2
K*N
希望有帮助。假设您一直遵循这种“阶梯模式”: 如果第一个向量的大小为1,最后一个向量的大小为K,则使用求和公式,复杂度为:
K*(K+1)/2
K*N
现在,如果第一个向量的大小是kK(K+1)/2 - (k-1)(k)/2
最后,如果我们没有“阶梯模式”,但是N个大小小于K的向量,那么复杂性为:
K*(K+1)/2
K*N
希望有帮助。
O(n)
,其中n
是向量的大小。就这么简单。问题有点不清楚。如果您想在打印中使用大O符号,只需查看正在执行的操作数。假设向量中有N个元素,打印输出将有O(N)作为渐近等价(即大O表示法)。那么主向量中的其他向量呢?O(N)
,其中N
是向量的大小。就这么简单。问题有点不清楚。如果您想在打印中使用大O符号,只需查看正在执行的操作数。假设向量中有N个元素,打印输出将有O(N)作为渐近等价(即大O符号)。那么主向量中的其他向量呢?因此每个vector.get(i)
将返回该索引中的元素。toString()
?因此每个vector.get(i)
将返回该索引中的元素。toString()
?