¿Cómo ordenar una matriz multidimensional con respecto a otra matriz también multidimensional en C, C++ o Fortran para miles de millones de puntos de manera rápida?
Tengo un conjunto de datos A como:
cx1, cy1,cz1
cx2, cy2,cz2
cx3, cy3,cz3
cx4, cy4,cz4
cx5, cy5,cz5
cx6, cy6,cz6
cx7, cy7,cz7
cx8, cy8,cz8
.................
Aquí, c representa coordenadas, (x,y,z) para dirección y el número es para los índices de los puntos.
Tengamos otro conjunto de datos B como:
cx7, cy7,cz7,vx7, vy7, vz7
cx3, cy3,cz3,vx3, vy3, vz3
cx8, cy8,cz8,vx8, vy8, vz8
cx2, cy2,cz2,vx2, vy2, vz2
cx5, cy5,cz5,vx5, vy5, vz5
cx4, cy4,cz4,vx4, vy4, vz4
cx1, cy1,cz1,vx1, vy1, vz1
cx6, cy6,cz6,vx6, vy6, vz6
.......................................
Aquí, v es una cantidad, digamos velocidad y, como vemos, el orden es aleatorio.
¿Cómo puedo ordenar los datos B en términos de los datos A de la manera más rápida manteniendo la misma correspondencia de coordenadas y velocidad en el conjunto de datos B ya que el número de puntos de datos está en mil millones?
davy.ai
Un enfoque posible para ordenar el conjunto de datos B en términos del conjunto de datos A sería crear una matriz multidimensional que combine ambos conjuntos y luego ordenar esa matriz en función de los valores en el conjunto de datos A.
Aquí hay un ejemplo de código en C para lograr esto:
En este ejemplo, primero generamos dos arreglos de puntos (
set_a
yset_b
) con coordenadas y velocidades aleatorias. Luego, usamos la funciónqsort
para ordenar el arregloset_b
en función de los valores en el arregloset_a
definiendo una función de comparación (compare_points
) que compara los valorescx
,cy
, ycz
de dos puntos.Tenga en cuenta que la complejidad temporal de este enfoque es O(n*logn), lo que puede tomar mucho tiempo para ordenar un conjunto de datos con miles de millones de puntos. Para hacerlo más rápido, podemos intentar paralelizar el proceso de ordenación o usar un marco de cómputo distribuido como Apache Spark.</stdlib.h></stdio.h>