我被告知要編寫如下算法 有三個數組A [],B [],C []具有相同的大小N.找出所有可能的(i,j,k),使得A [1] + B [j]的= C [k]的。最大允許時間複雜度爲O(N^2)。繼是我爲輸出編寫的算法(N^2)更快的算法
#include<stdio.h>
#define MAX 1000
struct sum
{
int result;
int i;
int j;
};
int main()
{
struct sum sum_array[MAX];
int n=4;
int a[] = {4,1,2,5};
int b[] = {1,7,6,0};
int c[] = {11,3,8,2};
int k;
int i,j;
for(i=0;i<MAX;i++)
sum_array[i].result=-1;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
sum_array[a[i]+b[j]].result=a[i]+b[j];
sum_array[a[i]+b[j]].i=i;
sum_array[a[i]+b[j]].j=j;
}
}
for(k=0;k<n;k++)
{
if(sum_array[c[k]].result==c[k])
{
printf("<i,j,k> = <%d,%d,%d>\n",sum_array[c[k]].i,sum_array[c[k]].j,k);
}
}
return 0;
}
我的問題是怎麼做的更快呢?任何O(N * logN)或更好的算法呢?
問候, 阿爾卡
您是否在尋找所有可能的(i,j,k)?或者你只是想找到一個三重?你的數組數據是不同的? – 2012-04-06 13:42:27
您的代碼找不到*全部*組合。如果有多於一對的{i,j}給出相同的總和,那麼你只能捕獲其中的一個。 – 2012-04-06 13:43:00
另外你目前的解決方案是完全錯誤的。它有太多的錯誤。 – 2012-04-06 13:50:41