Algoritmo ricostruzione incolonnamento corretto matrice orari

martedì 23 giugno 2015 - 12.12

Mrk31 Profilo | Newbie

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:


479x154 32Kb


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. devo farlo in VB .Net ma 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".

Gluck74 Profilo | Guru

Non ci ho capito un cavolo......

Le considerazioni che fai, sono per riga (giorno) o per colonna (fascia x)????

Puoi fare qualche esempio preciso basandoti sulla foto?
Grazie

____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

Mrk31 Profilo | Newbie

Ciao,
grazie lo stesso, ma ho risolto cambiando completamente grafica...adesso "coloro" un datagridview in corrispondenza della fascia inserita...
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5