Ciao a tutti,
ho un problema e non riesco a trovare un algoritmo per risolverlo.
Ho una matrice contenente degli orari (data e ora) strutturata in questo modo:
Matrice Orari.JPG
Ogni riga rappresenta un giorno della settimana
Le colonne sono divise in 4 fasce orarie ed ogni fascia ha un orario di Inizio ed uno di Fine:
-Ogni fascia può andare da 00:00 a 23:59
-le fasce sono ordinate in modo crescente
-le fasce non possono sovrapporsi ed ovviamente l'orario di inizio deve essere minore a quello di fine, Escluso il caso orario vuoto (00:00 To 00:00).
La matrice però viene "salvata" eliminado le fasce vuote ed allineata a sinistra:
E.G. la riga F1(00:00 To 00:00); F2(11:00 To 12:00); F3(00:00 To 00:00); F4(16:00 To 17:00)
Viene salvata come:F1(11:00 To 12:00); F2(16:00 To 17:00) F3(00:00 To 00:00); F4(00:00 To 00:00);
Avrei bisogno di creare una finzione "inversa" a quella di salvataggio che prenda la matrice salvata e ripristini le fasce vuote visualizzandole incolonnate al posto "giusto":
Ad esempio tutte le fasce 11:00 To 12:00 nella stessa colonna per ogni giorno della settimana
Casi particolari:
- Essendo "ordinate" in modo crescente il valore 00:00 sarà ammesso in una fascia non vuota solamante come valore di inizio
- Le fasce non uguali andrebbero "centrate" secondo la fascia più logica
Es:
--> Ho tutti i giorni (Spesso) la fascia 2 11:00 To 12:00, Un giorno "trovo" una fascia 11:00 To 12:30 la incolonno in fascia 2
--> Ho tutti i giorni (Spesso) la fascia 2 11:00 To 12:00, Un giorno "trovo" una fascia 10:30 To 12:00 la incolonno in fascia 2
Non è indispensabile che l'algoritmo sia ottimo, basta che funzioni.
Ho un paio di spunti che mi sono venuti in mente:
- Se la fascia è completa (No fasce vuote) è già a posto e posso usarla come base/riferimento per le altre
- Altrimenti cerco la fascia più "completa" possibile
- inizio ad incolonnare le fasce Identiche a quella di riferimento
- passo a cercare le fasce con solo l'inizio o la fine uguali a quelle già ordinate
- Come gestisco eventuali conflitti??? (Più ipotesi "plausibili" possibili)
- Una fascia con inizio 00:00 non vuota è sicuramente la "non Vuota" più a sinistra, ma non è' necessariamente la fascia1 (ad esempio se l'orario di fine "matcha" con l'orario di fine di una fascia diversa dalla prima nella "riga di riferimento")
Considerazione analoga per una fascia con fine alle 23:59
Un algoritmo realizzato con queste considerazioni, farebbe computazionalmente "schifo" perchè precorrerrebbe sqriate volte la matrice ed in più non è sicuro/dimostrabile che riesca ad incolonnare tutte le righe.
N.B. non sono interesato al fatto che ricostruisca l'incolonnamento originale, ma quello più logico:
E.G. se la riga di origine fosse incolonnata male la "ricostruzione" mi restituirebbe un incolonnamento diverso, ma più logico.
Vi ringrazio in anticipo per l'aiuto.
P.S. Anche se scrivete in pseudocodice va benissimo.
P.S.2 altra idea, ma che non so come utilizzare di preciso potrebbe essere il tenere traccia di tutte le fasce differenti presenti nella matrice ordinate in ordine crescente per trovare le "simili".