Sono nuovo qui, ma ho trovato una domanda nel mio libro di testo. Sfortunatamente non ha risposte quindi mi chiedevo se qualcuno potesse aiutarmi per favore. La domanda è:Algoritmo migliore per invitare le persone a festeggiare
Ti viene assegnato il compito di diffondere gli inviti all'interno di un'azienda. Hai solo il tempo di parlare con una certa quantità di persone, ma sei sicuro che se inviti qualcuno, inviteranno il loro capo, quella persona chiamerà il suo capo, , e così via, fino al AMMINISTRATORE DELEGATO. Hai mappato l'intera gerarchia aziendale e assegnato un valore a ogni persona, indicando quanto sarebbe utile invitarli. Data questa configurazione e un limite di sul numero di persone con cui puoi parlare, devi calcolare il gruppo di persone ottimale da invitare . Un gruppo ottimale di persone massimizzerà il valore totale di tutte le persone invitate, direttamente o indirettamente, dalla tua selezione.
Ci sarà esattamente una persona, l'amministratore delegato, senza capo nella gerarchia. Tutte le altre alla fine risponderanno a questa persona sulla catena di comando, ma non direttamente su .
È garantito che ogni persona avrà al massimo un capo, ma che il capo può avere un altro a sua volta. Ad esempio, la persona A potrebbe avere un capo B, il cui capo è C, il cui capo è D, il cui capo è l'amministratore delegato. Così influenzando la persona A sarà influenzare automaticamente B, C, D, e il CEO.
Diversi dipendenti possono avere capi in comune nella catena di comando. NON ottieni un valore aggiuntivo per influenzare una persona più di una volta. Ad esempio, se A e B rispondono direttamente all'Amministratore Delegato, e voi influenzate entrambi, riceverete un valore di val (A) + val (B) + val (CEO), non val (A) + val ( ). B) + 2val (CEO).
Dato un numero intero positivo j, selezionare le persone j che alla fine risulterebbero nel valore complessivo massimo.
So che l'approccio forza bruta consiste semplicemente nella ricerca dell'elenco per il valore massimo j volte, ma ciò non è molto utile. Penso che ci sia un approccio di programmazione dinamica, ma il mio tentativo non ha sempre fornito la risposta corretta. Qualsiasi aiuto sarebbe apprezzato!
E 'un po' più complicato di selezione la gente più bassa gerarchicamente parlando: alcuni di loro potrebbero avere un antenato comune! – Rerito
Esattamente - Un approccio che ho provato è stato quello di passare in rassegna questi dipendenti di livello più basso, selezionare il massimo e aggiornare i valori degli altri, ma è comunque estremamente lento e decisamente non ottimale. –
Per chiarire, qual è il limite: il numero di persone che possono partecipare alla festa o il numero di inviti che è possibile scrivere? (Non è lo stesso perché alcune persone vengono invitate indirettamente) –