假設您有一些包含整數的未排序數組。你的工作是創建數組的總和。總和必須從每個陣列包含正好一個值,即(3個陣列)從大數據集的m個數組元素中提取n個最低總和
sum = array1[2]+array2[12]+array3[4];
目標:您應輸出20個的組合產生最低可能的和。
下面的解決方案是禁用的,因爲算法需要能夠處理10個可以包含大量整數的數組。以下解決方案的方式,對於大數量的陣列太慢:
//You already have int array1, array2 and array3
int top[20];
for(int i=0; i<20; i++)
top[i] = 1e99;
int sum = 0;
for(int i=0; i<array1.size(); i++) //One for loop per array is trouble for
for(int j=0; j<array2.size(); j++) //increasing numbers of arrays
for(int k=0; k<array3.size(); k++)
{
sum = array1[i] + array2[j] + array3[k];
if (sum < top[19])
swapFunction(sum, top); //Function that adds sum to top
//and sorts top in increasing order
}
printResults(top); // Outputs top 20 lowest sums in increasing order
你會怎麼做更有效地實現正確的結果(以較低的大O符號)?
開始排序三個陣列 – MerickOWA 2014-09-22 12:04:31
味道像家庭作業 – 2014-09-22 12:16:05
沒有不做作業。在我正在開發的軟件中簡化流程。我提出了這樣的問題,使其更具可讀性。 (另外我是老師,所以這可能是爲什麼它聞起來像作業);) – user2820246 2014-09-22 12:18:44