2017-09-28 8 views
-1

二次元二重配列メソッドを使用しているときに、mainメソッドで何を書き込むのかをまだ完全に理解していません。 A = {{4.00,3.00}, {2.00,1.00}}B = {{-0.500, 1.500}, {1.000, -2.0000}}の場合、コードの出力が何であるかを知りたいと思います。もし例外がスローされていると仮定すると、複雑な定数O(1)ですが、Big-Oの次のメソッドの複雑さは次のようになります:O(1 + aRows * bColumns + aRows * bColumns * aColumns + 1)?それとも、ただO(aRows * bColumns * aColumns)ですか?Java:2次元配列メソッド - メインメソッドとその複雑さで呼び出す

public class Exercise { 

public static void main(String[] args){ 

} 

public static double[][] m (double[][] A, double [][] B){ 

    int aRows = A.length; 
    int aColumns = A[0].length; 
    int bRows = B.length; 
    int bColumns = B[0].length; 

    if (aColumns != bRows){ 
     throw new IllegalArgumentException("A: Rows: " + aColumns + " did not match B: Columns " + bRows + "."); 
    } 

    double[][] C = new double[aRows][bColumns]; 
    for (int i = 0; i < 2; i++){ 
     for (int j = 0; j < 2; j++){ 
      C[i][j] = 0.00000; 
     } 
    } 

    for (int i = 0; i < aRows; i++){ 
     for (int j = 0; j < bColumns; j++){ 
      for (int k = 0; k < aColumns; k++){ 
       C[i][j] += A[i][k] * B[k][j]; 
      } 
     } 
    } 
    return C; 
} 
} 

答えて

0

2D配列リテラルの構文はJavaで少し面倒ですが、それは一般的にあなたが最も遅いループまたは取得1を見たい、ランダウの記号については

double[][] a=new double[][]{ new double[]{1.0,2.0},new double[]{0.3,0.4}} 

ですループの反復回数を計算します。ただし、各ループで実行される命令の量に注意する必要があるかもしれませんが、連続する各ループの繰り返し回数の合計としてO表記を書くことには何も問題はありません。ただし、両方のループをスキップするので、エラーがO表記で別のケースにスローされるケースを作成したいとします。

+0

ありがとうございました。私はdouble [] [] a = new double [] {] {new double [] {4.00,3.00}、new double [] { - 0.500,1.500}}と書いています。 double [] [] b =新しいdouble [] {] {新しいdouble [] { - 0.500,1.500}、新しいdouble [] {1.000、-2.00000}}; m(a、b);m(a、b);私の主な方法では、それはoutptutを印刷しません。何故ですか? – TeachMeJava2017

+0

@ TeachMeJava2017変数に変数を代入し、配列の内容を出力するコードを記述する必要があります。 'System.out.print()'を使って同じ行に何回も印刷することができます(もし冒険しているなら 'System.out.printf()')、 'System.out.println () '配列の行の間に。 – Haem

+0

だから私はdouble [] [] x = m(a、b)と書いた。 System.out.println(x);それは実際の値ではなく、参照を出力するだけです。[[D @ 7852e922 – TeachMeJava2017

関連する問題