he escrito un fragmento de código en el que un dato:código C - acceso a la memoria/apropiación
unsigned char buf[4096]; // data in chunks of size 4k
unsigned counter[256];
añado seguridad de los datos I/P por cada 3 bytes contiguos y almacenar los ans. ex: temp [4096]; temp [0] = buf [0] + buf [1] + buf [2]; ... hasta 4096
A continuación, se genera un histograma de los resultados de la temperatura utilizando el código:
for(i = 0; i < 4096; i++)
counter[temp[i]]++;
está ordenada El histograma (ordenamiento de burbuja) y luego de arriba se toman 8 valores más recurrentes. El código se ejecuta en el kernel de Linux (2.6.35)
El problema que estoy enfrentando es que si elimino la parte de clasificación, el tiempo necesario para ejecutar el código es muy rápido (6 microsec en mi computadora portátil, medido usando gettimeofday func). Pero después de introducir la clasificación, el proceso se ralentiza en gran medida (44 microsec). La función de clasificación en sí toma 20 microsegundos, no puedo entender por qué el tiempo está aumentando tanto. Hice un análisis de memoria usando Cachegrind, los resultados son normales e incluso intenté desactivar la preferencia, pero aún no muestra ninguna diferencia. Si alguien puede ayudarme aquí. ¡Gracias!
¿Por qué sortear las burbujas? ¿Por qué no 'qsort()'? –
Para obtener 8 valores superiores, no necesita hacer una clasificación completa. P.ej. Heapsort se puede usar para obtener N top values (si se implementa así) y será más rápido que full sort. – osgx
O incluso un tipo de selección http://en.wikipedia.org/wiki/Selection_sort, que se puede detener después de obtener los 8 valores principales. – osgx