2016-08-08 56 views
-3

Ich versuche zu verstehen, Zeit Komplexität Berechnung einer Funktion, aber ich bin an diesem Punkt fest. Im Gegensatz zu für Schleife diese während Schleife im Code unten hängt von der Eingabe String-Länge. Wie berechnet man die Zeitkomplexität für solche Fälle?Zeit Komplexität der while-Schleife im Fall von while (boolean)?

die Funktion macht diese

Blockquote

Eingabedaten:4Gopi7Krishna3Msc5India

Ausgangsdaten:{"4":"Gopi","7":"Krishna","3":"Msc","5":"India"}

Eingangsdaten und kann jede Länge variieren und jedes Mal.

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

„Im Gegensatz zu for-Schleife dieser while-Schleife in dem unten stehenden Code gezeigt auf der Eingangsstringlänge abhängt.“ Warum denken Sie, dass sich die Berechnung von der einer For-Schleife unterscheidet? Warum glaubst du, dass eine For-Schleife nicht von der Eingangslänge abhängt? – Fildor

+0

Hallo Fildor meine Frage ist wie Frame wie n + 1 so, ich bin verwirrt, wie das im Fall von while-Schleife wie oben zu tun, ist der obige Code nur ein Beispiel, an das ich dachte. – krishna

Antwort

0

Komplexität hängt von der Anzahl der möglichen Operationen vor der Ausführung endet, ein for-Schleife nicht schneller sein würde, wenn Sie sich nicht ändern, was im Innern geschieht. diese Funktion könnte viel einfacher und schneller durch nur Manipulationsfunktionen String mit

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); 
}