Ho piccoli vettori. Ciascuno di essi è composto da 10 numeri interi compresi tra 0 e 15. Ciò significa che ogni elemento di un vettore può essere scritto utilizzando 4 bit. Quindi posso concatenare i miei elementi vettoriali e memorizzare l'intero vettore in un singolo tipo long
(in C, C++, java ...)Confronto efficiente di vettori di numeri interi piccoli
Vector v1 domina vettore v2 se per ogni i in 0, ..., 9, v1 [i]> = v2 [i]
Voglio scrivere un metodo compare(long v1, long v2)
che restituirebbe 0 se non dei vettori domina l'altro, 1 se il primo domina e -1 se il secondo domina.
Esiste un modo efficace per implementare un confronto diverso dall'ottenere ogni componente i e fare 10 volte il normale confronto tra interi?
EDIT
se v1 è esattamente lo stesso di v2 ritorno 1 o -1 sono entrambi bene
Se si può assumere X 86-solo allora SSE è probabilmente la strada da percorrere - memorizzare i vettori di 16 x 8 int bit e quindi è abbastanza semplice da implementare il confronto. –
Sei sicuro di aver definito correttamente il problema? Cosa dovrebbe 'confrontare (v, v)' return? Presumo che tu voglia 0 per quello, cioè v1 domina v2 solo se almeno un elemento è più grande? – duncan