Supponiamo di avere più array:
var a := [1, 2, 3]
var b := [2, 3, 4, 5]
var c := [1, 3, 4, 6]
var d := [1, 2, 5]
Vogliamo trovare i tre array con il numero cardinale più piccolo quando i tre array sono unificati.
Come programma:
function findMostSimilar(var haystack, var arrayCount) {
var result := ...
// algorithm
return result
}
var setOfArrays := [a, b, c, d]
var result := findMostSimilar(setOfArrays, 3)
Il risultato dovrebbe essere:
result = [a, b, d] //(we only need [1, 2, 3, 4, 5])
C'è un modo efficace per trovare un tale sottoinsieme?
Aggiorna
Come nei commenti suggeriti (grazie amon) il risultato migliore sarebbe l'unificazione di matrici di input che hanno il più piccolo numero cardinale.
Questo è un caso d'uso per MapReduce?
- Mappa: unione di matrici di input
- Combina: ottieni il numero cardinale dell'insieme
- Riduci: ottieni le combinazioni con il numero cardinale più piccolo
Aggiornamento 2
Nel risultato d è incluso perché abbiamo bisogno di trovare tre matrici.
Per un esempio più pratico:
Abbiamo cinque ricette con ingredienti diversi e vogliamo ottenere le tre ricette combinate che richiedono il minor numero di ingredienti generali.
Ho sostituito l'intersezione con l'unione perché l'intersezione era sbagliata (grazie Tyler Durden).