Qual è l'approccio migliore per trovare elementi nella collezione che soddisfano lo scenario

-2

Ho una collezione di persone. Ogni persona ha una classifica (A, B, C, D dove A massimo e D più basso) e un insieme di abilità (SkillA, SkillB, SkillC, SkillD) definite. Ho anche una serie di requisiti, ad esempio: - 1 persona con grado A - 1 persona con grado B e SkillA - 3 persone con grado C e SkillA e SkillC ecc.

Sto cercando un approccio migliore per verificare se esiste una combinazione di persone nella raccolta che soddisfi i requisiti stabiliti. Una persona non può essere utilizzata per due requisiti.

Sto usando .NET e al momento sto cercando di risolvere il problema con le query LINQ, ma nel frattempo mi interessa se c'è un altro modo per approcciarlo.

    
posta marcinu 25.01.2018 - 14:46
fonte

1 risposta

1

Essenzialmente hai pioli e slot. Il tuo problema è che alcuni peg potrebbero adattarsi a più di uno slot, ma solo una scelta ti permetterà di riempire tutti gli slot.

Vorrei andare con un algoritmo ricorsivo per una prima ricerca di profondità. Che potresti implementare in Linq, ma è probabile che sia più facile digitarla "a mano lunga" come se fosse

Fill(List<slot> slots, List<peg> pegs, string fittedPegs)
{
   if(slots.Count == 0)
   {
        return fittedPegs;//yay we filled them all!
   }
   foreach(var peg in pegs.where(p=>p.Fits(slots[0]))
   {
        fittedPegs += "," + peg.id;
        var r = Fill(slots.Skip(1),pegs.Where(p=>p!=peg), fittedPegs);
        if(r != null) {return r;}
   }
   return null; //cant fit all the pegs :(
}

* non testato

    
risposta data 25.01.2018 - 15:57
fonte

Leggi altre domande sui tag