Generatore di mappe del corso

1

La mia università elenca la rotazione dei corsi ogni semestre / anno. Pertanto, è possibile prevedere quando verrà insegnata ogni classe.

Sto provando a creare un programma JavaScript (la lingua è irrilevante, in realtà) che consentirà all'utente di selezionare tutti i corsi che vorrebbero prendere, per quanti semestri e il numero massimo (o forse esatto) di classi che hanno Mi piacerebbe prendere durante ognuno di quei semestri.

Quindi, ad esempio, la mia università offre: 12 corsi in autunno (varia tra anni pari e dispari) 10 corsi in primavera (varia tra anni pari e dispari) 6 corsi in estate (varia tra anni pari e dispari) in sostanza, 6 pattern semestrali diversi

Fondamentalmente, l'utente sceglierà i suoi 16 corsi preferiti, inserire 6 semestri, il semestre in cui vorrebbe iniziare e il numero massimo di corsi per semestre. Da lì, vorrei generare tutte le possibili mappe dei corsi che l'utente potrebbe prendere per laurearsi in 6 semestri. Voglio che siano in grado di variare il numero di corsi di ogni semestre - come 3 corsi un semestre, 2 corsi in un altro, ecc. Voglio anche controllare le lezioni precedenti per assicurarmi che le lezioni non siano duplicate, così come garantire che le classi soddisfino i rispettivi prerequisiti.

Il mio istinto dice di andare con la ricorsione per farlo, ma non sono esattamente sicuro di come lo farei.

Finora, sono stato in grado di venire in mente: generare tutti gli insiemi per semestre sulla base di molti corsi che l'utente vorrebbe in quel semestre (se l'utente sceglie 3 corsi per il primo semestre, quindi crea tutti i set di 3 dei 12 corsi). Fallo per ogni semestre. Quindi, passa attraverso tutte queste combinazioni per vedere quali funzionano. Sembra molto inefficiente e lento per me.

Poiché si tratta di Programmers SE, non cerco realmente alcun codice, ma forse un algoritmo o un approccio più efficiente a questo problema. Qualsiasi aiuto sarebbe molto apprezzato. Posso pubblicare un link alla rotazione del corso della mia università, se ciò fosse di aiuto.

    
posta Lathan 26.03.2013 - 04:54
fonte

1 risposta

2

Puoi farlo manualmente, nel qual caso dovrai sicuramente tornare indietro durante una ricerca ricorsiva. Tuttavia, questo tipo di problema è molto complesso e hai un alto rischio che la tua implementazione non sia robusta rispetto a molte modifiche, che inevitabilmente avverranno.

Un approccio più generale a questi problemi è disponibile sotto forma di programmazione dei vincoli (CP). Con CP puoi ridurre il tuo problema a fornire input formattati correttamente e annotare i vincoli, ovvero le restrizioni a cui devono attenersi i percorsi validi.

Quindi, quando pensi al tuo problema, puoi facilmente creare diversi vincoli:

  1. Tutti i corsi obbligatori devono essere inclusi nella soluzione.
  2. Nessun orario del corso (orario, sala, ..) deve sovrapporsi a nessun altro dalla soluzione.
  3. Il numero di semestri richiesti per l'assunzione di tutti i corsi della soluzione non deve superare i 6 semestri.
  4. e così via, e così via

In una soluzione CP annoteresti esattamente questi vincoli come parte del tuo codice e fornirai i corsi disponibili come input, mentre il risolutore di vincoli sottostante (diverse librerie in varie lingue sono disponibili per questi) eseguirà il lavoro per te in modi molto efficienti.

Per modellare cose come "preferisci avere solo 2 corsi nel primo semestre" in questo modo, anche questi 3 o 4 corsi saranno possibili, dovrai cercare i cosiddetti vincoli soft.

    
risposta data 26.03.2013 - 07:33
fonte

Leggi altre domande sui tag