Bueno, la forma más rápida de hacerlo es no hacerlo en absoluto.
Suena extraño, lo sé, aquí hay un pseudocódigo:
int array [][];
bool array_is_empty;
void ClearArray ()
{
array_is_empty = true;
}
int ReadValue (int x, int y)
{
return array_is_empty ? 0 : array [x][y];
}
void SetValue (int x, int y, int value)
{
if (array_is_empty)
{
memset (array, 0, number of byte the array uses);
array_is_empty = false;
}
array [x][y] = value;
}
En realidad, todavía está borrando la matriz, pero solo cuando se escribe algo en la matriz. Esto no es una gran ventaja aquí. Sin embargo, si la matriz 2D se implementó usando, digamos, un árbol cuádruple (no una mente dinámica), o una colección de filas de datos, entonces puede localizar el efecto de la bandera booleana, pero necesitaría más banderas. En el árbol cuádruple, simplemente configure la bandera vacía para el nodo raíz, en la matriz de filas simplemente configure la bandera para cada fila.
Lo que lleva a la pregunta "¿por qué quiere poner a cero repetidamente una matriz 2d grande"? ¿Para qué se utiliza la matriz? ¿Hay alguna forma de cambiar el código para que la matriz no necesite puesta a cero?
Por ejemplo, si tuvieras:
clear array
for each set of data
for each element in data set
array += element
es decir, utilícelo para un búfer de acumulación, luego cambiarlo de esta manera mejoraría el rendimiento sin fin:
for set 0 and set 1
for each element in each set
array = element1 + element2
for remaining data sets
for each element in data set
array += element
Esto no requiere que se borre la matriz, pero aún funciona. Y eso será mucho más rápido que borrar la matriz. Como dije, la forma más rápida es no hacerlo en primer lugar.