Il modo ottimale per riprogrammare gli appuntamenti

1

Diciamo che ho i seguenti appuntamenti:

Appointment 1 = 1:00
Appointment 2 = 2:00
Appointment 3 = 3:00
Appointment 4 = 4:00

Ho bisogno di riprogrammare tutte queste un'ora dopo:

Appointment 1 = 2:00
Appointment 2 = 3:00
Appointment 3 = 4:00
Appointment 4 = 5:00

Il problema è che voglio farlo in una sola operazione atomica, ma i tempi degli appuntamenti devono essere unici. Se li gestisco in ordine, allora avrò un errore. Non riesco a pianificare l'appuntamento 1 alle 2:00, perché 2:00 non è un orario aperto. È occupato da Appointment 2.

Gli orari sono memorizzati in una tabella molto semplicemente:

AppointmentId: number,
AppointmentTime: datetime

C'è un vincolo univoco su AppointmentTime.

Preferirei non dover annullare prima tutti gli appuntamenti. Questo è probabilmente quello che finirò per fare, ma sto cercando di evitarlo.

La soluzione semplice è di farlo in ordine inverso. Ma questo è un caso semplice che è ordinatamente ordinato. Le probabilità sono, i dati non sarebbero sequenziali. C'è un modello o un algoritmo che si occupa di questo genere di cose? Trovare la sequenza ottimale per eseguire un'operazione su un elenco di oggetti?

C'è anche il caso in cui voglio pianificare i miei appuntamenti con orari esistenti:

Appointment 1 = 4:00
Appointment 2 = 2:00
Appointment 3 = 3:00
Appointment 4 = 1:00

Non c'è modo di calcolare un ordine che funzionerà qui. È circolare. Ecco perché probabilmente finirò per rinviare tutto. Ma sono ancora interessato a cercare di determinare il percorso ottimale.

Lo sto facendo su Node usando MongoDB.

Qualcuno ha qualche suggerimento?

    
posta Mohair 27.04.2016 - 21:32
fonte

1 risposta

1

No, non c'è nessun algoritmo che non fallirà miseramente in alcuni casi, perché alcune modifiche alla pianificazione legale non possono essere sequenziate senza prima rimuovere una voce. Ecco un esempio:

A: 13:00, one hour
B: 14:00, one hour

reschedule to

B: 12:30, one hour
A: 13:30, one hour

Come vedi, non puoi riprogrammare A in primo luogo, perché ciò sarebbe in conflitto con la fine di B, e non puoi prima riprogrammare B, perché sarebbe in conflitto con l'inizio di A.

Come tale, ci sono solo due opzioni:

  1. non pianificare la pianificazione, quindi riprogrammare e

  2. implementa una riprogrammazione generale di più appuntamenti come una grande azione atomica, calcolando prima la pianificazione risultante, controllando se è ok e poi confermandola.

risposta data 27.04.2016 - 23:26
fonte

Leggi altre domande sui tag