Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 函数调用另一个类时的时间复杂度_Java_Time Complexity_Ontology - Fatal编程技术网

Java 函数调用另一个类时的时间复杂度

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 = "" +

这个循环的时间复杂度是多少?带迭代器的while循环的复杂度是O(n),但因为它还有一个对其他类的函数调用。该函数有一个for循环,仅用于读取列表和if/else条件。我不知道复杂性是停留在O(n)还是会增加?因为循环是由n个对象组成的,所以如果我只考虑这一点,则循环复杂度是O(m)和m+n=n。但我不确定这是否有意义

 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