Sto lavorando su un algoritmo che funziona meglio se gli input vengono passati ad esso in un ordine particolare, quindi voglio ordinarli in quel modo. La differenza è abbastanza drastica da prendere in considerazione la possibilità di riordinare l'array.
Considera un array a
con lunghezza n
. Voglio ordinarlo nel seguente modo e restituire la matrice di indici di a
invece dei valori:
Definisco un altro array w
, anche di lunghezza n
. Voglio ordinare in modo che il primo elemento sia il più vicino al primo elemento di w
. Quindi, dal resto degli elementi (escluso quello già ordinato), il secondo elemento è il più vicino al secondo elemento di w
, e così via.
Ad esempio a = {5.5, 6.5, 2.4, 3.1}
, w = {1, 2, 6, 5}
.
2.4
è più vicino a 1
, quindi output[0] = 2
, l'indice di 2.4
.
2.4
è più vicino a 2
, ma già elaborato, quindi scegli 3.1
, output[1] = 3
.
Seguono 0
e 1
, in quest'ordine. 0
viene scelto perché viene prima, sebbene entrambi siano equidistanti.
Quindi, output = {2, 3, 0, 1}
e l'array ordinato saranno sorted = {2.4, 3.1, 5.5, 6.5}
(ogni indice viene utilizzato per trovare l'elemento corrispondente).
Posso solo pensare a forzare questo algoritmo. Ci può essere un modo più efficiente per farlo?