Per veri esperti... algoritmo di calcolo con "ripartizioni"

lunedì 19 maggio 2008 - 17.48

squilibrio Profilo | Expert

Devo creare delle insert partendo da un risultato di una query e ponderando delle insert in funzione del numero di province ottenute nel risultato

un esempio

costante 60 = numero di attività che si posso fare al giorno

100 = elenco di records ritornati dalla select iniziale

3 = mi dice quante province in totale ci sono (province differenti) tra i record ottenuti


quindi ad esempio

60 Roma
30 Milano
10 Torino


60/3 = 20 numero attività al giorno per provincia


(ora inizia il mio problema)

a questo punto devo fare 100 insert con 60 attivita per giorno ma ponderandole per provincia (20 max per provincia al giorno)

quindi il primo giorno

20 Roma
20 Milano
10 Torino

(a questo punto i 10 che mancano per arrivare a 60 giornalieri potrei tralasciarli oppure se vi viene in mente una logica l'ideale sarebbe ripartirli sugli altri)


secondo giorno

20 Roma
10 Milano (se non ho ripartito i 10 avanzati prima)



Quello che non riesco a fare e creare la struttura logica per arrivare alle varie insert... come posso implementare questo algoritmo?

Grazie infinite!

bluland Profilo | Guru

>Devo creare delle insert partendo da un risultato di una query
>e ponderando delle insert in funzione del numero di province
>ottenute nel risultato
>
>un esempio
>
>costante 60 = numero di attività che si posso fare al giorno
>
>100 = elenco di records ritornati dalla select iniziale
>
>3 = mi dice quante province in totale ci sono (province differenti)
>tra i record ottenuti
>
>
>quindi ad esempio
>
>60 Roma
>30 Milano
>10 Torino
>
>
>60/3 = 20 numero attività al giorno per provincia
>
>
>(ora inizia il mio problema)
>
>a questo punto devo fare 100 insert con 60 attivita per giorno
>ma ponderandole per provincia (20 max per provincia al giorno)
>
>quindi il primo giorno
>
>20 Roma
>20 Milano
>10 Torino
>


>(a questo punto i 10 che mancano per arrivare a 60 giornalieri
>potrei tralasciarli oppure se vi viene in mente una logica l'ideale
>sarebbe ripartirli sugli altri)
>
>
>secondo giorno
>
>20 Roma
>10 Milano (se non ho ripartito i 10 avanzati prima)
>
>
>
>Quello che non riesco a fare e creare la struttura logica per
>arrivare alle varie insert... come posso implementare questo
>algoritmo?
>
>Grazie infinite!

Non ho ben capito cosa devi fare!

dopo aver ottuenuto
>60/3 = 20 numero attività al giorno per provincia

con questo numero cosa devi fare?

Ciao

--------------------
Vincenzo PESANTE
System Engineer

squilibrio Profilo | Expert

Allora ... speravo che l'esempio fosse servito :-((

ho un elenco di records, risultato di una query: 100

da questo elenco capisco quante sono le province differenti: 3

sapendo che posso fare 60 attività al giorno e che queste 60 attività devono essere "ponderate" per le province risultato della query (in questo caso 3) dovrò fare circa 60/3 attività per provincia al giorno

io devo creare le insert di ogni giorno, ponderando le province; quindi ogni giorno 60 attività e "circa" 20 per ogni provincia

il problema è che non sempre avrò un numero esatto di province

20 + 20 + 20
20 + 20 + 20
...

ma potrei avere risultati differenti

Io devo trovare una soluzione per ripartire nel modo piu corretto possibile le attività (per provincia) di ogni giorno

Grazie

ridaria Profilo | Expert

ma quale è il peso per il quale devi eseguire la ponderazione?
Credo che il peso di ponderazione sia la grandezza(popolazione) della provincia.
A prescindere dal peso, l'importante è ricevere un numero di attività per provincia che sia un intero! non puoi certo fare 18, 7 insert.

Se ho ben capito, sono i resti che ti creano problemi giusto?
Tipo ti restano 4 attività e tu ti chiedi: a chi le associo?

Se è questo il problema io i resti li distribuirei equamente tra le tre province, ed un eventuale ulteriore resto lo assocerei alla provincia che ha maggior peso rispetto alle altre.
O meglio, i resti li riponderei e quindi riassociabili a ragion veduta, ed eventuali resti li distribuirei equamente, tra le province se è possibile o li assocerei alla provincia con maggior peso.

Ho capito o non ho capito nulla?

Riccardo
Ridaria

squilibrio Profilo | Expert

Si il problema è quello

riempire ogni giorno con 60 attività (valore fisso)

se poi ho 20+20+20 tutto OK

se invece, nei giorni precedenti, ho già esaurito una provincia vorrà dire che il giorno sarà

30 + 30

o

28 + 32

non vorrei complicare troppo il calcolo, mi basta trovare un semplice metodo (anche tramite un compromesso) per riempire le 60 attività del giorno con i risultati della mia query iniziale... anche se le province non sono "perfettamente" ponderate e pesate tra loro

Grazie

luigidibiasi Profilo | Guru

che intendi con ho esaurito una provincia?
Luigi Di Biasi

ridaria Profilo | Expert

ecco e mi sembra che lo abbiamo trovato, distribuisci le attività per provincia mediante la ponderazione, gli eventuali resti li redistribuisci sempre secondo ponderazione, l'eventuale resto indivisibile lo associ alla provincia che pesa di più.

Era questo quello che volevi o no?

Riccardo
Ridaria

squilibrio Profilo | Expert

con "Esaurito la provincia" intendo

dato che ogni giorno posso fare 60 attività (valore fisso, costante)

dato che nella query c'erano 3 differenti tipologie di province (esempio 100 risutati ma appartenenti a 3 province)

ogni giorno devo fare al max 60/3 = 20 province ....

ne farò 20 finchè non avrò "easurito" quelle ottenute dalla query

se ottengo (100 risultati)

50 MI
30 NA
20 TO


Torino verrà "esaurito" il primo giorno (20 Milano, 20 Napoli, 20 Torino)
Napoli verrà "esaurito" il secondo giorno... anzi me ne restano 10 da ripartire sui restanti (dato che Napoli sarebbe 20 primo giorno + 10 secondo giorno ..STOP esaurito)

etc


per quando riguarda la ponderazione, diciamo che non vorrei complicarvi la vita con calcoli troppo complicati, mi basta trovare un compresso che mi consenta di esaurire gli X risultati della query, ripartendoli (nel possibile) per giorno/provincia

squilibrio Profilo | Expert

Scusate... dimenticavo il "grazie" per l'aiuto che mi state dando e per la pazienza!!

bluland Profilo | Guru

>Si il problema è quello
>
>riempire ogni giorno con 60 attività (valore fisso)
>
>se poi ho 20+20+20 tutto OK
>
>se invece, nei giorni precedenti, ho già esaurito una provincia
>vorrà dire che il giorno sarà
>
>30 + 30
>
>o
>
>28 + 32
>

Questo calcolo quindi si prosegue finche non esaurisci tutte le province cioè finche non avrai
60 ?

saluti
--------------------
Vincenzo PESANTE
System Engineer

squilibrio Profilo | Expert

60 per ogni giorno

poi dipende dal risultato della query iniziale

se nella query iniziale ho 360 risultati mi serviranno circa 6 giorni per esaurire tutti gli elementi, al passo di 60 attività al giorno

attenzione però che, fino ad esaurimento, dovrò ponderare di volta in volta le province

quindi nella fase iniziale (con l'esempio delle 3 prov nella query iniziale 60/3) avrò sempre (nei vari giorni)

20 + 20 + 20
20 + 20 + 20
20 + 20 + 20

... poi quando finiranno alcune province i 60 saranno ripartiti tra quelle rimanenti ...

squilibrio Profilo | Expert


provo a fare un altro esempio

costante: 60 attività al giorno

faccio una query su una mia tabella e ottengo 300 risultati

con il mio bel count conto le province univoche ... nei 300 risultati ho 3 province ripartite in questo modo

150 NA
100 MI
50 BG

posso iniziare a creare le insert una per ogni giorno

quanti giorni mi serviranno (circa) ?? 300/60 = 5

quante attività per provincia ??? 60/3 = 20 .... ogni giorno, finche non "esaurisco una provincia"


procediamo

primo giorno, 60 insert
20 NA
20 MI
20 BG



secondo giorno, 60 insert (mi restano 130 NA, 80 MI, 30 BG)
20 NA
20 MI
20 BG


terzo giorno, 60 insert (mi restano 110 NA, 60 MI, 10 BG)
20 NA
20 MI
10 BG ... ne ho solo 10
ne prendo altre 10 tra NA o MI (per arrivare a 60) ... non è un problema mi basta trovare la logica piu semplice (non voglio complicarmi ulteriormente la vita)



quarto giorno, 60 insert (mi restano 85 NA, 35 MI, BG finite)
perchè 85 NA? perchè ne ho tolti 20 a 110 = 90 ed altri 5 di quei 10 famosi che dovevo ripartire
perchè 35 MI? perche ne ho tolti 20 a 60 = 40 ed altri 5 di quei 10 famosi che dovevo ripartire

30 NA
30 MI


quinto giorno, 60 insert (mi restano 55 NA, 5 MI)
....

bluland Profilo | Guru

ok ci sono,
ma se fossero 302 record i due dispari come li gestiresti poi, non è detto da quello che ho capito che tu debba avere sempre multipli di 60..

potresti avere una situazione tipo

60

11 NA
2 MI

?

che succede?

oppure una situazione tipo

302:3?
come si fa con il resto?

alla fine rimarrebbe una citta con 2 o due citta con 1..

Ciao
--------------------
Vincenzo PESANTE
System Engineer

bluland Profilo | Guru

Ricapitolo,

costante = 60

esempio 300 record 3 citta cosi divise

giorni che occorrono => 300 / 60 = 5

numero di attivita per i gioni che occorrono per ogni citta:

150 NA / 5 = 30
100 PA / 5 = 20
50 MI/ 5 = 10

quindi per 5 gg avrai rispettivamente per le 3 citta 30,20,10

Che ne pensi?

--------------------
Vincenzo PESANTE
System Engineer

squilibrio Profilo | Expert

Potrebbe andare bene!

Grazie!!!
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5