如何使用O(n)内存

时间:2015-09-27 02:18:26

标签: java algorithm multidimensional-array data-structures runtime

我正在实现一个名为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];

}

1 个答案:

答案 0 :(得分:0)

您的执行时间为O(n)nheight * width。想一想。如果将宽度加倍,则会使执行时间加倍。如果将高度加倍,则会使执行时间加倍。这就是O(n)的含义。

您的内存占用量为width * height * size_of_int + (height + 1) * array_overhead(一个外部数组加上每行一个数组)。除了数组的微小开销之外,如果将宽度加倍,则会使内存翻倍。如果你加倍高度,你的内存加倍。所以,O(n)记忆。