演算法分析最小重量機器設計問題

2021-08-31 04:49:06 字數 935 閱讀 4413

今天想要分析的也是一道用回溯法搜尋排列樹的問題。

1、問題描述:

設某一機器由n個部件組成,每一種部件都可以從m個不同的**商處購得。設w[i][j]是從**商j處購得的部件i的重量,c[i][j]是相應的**,給出總**不超過d的最小重量機器設計。

2、解題思路:

3、演算法設計:

a.部件有n個,**商有m個,分別用w[i][j]和c[i][j]儲存從**商j 處購得的部件i的重量和相應**,d為總**的上限。

b.用遞迴函式backtrack(i)來實現回溯法搜尋排列樹(形式引數i表示遞迴深度)。

① 若cp>d,則為不可行解,剪去相應子樹,返回到i-1層繼續執行。

② 若cw>=sum,則不是最優解,剪去相應子樹,返回到i-1層繼續執行。

④ 用for迴圈對部件i從m個不同的**商購得的情況進行選擇(1≤j≤m)。

c.主函式呼叫一次knapsack(1)即可完成整個回溯搜尋過程,最終得到的sum即為所求最小總重量。

4.演算法時間複雜度:

程式中最大的迴圈出現在遞迴函式backtrack(i)中,而此函式遍歷排列樹的時間複雜度為o(n!),故該演算法的時間複雜度為o(n!)。

5.

#include

#define n 1000

using namespace std;

int n,m,d,cp=0,cw=0,sum=0;

int c[n][n],w[n][n];

void backtrack(int i)

for(int i=1;i<=n;i++)

for(int j=1;j<=m;j++)

cin>>w[i][j];

backtrack(1);

cout

return 0;

}

演算法分析最小重量機器設計問題

今天想要分析的也是一道用回溯法搜尋排列樹的問題。1 問題描述 設某一機器由n個部件組成,每一種部件都可以從m個不同的 商處購得。設w i j 是從 商j處購得的部件i的重量,c i j 是相應的 給出總 不超過d的最小重量機器設計。2 解題思路 3 演算法設計 a.部件有n個,商有m個,分別用w i...

最小重量機器設計問題

最小重量機器設計問題 設某一機器由 n個部件組成,每一種 都可以從 m個不同的 商處購得。設 wij是從 商 j處購得的部件 i的重量,cij是相應的 試設計乙個演算法,給出總 不超過 d的最小重量機器設計。樣例輸入 3 3 4 1 2 3 3 2 1 2 2 2 1 2 3 3 2 1 2 2 2...

最小重量機器設計問題

問題描述 設某一機器由n個部件組成,每一種 都可以從m個不同的 商處購得。設wij是從 商j處購得的部件i的重量,cij是相應的 試設計乙個演算法,給出總 不超過d的最小重量機器設計。題目型別 回溯演算法 如下 該題traceback num 中num代表的是第幾個部件 include int n,...