Java 函数调用另一个类时的时间复杂度
这个循环的时间复杂度是多少?带迭代器的while循环的复杂度是O(n),但因为它还有一个对其他类的函数调用。该函数有一个for循环,仅用于读取列表和if/else条件。我不知道复杂性是停留在O(n)还是会增加?因为循环是由n个对象组成的,所以如果我只考虑这一点,则循环复杂度是O(m)和m+n=n。但我不确定这是否有意义Java 函数调用另一个类时的时间复杂度,java,time-complexity,ontology,Java,Time Complexity,Ontology,这个循环的时间复杂度是多少?带迭代器的while循环的复杂度是O(n),但因为它还有一个对其他类的函数调用。该函数有一个for循环,仅用于读取列表和if/else条件。我不知道复杂性是停留在O(n)还是会增加?因为循环是由n个对象组成的,所以如果我只考虑这一点,则循环复杂度是O(m)和m+n=n。但我不确定这是否有意义 public static void main(String[] args) { final String queryString = "" +
public static void main(String[] args) {
final String queryString = "" +
"SELECT ?a WHERE {\n" +
" ?a ?b ?c1 ;\n" +
" ?e ?b ?c2 .\n" +
"}";
final Query query = QueryFactory.create( queryString );
System.out.println( "== before ==\n"+query );
ElementWalker.walk( query.getQueryPattern(),
new ElementVisitorBase() {
@Override
public void visit(ElementPathBlock el) {
ListIterator<TriplePath> it = el.getPattern().iterator();
while ( it.hasNext() ) {
final TriplePath tp = it.next();
AnotherClass ac = new AnotherClass();
ac.AnotherClassfunction(tp);
}
}
}
});
publicstaticvoidmain(字符串[]args){
最后一个字符串queryString=“”+
“选择一个位置{\n”+
“?a?b?c1;\n”+
“?e?b?c2。\n”+
"}";
最终查询=QueryFactory.create(queryString);
System.out.println(“==before==\n”+查询);
ElementWalker.walk(query.getQueryPattern(),
新元素visitorbase(){
@凌驾
公共无效访问(ElementPathBlock el){
ListIterator it=el.getPattern().iterator();
while(it.hasNext()){
final TriplePath tp=it.next();
AnotherClass ac=新的AnotherClass();
ac.另一类功能(tp);
}
}
}
});
另一类
final static Set<Node> objects = new HashSet<Node>();
static void AnotherClassFunction(TriplePath tp,)
{
Node Object = tp.getObject();
Node Subject = tp.getSubject();
objects.add(tp.getObject());
for(Node o: objects) {
if(Subject.matches(o)) {
print ....
}
}
}
final static Set objects=new HashSet();
静态void另一类函数(TriplePath tp,)
{
节点对象=tp.getObject();
Node Subject=tp.getSubject();
add(tp.getObject());
用于(节点o:对象){
if(主题匹配(o)){
打印。。。。
}
}
}
谢谢 没有足够的信息来计算时间复杂度。它取决于构造函数
AnotherClass()
是否依赖于任何相关参数(例如全局变量或其他输入),以及AnotherClassfunction()
的行为。但是,即使while循环的主体完全为空,复杂性也不一定是O(count(it))
。这取决于迭代器的实现
例如,另一个类函数(tp)
的成本很可能取决于tp
的大小。在这种情况下,时间复杂度不仅取决于it
的长度,还取决于it
内容的大小,因此它甚至可能是一个多元函数
根据评论更新:
假设
另一类函数的成本与的长度n
无关,且仅取决于其输入参数tp
的大小,并假设的所有元素tp
的大小都相同m
,假设迭代it
是O(n),并且假设另一个类函数的时间复杂度是由函数g
给出的,循环的总复杂度是一个具有两个参数的函数,在O(n*g(m))
中,没有足够的信息来计算时间复杂度。它取决于构造函数AnotherClass()
是否依赖于任何相关参数(例如全局变量或其他输入),以及AnotherClassfunction()
的行为。但是,即使while循环的主体完全为空,复杂性也不一定是O(count(it))
。这取决于迭代器的实现
例如,另一个类函数(tp)
的成本很可能取决于tp
的大小。在这种情况下,时间复杂度不仅取决于it
的长度,还取决于it
内容的大小,因此它甚至可能是一个多元函数
根据评论更新:
假设另一类函数的成本与的长度n
无关,且仅取决于其输入参数tp
的大小,并假设的所有元素tp
的大小都相同m
,并且假设迭代it
是O(n),并且假设另一个类函数的时间复杂度是由函数g
给出的,循环的总复杂度是一个具有两个参数的函数,这两个参数都在O(n*g(m))
这取决于其他函数的复杂性。请注意,您显示的代码是在查询中声明的模式上迭代的,而不是运行此SPARQL查询的结果。除非查询非常复杂,或者您希望对其执行的操作需要大量工作,否则查询模式的复杂性很可能只是迭代结果成本的一小部分(此查询中的两个模式将匹配本体中的每三个模式,即使第二个模式可能因为未用于获取结果而被删除-?a不受其约束)。@lgnazio如果我理解正确,那么您是说复杂性可能在O(n^c)中/多项式取决于查询的复杂性?我正在研究简单的查询模式(仅限于断言)无连接、过滤器等取决于另一个函数的复杂性。请注意,您显示的代码是在查询中声明的模式上迭代的,而不是运行此SPARQL查询的结果。除非查询非常复杂,或者您希望对其执行的操作需要大量工作,否则查询的复杂性将降低erns很可能只是迭代结果成本的一小部分(此查询中的两个模式将匹配本体中的每三个模式,即使第二个模式可能因未用于获取结果而被删除-?a不受其限制)。@lgnazio如果我理解正确,s