Quale algoritmo calcolerebbe le scelte massime tra due set?


11

Dati due vettori di numeri interi di lunghezze forse non uguali, come posso determinare il massimo risultato possibile dall'accumulo scegliendo il massimo tra le coppie di numeri corrispondenti tra i due vettori con zeri extra inseriti nel vettore più corto per compensare la differenza di dimensioni?

Ad esempio, considerare i seguenti due vettori come input:

[8 1 4 5]
[7 3 6]

Le scelte per inserire lo zero e la somma risultante sono:

[0 7 3 6]  => Maximums: [8 7 4 6]  =>  Sum is: 25
[7 0 3 6]  => Maximums: [8 1 4 6]  =>  Sum is: 19
[7 3 0 6]  => Maximums: [8 3 4 6]  =>  Sum is: 21
[7 3 6 0]  => Maximums: [8 3 6 5]  =>  Sum is: 22

Pertanto, in questo caso, l'algoritmo dovrebbe restituire 25.

Potrei farlo con la forza bruta calcolando tutte le permutazioni del posizionamento degli zeri nel vettore più piccolo (come appena fatto sopra), ma questo sarebbe computazionalmente costoso, e peggio nel caso in cui un vettore abbia esattamente la metà delle dimensioni dell'altro.

C'è un modo per calcolare la risposta in tempo lineare proporzionale alla lunghezza del vettore più lungo anche quando i vettori differiscono in lunghezza? In caso contrario, possiamo fare meglio del numero di permutazioni fattoriali scelte?


3
Bel problema, come ti è venuto in mente? Hai qualche scenario realistico in cui l'aggiunta di secondi in posizioni arbitrarie va bene, ma il riordino del secondo vettore non lo è? 0
frafl

2
Sto usando questo per calcolare il massimo risultato di un altro algoritmo di ricerca relativo alla classificazione di due frasi simili tra loro. Corretto, il riordino non è accettabile.
WilliamKF

Ci viene promesso qualcosa sulla differenza tra le lunghezze dei vettori? Nel tuo esempio, c'è solo uno zero mancante. Se sai che il numero di zeri mancanti è piccolo, esistono algoritmi più efficienti (ad esempio, è possibile far funzionare l'algoritmo di programmazione dinamica in tempo lineare, se il numero di zeri mancanti è una costante).
DW

Risposte:


6

Suggerimento: utilizzare la programmazione dinamica. Per ogni , calcolare il modo ottimale per inserire zeri nel prefisso di lunghezza dell'array più piccolo.z,lzl


1
Questo algoritmo viene eseguito in un tempo quadratico, potrebbero essercene di migliori.
Yuval Filmus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.