【发布时间】:2014-07-18 05:08:23
【问题描述】:
我的代码中有一个库为我生成的复杂浮点数组。考虑它是这样的:
float _Complex data[N];
为了将其视为具有实部和虚部的单独数组,我遍历数组并获取如下值:
float real[N];
float imag[N];
for (int pt=0;pt<N;pt++) {
real[pt] = creal(data[pt]);
imag[pt] = cimag(data[pt]));
}
但这确实是低效的,因为在执行时间和空间方面这是一个O(N) 操作。我想知道是否可以使用一些指针算法来分离数组,从而减少执行时间和内存使用?
我需要分别绘制实值和虚值。我的绘图库 PGPLOT 需要将一组值发送给它,因此我不能“就地”使用复杂的数组。
【问题讨论】:
-
不,如果你想要 O(1),你将需要就地使用它们。
-
我不能就地使用它们。编辑了问题。
-
首先,这真的是C题,还是C++题?你在说什么绘图库?其次,您确定没有办法将数组步幅传递给绘图库吗?也许可以修改您的绘图库以接受一个步幅,那么您根本不必复制数据。
-
我想下一个问题的教训是:抽象出细节只会在一定程度上有所帮助。在这里,你的问题是你预设了一个问题的解决方案,而没有告诉我们问题是什么。这个问题确实与 PGPLOT 库有很大关系,与复杂性理论没有太大关系:)
-
@KubaOber C++ 没有 _Complex
标签: c arrays time-complexity complex-numbers