将一段伪代码翻译成C
我有一段代码,我想用C重写。目的是将矩阵A和B相乘将一段伪代码翻译成C,c,pseudocode,C,Pseudocode,我有一段代码,我想用C重写。目的是将矩阵A和B相乘 for i := 1 to n do for j := 1 to n do begin C[i,j] := 0; for k := 1 to n do C[i,j] := C[i,j] + A[i,k]*B[k,j] end; 我翻译成C: int main(int argc, const char * argv[]) { int n = 2; //for
for i := 1 to n do
for j := 1 to n do
begin
C[i,j] := 0;
for k := 1 to n do
C[i,j] := C[i,j] + A[i,k]*B[k,j]
end;
我翻译成C:
int main(int argc, const char * argv[])
{
int n = 2; //for testing
int i = n;
int j = n;
int k = n;
int A[i][k];
int B[k][j];
int C[i][j];
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
C[i][j]=0;
for (int k=0; k<n; k++)
{
C[i][j] = C[i][j]+A[i][k]*B[k][j];
printf("A[%d][%d]*B[%d][%d]\n", i, k, k, j);
}
printf("\n");
}
}
}
int main(int argc,const char*argv[]
{
int n=2;//用于测试
int i=n;
int j=n;
int k=n;
int A[i][k];
int B[k][j];
INTC[i][j];
对于(inti=0;i您的伪代码也是O(n^3),因此在翻译中没有任何错误
开头和结尾最有可能显示第二个for语句的范围(我认为缩进已经足够了,但对于有其他语言背景的人来说可能并不自然。)您的伪代码也是O(n^3),因此翻译中没有任何错误
开头和结尾最有可能显示第二个for语句的范围(我认为缩进已经足够了,但对于有其他语言背景的人来说可能不太自然)。看起来很像Pascal
vsC
for i := 1 to n do
for j := 1 to n do
begin
C[i,j] := 0;
for k := 1 to n do
C[i,j] := C[i,j] + A[i,k]*B[k,j]
end;
“begin和end”是与“{”和“}”等价的Pascal
for(i=1;i看起来很像Pascal
vsC
for i := 1 to n do
for j := 1 to n do
begin
C[i,j] := 0;
for k := 1 to n do
C[i,j] := C[i,j] + A[i,k]*B[k,j]
end;
“begin和end”是与“{”和“}”等价的Pascal
for(i=1;i为什么不应该得到n^3个输出?毕竟,您正在运行printf
n^3次。此外,您正在打印A
。我想您想要打印C
。对吗?因此,即使您的处理需要n^3
,当您完成后,您也可以遍历C
中的所有值(N^2
)并将其打印出来。我的问题是,两个矩阵相乘是否必须是O(N^3)?它看起来像C[I][j]被赋予一个新元素n^3次,而C中有n^2个元素。我理解为什么/如何输出n^3,但对将矩阵a和B与上述代码相乘的逻辑感到困惑。@stevendao请看。它是O(n^3)我现在明白了,谢谢你。为什么你不应该得到n^3个输出?毕竟你正在运行printf
n^3次。此外,你正在打印A
。我想你想打印C
。对吗?所以,即使你的处理需要n^3
,当你完成后,你也可以检查C
中的所有值(N^2
)并将其打印出来。我的问题是,两个矩阵相乘是否必须是O(N^3)?它看起来像C[I][j]被赋予一个新元素n^3次,而C中有n^2个元素。我理解为什么/如何输出n^3,但对将矩阵a和B与上述代码相乘的逻辑感到困惑。@stevendao看。我现在理解的是O(n^3),谢谢。谢谢,我解决了我的问题。谢谢,我解决了我的问题。