2016-04-04 13 views
-3

コードの作成時間を短縮する方法がわかりません。私の仕事は、ブルートフォースパスワードを中断させることでした。私はパスワードの長さとそれに含まれる文字を知っていました。これまで私はこの方法を持っています。Javaスクリプトの終了に時間がかかります

public boolean moznosti(char [] arr, String pr, int a, int b) { 
    if (b == 0) { 
     char [] heslo = pr.toCharArray(); 
     if(tryOpen(heslo)) { 
      return false; 
     } 
     return true; 
    }  
    for (int i = 0; i < a; i++) { 
      String tmp = pr+arr[i]; 
      if (moznosti(arr, tmp, a, b-1) == false) { 
       return false; 
      } 
      moznosti(arr, tmp, a, b-1); 
    } 
    return true; 
} 

} hesloがパスワードである

。何か案は?

+4

私はあなたの質問は通常より遅く[StackExchangeコードレビューQ&A](http://codereview.stackexchange.com/) – Aziz

+0

再帰関数の=>より適していると考えています。反復的な解決策を実行し、その動作を確認してください。私は2番目の@Aziz。これはコードレビューに行く必要があります。 –

答えて

0

コード構造を見てください。

あなたはmoznostiメソッドを再帰的に呼び出すforループを持っており、同じことをするたびに呼び出されます。

変数の意味はわかりませんが、aとbが4であると仮定します。最初のサイクルでは、同じbパラメータでmoznostiメソッドを4回呼び出します。これは時間の問題を引き起こしていますが、持っていることを

ない:

if (moznosti(arr, tmp, a, b-1) == false) 

moznostiメソッドはブール値を返すので、あなたがもし、それがfalseまたはtrueに等しいだかどうかを確認する必要はありません。ステートメントブラケットは、条件が真の場合にのみ渡されます。だからあなたの場合には、これはより適用される場合があります

if (!moznosti(arr, tmp, a, b-1)) 

は、私はあなたのベースケースをチェックされている場合、ほとんどの時間を取っている部分があると思い

if (moznosti(arr, tmp, a, b-1) == false) 
+0

まあ、単純なブールチェックでは、再帰的な関数呼び出しほど大きな問題は生じません。 –

+0

@DebosmitRay私はそれを必要としないことを指摘していました。 – Porteous96

+0

私はそれがコメントとしてもっと適していると思います:) –

0

私はそれをやっ大丈夫!

public class BruteForceAttacker extends Thief { 
private boolean konec; 

@Override 
public void breakPassword(int sizeOfPassword) { 
    moznosti(getCharacters(), "", getCharacters().length, sizeOfPassword);  
} 

public void moznosti(char [] arr, String pr, int a, int b) { 
    if (konec != true) { 
     if (b == 0) { 
      char [] heslo = pr.toCharArray(); 
      if (tryOpen(heslo)) { 
       konec = true; 
      } 
      return; 
     } 

     for (int i = 0; i < a; i++) { 
       String tmp = pr+arr[i]; 
       moznosti(arr, tmp, a, b-1); 
     } 
    } 
} 

}

関連する問題