El límite de tiempo se ha excedido en la exploración lineal en el hashing.
Estoy aprendiendo cómo implementar la resolución de colisiones lineales en funciones hash. Estoy obteniendo un error de límite de tiempo excedido para el código siguiente, ¿cómo puedo mejorar este código?
vector<int> linearProbing(int hashSize, int arr[], int sizeOfArray)
{
vector<int> hash(hashSize,-1);
for(int i=0;i<sizeofarray;i++){ int="" h="arr[i]%hashSize;" for(int="" j=""></sizeofarray;i++){><sizeofarray;j++){
if(hash[h]==-1 or arr[i]==hash[h]){
hash[h]=arr[i];
break;
}
else
h=(h+1)%hashsize;
}
}
return hash;
}
restricciones:
1 <= hashsize <= 100
1 <= sizeofarray <= 100
0 <= arr[] <= 10^5
límite de tiempo esperado: 2.28s if(hash[h]=”=-1″ or=”” arr[i]=”=hash[h]){” hash[h]=”arr[i];” break;=”” }=”” else=”” h=”(h+1)%hashSize;” }=”” }=”” return=”” hash;=”” }=”” ="" restricciones:="" 1="" <="hashSize" <="100" 1="" <="sizeOfArray" <="100" 0="" <="arr[]" <="10^5" límite="" de="" tiempo="" esperado:=""></sizeofarray;j++){
if(hash[h]==-1 or arr[i]==hash[h]){
hash[h]=arr[i];
break;
}
else
h=(h+1)%hashsize;
}
}
return hash;
}
restricciones:
1 <= hashsize <= 100
1 <= sizeofarray <= 100
0 <= arr[] <= 10^5
límite de tiempo esperado: 2.28s>
davy.ai
Hay algunas cosas que puedes hacer para mejorar el rendimiento del código:
La implementación actual tiene bucles anidados, lo cual puede afectar el rendimiento. En lugar de recorrer el arreglo una y otra vez hasta encontrar una casilla vacía, puedes utilizar la técnica de búsqueda lineal para encontrar la siguiente casilla vacía de una manera mucho más rápida.
Otra forma de mejorar el rendimiento es utilizar una función hash más eficiente. Una buena función hash debe distribuir uniformemente las claves en la tabla hash sin colisiones. Esto reducirá la cantidad de veces que necesitas buscar una casilla vacía.
Si la tabla hash se está llenando, puedes redimensionarla dinámicamente para hacer espacio para más elementos. Esto ayudará a evitar colisiones y mejorar el rendimiento del código.
Finalmente, puedes optimizar el código eliminando cualquier operación innecesaria y utilizando estructuras de datos más eficientes. Por ejemplo, puedes utilizar un arreglo de tipo bool para llevar un seguimiento de qué casillas están ocupadas en lugar de almacenar -1 en la tabla hash. Esto reducirá la cantidad de comparaciones necesarias en el bucle.