2016-08-08 3 views
-3

私は関数の時間複雑さの計算を理解しようとしていますが、私はこの時点で固執しています。 の場合はループの場合の場合のループは入力文字列の長さによって異なります。そのような場合の時間複雑度の計算方法while(boolean)の場合のwhileループの複雑さ?

関数が行うこの

BLOCKQUOTE

入力データ:4Gopi7Krishna3Msc5India

出力データ:{"4":"Gopi","7":"Krishna","3":"Msc","5":"India"}

入力データと長さがそれぞれ変化してもよいし、毎回。

public static String SplitData(String input) { 
    try { 
     String outputJSON = "{"; 
     boolean run = true; 
     while (run) { 
      String firstChar = String.valueOf(input.charAt(0)); 
      int length = Integer.parseInt(firstChar); 
      if (length > 0) { 
       String data = input.substring(1, (length + 1)); 
       outputJSON = outputJSON + "\"" + String.valueOf(length) + "\":\"" + data + "\""; 
       if (length + 1 == input.length()) { 
        run = false; 
        outputJSON = outputJSON + "}"; 
        System.out.println("TAG " + length + " LENGTH " + length + " DATA " + data + " INPUT " + input); 
       } else { 
        outputJSON = outputJSON + ","; 
        input = input.substring(length + 1, input.length()); 
        System.out.println("TAG " + length + " LENGTH " + length + " DATA " + data + " INPUT " + input); 
       } 
      } else //IF INPUT IS NOT VALID MAKE THE RETURN JSON NULL 
      { 
       run = false; 
       outputJSON = "Invalid Input"; 
      } 
     } 
     return outputJSON; 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return "Invalid Input"; 
    } 
} 
+0

を機能計算がfor-loopと異なるのはなぜでしょうか?なぜforループは入力長に依存しないと思いますか? – Fildor

+0

こんにちはFildor私の質問は、そのようなn + 1のようにフレームする方法です、私は上記のようなwhileループの場合に行う方法が混乱しています、上記のコードは私が考えていた単なる例です。 – krishna

答えて

0

複雑さは、実行が終了する前の可能な操作の数によって決まります。内部で実行されるものを変更しないと、forループは速くなりません。 この機能は、単に文字列操作を使用して、はるかに簡単かつ迅速であり得る「forループとは異なり、以下のコードに示されているこのwhileループは、入力文字列の長さに依存するであろう。」

public static void main(String args[]){ 


    String s = "4Gopi7Krishna3Msc5India"; 
    String res = ""; 
    String sp[] = s.split("[0-9]+"); 
     res += "{"; 
     for (int i = 0; i<sp.length; i++){ 
      String sss = sp[i]; 
      if(sss.length()==0) 
       continue; 
      res += "\""+sss+"\":\""+Integer.toString(sss.length())+"\"" ; 
      res += (i == (sp.length - 1))?"":",";     
     } 
     res+="}"; 
     System.out.println(res); 
}