在向阵列添加值的情况下,空间复杂度是多少?



我想在创建数组或向量或任何数据结构时询问空间复杂性;我知道这个数据结构在创建它时占用了内存中的空间。但是,如果那时我循环访问此数据结构以在此数组的每个维度中插入值。它是占用另一个空间还是考虑将值放在已经占用内存空间的数组中。例如:假设创建以下数组,这些数组占用空间复杂度O(1)因为size是常量,并且创建这两个数组在内存中占用常量空间:

value1 = new double[size][size];
value2 = new double[size][size];

然后开始在这些数组中插入值:

Random ra = new Random();
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
double g = ra.nextFloat();
double h = ra.nextFloat();
double m = (double) ((double) Math.round(g * 10) / 10.0);
double n = (double) ((double) Math.round(h * 10) / 10.0);
value1[i][j] = m;
value2[i][j] = n;

我知道我在数组中插入值,这些值占用内存中的空间并且不占用另一个空格。

基元数组在创建后不需要额外的空间。但是,创建一个空的Object数组将仅为引用保留空间。然后,创建要放入数组中的对象将占用各个对象本身的更多内存。

当创建数组或向量或任何数据结构时;我知道这个数据结构在创建它时占用了内存中的空间。

是的

但是,如果那时我遍历此数据结构以在此数组的每个维度中插入值。它是占用另一个空间还是考虑将值放入已经占用内存空间的数组中。

就数组而言,循环中没有更多的分配。由于您的数组已经用于double类型,因此每个单元格都分配了足够的空间来容纳double(8 个字节(。但是,如果是String数组或任何其他引用类型,情况会有所不同。数组将仅保存引用(已经为其分配的空间(,但我们需要更多的空间来容纳实际String

假设创建以下数组,这些数组占用空间

复杂度 O(1(,因为大小是常数,并且创建这两个数组在内存中占用常量空间:

size是否恒定取决于手头的问题。在许多情况下,我认为sizen的,因此您的数组将O(n^2)。一般来说,如果一个值的大小不依赖于输入的大小,我们说它就是恒定的。因此,如果无论输入如何,您都将始终拥有一个包含 100*100 个元素的数组,那么它就是O(1).

最新更新