2017-06-07 24 views
3

私はこのコードの複雑さを分析しようとしている。 私は、forループが再帰関数の中でao(n)を取るので、そのo(n^2) を述語としました。わからない 。あなたは総複雑性は、ネストされた複雑さの積であり、並び替える機能がNは、文字列の長さであり、そしてループが呼び出されN回呼び出されることに正しいどのような複雑な関数は複雑なループ内の再帰関数

public class main 
{ 

    static Set<String> setString = new HashSet<>(); 

    public static void main(String[] args) 
    { 
     // TODO Auto-generated method stub 
     main m = new main(); 
     m.permute("sanad", 0); 
     for(String s : setString) 
     { 
      System.out.println(s); 
     } 

    } 


    public void permute(String str , int i) 
    { 
     if (i>=str.length()) 
     { 
      return; 
     } 


     for(int j = 0 ; j < str.length();j++) 
     { 
      StringBuilder b = new StringBuilder(str. replaceFirst(String.valueOf(str.charAt(i)), "")); 
      b.insert(j,str.charAt(i)); 
      setString.add(b.toString()); 
     } 

     permute(str, ++i); 
    } 

} 
+0

文字列のすべての順列をハッシュセットに入れようとしていますか? –

+0

文字列に一意の文字のみが含まれることが保証されていますか?そうでない場合は、プログラムが正しくありません。 – RealSkeptic

+0

@RealSkeptic一意の文字列です。これはセットを使用しているためです。 – user3512497

答えて

6

nも同様であり、ループの呼び出しをもたらす。しかし、ループ内のコードの複雑さ、特にreplaceFirstinsertを調べる必要があります。ランタイムが文字列の長さに依存するかどうかを判断し、それを掛けてください。私はこれが宿題の問題だと思うので、私はこれをあなたに任せます。

+0

ありがとう...いいえ、私がする必要があるものは、この問題をo(n)の複雑さを使って解決することです – user3512497

関連する問題