Domanda

In sostanza sto cercando una soluzione che restituisce se una data combinazione corrisponde a un dato insieme.

Esempio: Ho un array che memorizza quale computer locale e che sul posto di lavoro ha che le apparecchiature. Ho bisogno di sapere se un determinato numero di utenti con esigenze specifiche in grado di inserirsi nella sala computer o meno. L'indice è il numero di posto di lavoro nel mio esempio.

$aComputerRoomEquipment = array();
$aComputerRoomEquipment[1] = array("PC");
$aComputerRoomEquipment[2] = array("PC");
$aComputerRoomEquipment[3] = array("PC", "Scanner");
$aComputerRoomEquipment[4] = array("PC", "Printer");
$aComputerRoomEquipment[5] = array("PC", "Scanner", "Printer");
$aComputerRoomEquipment[6] = array("PC");
$aComputerRoomEquipment[7] = array("PC", "Scanner", "Printer");
$aComputerRoomEquipment[8] = array("PC");

ho bisogno di rispondere alla seguente domanda: se ho due utenti che hanno bisogno di uno scanner, e ho tre utenti che necessitano di una stampante, si inseriscono nella mia stanza computer o non

?

Una semplice somma di tutti gli immobili non funziona, dal momento che se ho messo tre persone nella stanza che hanno bisogno di una stampante, non ci sarebbe alcun posto di lavoro a sinistra per il povero ragazzo che ha bisogno dello scanner.

Ho già pensato di iterazione attraverso tutte le possibili combinazioni, ma il più grande è il numero di posti di lavoro è, più tempo ci sarebbe voluto e, eventualmente, prendere sempre per completare.

È stato utile?

Soluzione

Quando ho letto prima questo, puzzava come un problema NP-completo --- e ha ancora quel profumo.

Ma mi piace la risposta di Ólafur Waage.

Se si prende gli utenti uno alla volta, allora si può risolvere il problema. vale a dire mettere il primo utente per arrivare alla stazione di lavoro che ha proprio quello di cui hanno bisogno, o se non v'è alcuna forma --- cioè. l'utente successivo "ha bisogno di una stampante, ma l'unica workstation sinistra con una stampante dispone già di uno scanner", poi andare avanti e metterli sul posto di lavoro con la stampante e lo scanner.

Se questo non è ciò che si vuole --- se effettivamente, si sta progettando un giorno prima per gli utenti che stanno per utilizzare la sala per l'intera giornata, e ciò che si vuole sapere è "fattibile o no" --- -allora io suggerirei di dare un'occhiata al http://en.wikipedia.org/wiki / NP-completo prima di spendere troppo tempo su questo.

Altri suggerimenti

Che ne dite se si aggiunge che cosa hanno bisogno in seguito, in modo che quando si aggiunge persona 1 nella stanza. Si vede che ha bisogno di una stampante, si aggiunge una stampante in una nuova gamma di persone all'interno della stanza e quello che hanno attualmente.

Quindi, quando si aggiunge una nuova persona, di controllare lo stato corrente, senza la necessità del popolo.

Stai parlando multinsiemi, non semplici set. In ogni caso, se, come nel l'unico esempio si dà, tutti nella stanza ha bisogno di una singola risorsa, e le questioni solo due risorse, la vita è incredibilmente facile: sorta l'array attrezzature da parte di ricchezza (scanner sola stampante-only, sia - voci che offrono né non contano!), assegnare come molti uno-risorse-solo come min (availble, richiesto) per ogni risorsa (e rimuovere i richiedenti corrispondenti), la risposta è finalmente "sì" se il numero di "both- risorse" attrezzature a sinistra è> = il numero di richiedenti a sinistra.

Se è possibile specificare con maggiore chiarezza quali classi di problemi che vogliono risolvere, la risposta può essere affilata di conseguenza (senza alcun vincolo, sarà sicuramente un problema NP-completo, come un'altra risposta suggerito - ma, abbastanza vincoli possono rendere computazionalmente fattibile!).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top