Newsgroup: it.comp.programmare
Titolo: Bilanciare...

La  mia situazione  e`  questa: ho  una  lista che  devo  spezzare in  N
sottoliste. Ogni elemento della lista  (newsgroup) contiene un campo che
indica gli articoli da processare.   Vorrei creare le sottoliste in modo
che in ognuna di  essa ci sia piu` o meno lo  stesso numero di articoli.
Suggerimenti su come procedere?
TIA
Kronos
-- 
Home: 
http://kronoz.cjb.net
Windows /win'dohz/ n. : thirty-two  bit extension and graphical shell to
a sixteen  bit patch to an  eight bit operating system  originally coded
for a  four bit microprocessor  which was  written by a  two-bit company
that can't stand a bit of competition.

Suggerimenti su come procedere?
Forse non ho capito bene, ma se consideri 10 sottoliste,
avrai N / 10 elementi ciascuna...
--
Andrea Laforgia - walkietalkie(at)
libero.it
http://www.geocities.com/AndreaLaforgia

 avrai N / 10 elementi ciascuna...
Questo e` un elemento della lista:
typedef struct gruppo_ {
	char *nome;
	unsigned long last;
	unsigned long todo;
	struct gruppo_ *next;
} gruppo, *pgruppo;
Il campo che  mi interessa e` todo. Una volta create  le sottoliste puo`
capitare che  in una  ci siamo  1000 articoli, mentre  in un  altra solo
10. Vorrei  invece che  in ogni  sottolista la  somma degli  articoli da
processare (quindi la somma dei vari  todo) fosse piu` o meno la stessa.
Solo che non so come fare...
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Se il  destino di un uomo  e` annegare, anneghera` anche  in un bicchier
d'acqua.
Proverbio yddish

 Solo che non so come fare...
Non capisco, vuoi unire ad una lista con pochi elementi altri eelementi
presi da una lista che ne ha di + facendo in modo che in fondo in tutte le
liste ci sia un numero di articoli circa uguale ? E' cosě ?
Ciao
        Riccardo

 Non capisco[cut]
Ok, mi spiego meglio. La lista  iniziale viene caricata da un file. Ogni
elemento  rappresenta  un  newsgroup. Per  ogni newsgroup  ci  sono  tot
articoli da processare. Questa  lista viene poi suddivisa  in liste piu`
piccole, ciascuna elaborata da un thread diverso. Il problema e` che con
il metodo  di suddivisione che uso  adesso, puo` capitare che  un thread
abbia  1000 articoli,  mentre un  altro solo  una decina. Vorrei  quindi
creare le sottoliste in modo che  ogni thread debba lavorare circa sullo
stesso numero di articoli.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Runtime error 6D at f000:a12f : user incompetente

 stesso numero di articoli.
Ora ho capito perfettamente...
Potresti fare diverse cose :
Dai un numero massimo di articoli da processare per ogni thread. Se il
numero degli articoli è maggiore del numero massimo lanci un'altro thread.
Cioè...se fissi a 200 il numero di articoli massimo e un newsgroup ne
contiene 1000 devi lanciare 5 thread.
Qui però sorge il problema che non puoi fissare il numero massimo di thread
che vengono lanciati. Se vuoi fissare il numero massimo di thread, ad
esempio 100, devi contare prima il numero di articoli per ogni newsgroup e
fissare dinamicamente il numero di articoli per ogni thread in modo che il
numero totale di thread lanciati sia uguale o minore al numero massimo di
thread. Ad esempio puoi fare questo calcolo con questo algoritmo...una
specie di bisezione...(lo sto inventando sul momento):
N = numero di newsgroup
n(i) = numero di articoli nel newsgroup i
A = massimo numero di articoli processati per thread
T = numero massimo di thread
(l'unico problema è che qui T deve essere molto maggiore di N...potresti
processare un massimo numero di newsgroup alla volta e fare l'intero
processo in + passate)
num = numero di thread da lanciare
0 : i = 0
1 : num = num + n(i) / A (divisione intera) ; se il resto di n(i) / A = 0
allora num = num + 1
2 : i = i + 1
3 : se i < N torna al passo 1
4 : se num > T allora A = A * 2; torno al passo 0
5 : fine
Spero che possa andarti bene.
Ciao
        Riccardo

> 1 : num = num + n(i) / A (divisione intera) ; se il resto di n(i) / A = 0
1 : num = num + n(i) / A (divisione intera) ; se il resto di n(i) / A > 0
(sorry ;-))
Ciao
        Riccardo

 Spero che possa andarti bene.
Va bene, grazie. Devo solo adattarlo un po' alle mie esigenze.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Non capisco tutta questa eccitazione per il Multitasking: 
io sono anni che leggo in bagno.