Scegli un numero di matrici che hanno il numero cardinale più piccolo una volta unificato

1

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?

  1. Mappa: unione di matrici di input
  2. Combina: ottieni il numero cardinale dell'insieme
  3. 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).

    
posta rookonaut 15.06.2015 - 20:31
fonte

0 risposte

Leggi altre domande sui tag