我正在实现一个名为IntegralImage的类,它有一个2D数组作为实例变量。 2D数组表示高度为第一个索引而宽度为第二个索引的图像。以下代码是否在O(n)时间内构造2D数组,其中n是像素数(高度*宽度)?另外,我不明白内存使用情况究竟是什么以及如何确定它。我必须使用O(n)内存来构造数组。
private final int[][] integralImage;
private final int imageHeight; // height of image (first index)
private final int imageWidth; // width of image (second index)
public IntegralImage(int[][] image) {
imageHeight = image.length;
imageWidth = image[imageHeight - 1].length;
integralImage = new int[imageHeight][imageWidth];
int row,column;
for(row = 0 ; row < imageHeight ; row++)
for(column = 0 ; column < imageWidth; column++)
integralImage[row][column] = image[row][column];
}
答案 0 :(得分:0)
您的执行时间为O(n)
,n
为height * width
。想一想。如果将宽度加倍,则会使执行时间加倍。如果将高度加倍,则会使执行时间加倍。这就是O(n)
的含义。
您的内存占用量为width * height * size_of_int + (height + 1) * array_overhead
(一个外部数组加上每行一个数组)。除了数组的微小开销之外,如果将宽度加倍,则会使内存翻倍。如果你加倍高度,你的内存加倍。所以,O(n)
记忆。