这个算法(代码)的时间复杂度是多少?

时间:2016-06-28 08:57:46

标签: java algorithm computer-science

我有将六种类型的XPath查询转换为SQL查询的算法。所以,我的代码包含If-elseif-else语句(多个if)。我从互联网上读到,If-elseif-else语句的时间复杂度是一个如果有更多处理的最坏情况时间。我需要知道这段代码的时间复杂度是什么:

} else if (Query_Type == 5){
for (int i = strXPathQuery.length()-1; i > 0; i--) {
        if (strXPathQuery.charAt(i) == '/') {
             position = i;
             break;
        }    
 }   // end for loop                              
 Last_Node = strXPathQuery.substring(position+1);
 strAncestor_Path = ""; 
 int bracket_pos=0;
 for (int i = 0; i < position; i++) {
   if (strXPathQuery.charAt(i) == '[') {
          bracket_pos = i;
          break;
  } else if (strXPathQuery.charAt(i) == '/' && strXPathQuery.charAt(i+1) == '/')  {
           strAncestor_Path = strAncestor_Path + "%";
  }
  else {
            strAncestor_Path = strAncestor_Path + strXPathQuery.charAt(i);
  }  // end if statement
 }   // end for
    int operator_pos = 0; 
    String Node_condition=""; 
    for (int i = bracket_pos+1; i < position-2; i++) {
      if ((strXPathQuery.charAt(i) == '<') || (strXPathQuery.charAt(i) ==  '>') || (strXPathQuery.charAt(i) == '=') || (strXPathQuery.charAt(i) == '!')) {
              operator_pos = i;
              break;
                }
        else {
            Node_condition = Node_condition + strXPathQuery.charAt(i);
        }   // end if            }  
    String Value_condition=""; 
    for (int i = operator_pos; i < position-1; i++) {
        Value_condition = Value_condition + strXPathQuery.charAt(i);
    }  // end for loop 
    strSQLQuery = "SELECT L2.Node_Value \n" +
                  "FROM Leaf_Node L1, Leaf_Node L2, Ancestor_Path P\n" +
                  "WHERE P.Ances_PathExp LIKE '" + strAncestor_Path + "'\n" +
                  "AND L1.Ances_PathID = P.Ances_PathID \n" +
                  "AND L1.Node_Name = '" + Node_condition + "'\n" +
                  "AND L1.Node_Value '".replace("'", "") + Value_condition + "'\n".replace("'", "") +
                  "AND L2.Node_Name = '" + Last_Node + "'\n" +
                  "AND L1.Ances_PathID = L2.Ances_PathID \n" +
                  "AND L1.Ances_Pos = L2.Ances_Pos " ;
    txtSQLQuery.setText(strSQLQuery);
        }
        } 

1 个答案:

答案 0 :(得分:-1)

你有三个看起来可能是O(N^2)。例如。

 for (int i = 0; i < position; i++) {
      ...
      strAncestor_Path = strAncestor_Path + strXPathQuery.charAt(i);
      ...
 }

假设(最坏情况)对于该循环,position的值为strXPathQuery.length() ...或N。这意味着您要将字符附加到相同的字符串N次。由于将字符附加到字符串是O(N)操作。 (附加组件正在创建一个新字符串,复制现有字符串中的所有字符。)执行该N次的复杂性为O(N^2)

平均复杂度可能比这更好,但它取决于输入。

(而且我没有耐心去了解你在这里尝试的东西。你的代码的废话风格让我的眼睛受伤了。)

如果要执行性能,请不要构建类似的字符串。使用StringBuilder

 StringBuilder path = new StringBuilder();

 for (int i = 0; i < position; i++) {
      ...
      path.append(strXPathQuery.charAt(i));
      ...
 }