簡體   English   中英

Java程序計算給定數量矩陣相乘的次數

[英]Java program to calculate the number of ways to multiply a given number of matrices

我被困在弄清楚如何讓我的程序工作。 我跟蹤了我的代碼,但它沒有給我正確的答案!!!! 我試圖在不使用遞歸的情況下解決這個問題。

這是我到目前為止的工作:

    int numberOfWaysToMultiply(int numberOfMatrices){

        in[] myArray = new int[numberOfMatrices];

        int i;  
        myArray[1] = 1;
        myArray[2] = 1;
        int result = 0;

        if(numberOfMatrices >= 3){  
            for( i = 3; i <= numberOfMatrices; i++){    
                result += myArray[i - 1] * myArray[i - 2];
                myArray[i] = result;
            }
        }
        return myArray[numberOfMatrices];

    }

這是我觀察到的。

你有一個最終結果的描述。 你可以使用一些隨機代碼來做一些完全不同的事情。 而且你不知道如何從你所在的地方到達你需要去的地方。

您需要做的是首先手動解決問題。 實際上坐下來,試着弄清楚如何得到f(3)的答案。 對於f(4) 等等。

當你這樣做時,你會發現你不能生成f(n)直到你有f(1), f(2), ..., f(n-1) 您會發現生成其中的每一個都需要所有其他的。

嘗試找出模式。 把它變成評論。 一步步展開。 所以你可以從這個開始:

// f(1) = 1
// f(2) = 2
// for n = 3 to numberOfMatrices
//     find f(n)
// return f(numberOfMatrices)

然后擴展find f(n)位。

// f(1) = 1
// f(2) = 2
// for n = 3 to numberOfMatrices
//     f(n) = 0
//     for i = 1 to n-1
//         f(n) += f(i) * f(n-i)
// return f(numberOfMatrices)

現在你有了一個算法。 將每條評論轉化為代碼,您應該會得到答案。 我不會通過這樣做來完成你的家庭作業,但這應該很簡單。 您將f(n)存儲為myArray[n]等。

順便說一句錯誤警告。 Java 中的數組總是從 0 開始。因此,您需要將f(n)設為myArray[n-1]或者使myArray比現在大 1。

和第一個答案一樣。 只是多打了 2 分鍾 :)

您的實施完全錯誤。 只需檢查您為 numberOfMatrices=4 計算的內容。 首先,您定義了一個太小而無法容納 f(n) 的數組。

int[] myArray = new int[numberOfMatrices];

您有一個包含 4 個元素的數組。 從 myArray[0] 到 myArray[3]。 稍后在 for 循環的最后一次迭代中,您將嘗試設置 myArray[4]。 假設您已更正此行,並聲明

int[] myArray = new int[numberOfMatrices+1];

讓我們遍歷循環,看看會發生什么。

第1步

i = 3, result = 0, myArray = [0,1,1,0,0](不要忘記索引為 0 的元素)。

結果 += myArray[1]*myArray[2] => 結果 = 0 + 1*1 => 結果 = 1

myArray[3] = 結果 => myArray[3] = 1

第2步

i = 4,結果 = 1,myArray = [0,1,1,1,0]

結果 += myArray[2]*myArray[3] => 結果 = 1 + 1*1 => 結果 = 2

myArray[4] = 結果 => myArray[4] = 2

因此,在最后一次迭代之后,您將擁有以下 int 數組:[0,1,1,1,2]

您需要的是以下內容:

int[] f = new int[numberOfMatrices+1];
f[1] = 1;
f[2] = 1;

for(int i = 3; i<=numberOfMatrices; i++){
  for(int k=1; k < i; k++){ // k will be max. i-1
    f[i] += f[k]*f[i-k];
  }
}

您正在嘗試計算 n! (讀作:“n 階乘”或“n 的階乘”)

int f = 1;
for(int i = 1; i<=numberOfMatrices; i++){
  f = f * i;
}
return f;

注意:即使對於numberOfMatrices小值,這也會溢出 Java int

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM