DOMANDA VB2010 Velocita Array vs Variabili

Filippo90

Utente Attivo
212
1
CPU
i7 950
Scheda Madre
Gigabyte X58-USB3
HDD
SSD 180 GB + HD 2 TB + HD 3 TB
RAM
Corsair Vengance 12GB 1600mhz
GPU
R9 280X Toxic
Monitor
ASUS VW220TE 22" Widescreen
PSU
Corsair 850w
Case
Cooler Master Centurion II Advanced
OS
Windows 7 x64
salve,
ho sviluppato un'applicazione che svolge molti calcoli. per portare ad termine una ricerca impiega circa 7 ore (i7 950).
per effettuare queste combinazioni ho utilizzato gli Array, anche perche se utilizzo una variabile per ogni campo dell'array avrei scritto un papiro!
Siccome 7ore non sono poche, volevo sapere se magari con fatica riuscissi a usare variabili normali anziche array l'applicazione si velocizzasse nei calcoli, e di quanto..
 
D

deleted_98961

Ospite
Ciao,
salve,
ho sviluppato un'applicazione che svolge molti calcoli. per portare ad termine una ricerca impiega circa 7 ore (i7 950).
per effettuare queste combinazioni ho utilizzato gli Array, anche perche se utilizzo una variabile per ogni campo dell'array avrei scritto un papiro!
Siccome 7ore non sono poche, volevo sapere se magari con fatica riuscissi a usare variabili normali anziche array l'applicazione si velocizzasse nei calcoli, e di quanto..
Visual Basic non lo conosco.
Ma il tempo di calcolo è una questiona spinosa, soprattutto il tempo che dici è quasi inutile come paragone di "efficienza".

Se veramente vuoi rendere migliore il tuo programma devi essere più specifico:
- che genere di "calcoli" esegue il tuo programma
- utilizzi algoritmi particolari per risolvere determinati problemi, utilizzi algoritmi di che complessità (se conosci cosa sia)

se ci dici di che si tratta possiamo aiutarti a trovare strutture dati migliori per il tuo problema, se ci sono. :)

EDIT:
aggiungo che con "inutile", corrisposto al tempo, è inteso come significato da prendere così com'è. Cioè se un programma ci impiega 7 ore può significare molte cose (e anche nulla):
- hai utilizzato algoritmi di complessità alta, algoritmi che con i tuoi dati hanno tempo pessimo
- fai utilizzo massiccio di scritture dati
- il tuo programma fa calcoli su molti di dati
...
comprendi del perchè devi dire di più, la tua richiesta sugli array potrebbe essere ininfluente sul tempo se utilizzi algoritmi di complessità alta (se non esponenziale dal risultato di 7 ore)...
 
Ultima modifica da un moderatore:

pabloski

Utente Èlite
2,868
916
Non ci guadagni nulla nell'usare semplici variabili. I tempi di accesso al contenuto sono sempre gli stessi. Il problema è che, se ho capito bene, tu fai ricerche all'interno di una gran quantità di stringhe e le fai nel modo più banale possibile, cioè tramite ricerca lineare.

Un metodo del genere è infattibile per questo tipo di applicazione. Dovresti pensare seriamente di usare l'hashing.
 

Filippo90

Utente Attivo
212
1
CPU
i7 950
Scheda Madre
Gigabyte X58-USB3
HDD
SSD 180 GB + HD 2 TB + HD 3 TB
RAM
Corsair Vengance 12GB 1600mhz
GPU
R9 280X Toxic
Monitor
ASUS VW220TE 22" Widescreen
PSU
Corsair 850w
Case
Cooler Master Centurion II Advanced
OS
Windows 7 x64
I cacoli sono semplici, fa delle addizzioni e moltiplicazioni. Il tutto è abbastanza difficile da spiegare perchè è abbastanza complesso.
All'avvio carico da un file di testo dei dati, che sono tutti numeri. Il file pesa circa 3mb.

Ogni riga ha 50 numeri (sono i numeri sui quali vengono effettuate le operazioni)
Questi 50 numeri vengono sommati/sotratti al numero che ne viene dopo, facendo tutte le combinazioni possibili con questi 50numeri.
Esempio

Num1+Num2
Num1+Num3
Num1+Num4
...
Num2+Num3
Num2+Num4

Inoltre vengono provati alla somma dei due numeri valori da 1 a 100, risulterebbe cosi il calcolo

Num1+Num2+100
Num1+Num3+100
...

Se il risultato rispetta delle condizioni come per esempio maggiore/minore di x, viene salvato in un Array.
Questo array viene dopo usato per fare delle altre verifiche. Questo array rappresenta una lista cosi strutturata:

id Num1 Num2 etc

Le combinazioni che vengono eseguite sono circa 250.000 se non erro.



Fatto cio, devo prendere i dati che sono stati salvati sul nuovo array e verificare la lista generata con i record successivi all' ID della medesima lista.

Es.:
100 num num num Generato da 250000 calcoli
78 num num num Generato da 250000 calcoli
67 num num num ...
50 num num num ...

prendo i numeri della prima riga controllo se sui record tra 101 e 110 vengono o meno trovati i valori del record 100.
Se non vengono trovati una variabile viene incrementata di 1.
prendo i numeri della seconda riga e controllo se vengono trovati o meno nei record compresi tra 79 e 88 e incremento di 1 la variabile se non vengono trovati
cosi via.

I dati vengono verificati anch'essi tramite un array che di volta in volta carica ogni riga da un'altro file di testo. Quindi stando a l'esempio sopra riportato viene caricato il record 101 viene eseguita l'operazione di verifica e lo stesso con i record fino a 110. Incremento di 1 la variabile
e lo stesso da 79 a 88

Ho cercato di essere piu chiaro possibile, ma mi rimane difficile anche spiegarlo dato che è un anno e mezzo che sto sviluppando questo software. Il problema nell'esporre è che risulta complicato spiegare il tutto, potrei scriverci un libro! Questo è il succo centrale, ma all'interno ci sono altre e molteplici piccolezze. Si puo ritenere proprio una mini mini bozza.
 
Ultima modifica:

cawletto

Utente Attivo
475
25
CPU
i5 750
HDD
1 TB
RAM
6 GB
GPU
GXT 460 SE 1GB overclocked
Monitor
Samsung LCD 1280x1024
PSU
Cooler Master Silent Pro M 600 W
Case
HP
OS
Windows 7-64 bit
Da quello che capisco sono operazioni molto semplici. L'unico modo è quello di ridurle se possibile, tuttavia solo tu conosci l'algoritmo nel dettaglio quindi dovresti vedere se ci sono operazioni 'superflue'.. Potremmo aiutarti di più se ci facessi capire lo scopo dell'algoritmo perchè così possiamo darti consigli molto generici..
 
D

deleted_98961

Ospite
Da quello che capisco sono operazioni molto semplici. L'unico modo è quello di ridurle se possibile, tuttavia solo tu conosci l'algoritmo nel dettaglio quindi dovresti vedere se ci sono operazioni 'superflue'.. Potremmo aiutarti di più se ci facessi capire lo scopo dell'algoritmo perchè così possiamo darti consigli molto generici..
concordo con cawletto.
Se non dici lo scopo (o scopi multpli) di questo programma, e soprattutto se utilizzi algoritmi particolari, che fanno quei "calcoli", è superfluo il tuo discorso e non possiamo dirti nulla di sensato riguardo la tua applicazione.
 

Filippo90

Utente Attivo
212
1
CPU
i7 950
Scheda Madre
Gigabyte X58-USB3
HDD
SSD 180 GB + HD 2 TB + HD 3 TB
RAM
Corsair Vengance 12GB 1600mhz
GPU
R9 280X Toxic
Monitor
ASUS VW220TE 22" Widescreen
PSU
Corsair 850w
Case
Cooler Master Centurion II Advanced
OS
Windows 7 x64
la domanda che volevo fare con questo topic è se la gestione con gli Array affatica l'esecuzione del codice e/o se con variabili standard si diminuisse il tempo di esecuzione di questo tipo di codice
 
D

deleted_98961

Ospite
la domanda che volevo fare con questo topic è se la gestione con gli Array affatica l'esecuzione del codice e/o se con variabili standard si diminuisse il tempo di esecuzione di questo tipo di codice
io ripeto che il tempo di esecuzione del codice è dipeso dagli algoritmi che utilizzi. L'accesso è un qualcosa di minore se non memorizzi i dati in modo intelligente, per rendere l'accesso efficiente. Ma avrai fatto le tue considerazioni prima di scrivere il codice, nella fase di progettazione.

Come penso tu intenda "utilizzo di variabili" (un elenco numerabile) renderà il codice illeggibile per te.
 
Ultima modifica da un moderatore:

cawletto

Utente Attivo
475
25
CPU
i5 750
HDD
1 TB
RAM
6 GB
GPU
GXT 460 SE 1GB overclocked
Monitor
Samsung LCD 1280x1024
PSU
Cooler Master Silent Pro M 600 W
Case
HP
OS
Windows 7-64 bit
No, nel tuo caso il tempo dipende dall'algoritmo e non dall'uso delle variabili..come ha già sottolineato **** del resto :)
 
Ultima modifica da un moderatore:

Filippo90

Utente Attivo
212
1
CPU
i7 950
Scheda Madre
Gigabyte X58-USB3
HDD
SSD 180 GB + HD 2 TB + HD 3 TB
RAM
Corsair Vengance 12GB 1600mhz
GPU
R9 280X Toxic
Monitor
ASUS VW220TE 22" Widescreen
PSU
Corsair 850w
Case
Cooler Master Centurion II Advanced
OS
Windows 7 x64
Ho risolto utilizzando 2 thread a operazione, 4 in totale
bhè devo dire che cappa quasi la CPU ma ho avuto un miglioramento del 70% in fatto di tempo!

Putroppo gli algoritmi sono stati semplificati al massimo, ora non vedo altro modo di riscriverli!
 
D

deleted_98961

Ospite
Ho risolto utilizzando 2 thread a operazione, 4 in totale
bhè devo dire che cappa quasi la CPU ma ho avuto un miglioramento del 70% in fatto di tempo!
sì questo è un po' barare :)
non hai risolto comunque il problema di efficienza dei tuoi algoritmi, ma se ti va bene questo tempo tant'è, unica cosa: attento alla concorrenza.


Putroppo gli algoritmi sono stati semplificati al massimo, ora non vedo altro modo di riscriverli!
non è tanto la semplificazione, ma utilizzare quelli migliori per il tuo caso.

mi son riletto un attimo il tuo post di descrizione dell'applicazione. Ho fatto qualche calcolo e il numero di operazioni che dici non torna.

Le prime operazioni fino al confronto con variabile x ha una complessità di O(l(n^2 + pn)) con l linee file, n numeri per linea e p numeri dell'intervallo [1,100].
mi pare che per linea son 50^2 + p50 operazioni se prendiamo che utilizzi p=2 cioè solo due numeri di intervallo [1,100] avrai 2600 operazioni di costo costante O(1).
se dici che hai un file di 3mb, e mettiamo che hai numeri tutti interi senza segno del massimo rappresentabile (ceil(log{10,2^32-1})=10) ed ogni cifra occupa 1 byte: avrai circa (3*1024*1024)/(10*50) = 6291 linee

perciò il tuo primo pezzo di codice compirà 6291*2600 =16.356.600 operazioni :)

per il resto quello che chiami id: è un valore hash? che utilizzi come valore chiave per le tue liste, che tipo di liste utilizzi, hai un ordinamento particolare su tali chiavi.

se vorrai siam qui, basta che dici le strutture dati in gioco :)

EDIT:
mi son accorto di una cosa sul perchè te dici di avere ben 250000 operazioni per linea.
Te ti memorizzi le combinazioni della prima tranche di confronti? cioè:

primo pezzo ti fai:
Num1+Num2
Num1+Num3
Num1+Num4
...
Num2+Num3
Num2+Num4

questi dati li memorizzi? se No! ne riparliamo, renderai il tutto molto più efficiente con un array lineare di n^2 elementi con due iteratori per accedere alle operazioni di confronto con i numeri dell'intervallo [1,100].

es.
- numero op senza mem con 100 numero di intervallo [1,100] = 127500 (il tuo caso).
- numero op con mem con 100 numero di intervallo [1,100] = 6275

ben diversa la cosa se poi moltiplicata per ogni linea.

cmq vedi te.
 
Ultima modifica da un moderatore:

Filippo90

Utente Attivo
212
1
CPU
i7 950
Scheda Madre
Gigabyte X58-USB3
HDD
SSD 180 GB + HD 2 TB + HD 3 TB
RAM
Corsair Vengance 12GB 1600mhz
GPU
R9 280X Toxic
Monitor
ASUS VW220TE 22" Widescreen
PSU
Corsair 850w
Case
Cooler Master Centurion II Advanced
OS
Windows 7 x64
sì questo è un po' barare :)
non hai risolto comunque il problema di efficienza dei tuoi algoritmi, ma se ti va bene questo tempo tant'è, unica cosa: attento alla concorrenza.



non è tanto la semplificazione, ma utilizzare quelli migliori per il tuo caso.

mi son riletto un attimo il tuo post di descrizione dell'applicazione. Ho fatto qualche calcolo e il numero di operazioni che dici non torna.

Le prime operazioni fino al confronto con variabile x ha una complessità di O(l(n^2 + pn)) con l linee file, n numeri per linea e p numeri dell'intervallo [1,100].
mi pare che per linea son 50^2 + p50 operazioni se prendiamo che utilizzi p=2 cioè solo due numeri di intervallo [1,100] avrai 2600 operazioni di costo costante O(1).
se dici che hai un file di 3mb, e mettiamo che hai numeri tutti interi senza segno del massimo rappresentabile (ceil(log{10,2^32-1})=10) ed ogni cifra occupa 1 byte: avrai circa (3*1024*1024)/(10*50) = 6291 linee

perciò il tuo primo pezzo di codice compirà 6291*2600 =16.356.600 operazioni :)

per il resto quello che chiami id: è un valore hash? che utilizzi come valore chiave per le tue liste, che tipo di liste utilizzi, hai un ordinamento particolare su tali chiavi.

se vorrai siam qui, basta che dici le strutture dati in gioco :)

EDIT:
mi son accorto di una cosa sul perchè te dici di avere ben 250000 operazioni per linea.
Te ti memorizzi le combinazioni della prima tranche di confronti? cioè:

primo pezzo ti fai:
Num1+Num2
Num1+Num3
Num1+Num4
...
Num2+Num3
Num2+Num4

questi dati li memorizzi? se No! ne riparliamo, renderai il tutto molto più efficiente con un array lineare di n^2 elementi con due iteratori per accedere alle operazioni di confronto con i numeri dell'intervallo [1,100].

es.
- numero op senza mem con 100 numero di intervallo [1,100] = 127500 (il tuo caso).
- numero op con mem con 100 numero di intervallo [1,100] = 6275

ben diversa la cosa se poi moltiplicata per ogni linea.

cmq vedi te.

Grazie per la risposta!
Allora se riesco a semplificare il tutto come dici tu ne srei piu contento!
Le righe del file di testo sono circa 8500, comprendono la data di rilevazione e i 50numeri
L'ID (come lo chiamo io) è un valore che attribuisco io come chiave, sono tutti progressivi!
Per quanto riguarda i numeri del file di testo, li carico tutti su un array e leggo riga per riga, sempre tramite array. La cosa importante è che durante le operazioni è importante conoscere la posizione del numero che carico.
Esempio:
Righe(90000) con tutte le righe ordinate caricate dal file di testo
Numeri(50) contiene i 50 numeri
Caricando la riga(1) l'Array numeri verra aggiornato con i 50 numeri presenti nel file di testo.
La cosa importante è che durante i calcoli necessito di conoscere la posizione attuale dell'array Numeri.


Questa è la lista su cui andro a lavorare e i calcoli che vengono effettuati
Num1+Num2+1
Num1+Num2+2
Num1+Num2+3
Num1+Num2+4
...
Num1+Num3+1
Num1+Num3+2
Num1+Num3+3
Num1+Num3+4
...
Num2+Num3+1
....
Num2+Num4+1
...
Num30+Num31+1
Num30+Num31+2
Num30+Num31+3
...

viene memorizzato solo se rispetta una certa condizione legata all'opearzione, ad esempio se la somma dei due numeri è uguale/maggiore/minore di x.
cosa intendi per
- numero op senza mem con 100 numero di intervallo [1,100] = 127500 (il tuo caso).
- numero op con mem con 100 numero di intervallo [1,100] = 6275
 
Ultima modifica da un moderatore:
D

deleted_98961

Ospite
Grazie per la risposta!
Allora se riesco a semplificare il tutto come dici tu ne srei piu contento!
se si riesce, si può, un poco alla volta, scarnare la tua applicazione vedere dove si può migliorare. Un consiglio, non so come tu abbia progettato questa applicazione, ma puoi anche inserire uno pseudo-codice alto livello con qualche riga di commento, rende tutto più compatto e senza possibili assunzioni.

ok vediamo che si può fare :)

Le righe del file di testo sono circa 8500, comprendono la data di rilevazione e i 50numeri
L'ID (come lo chiamo io) è un valore che attribuisco io come chiave, sono tutti progressivi!
ok secondo me nella seconda parte della tua applicazione dove fai una ricerca, puoi pensare di modificare questo ID, rendendolo implicato dai dati della lista che rappresenta, cioè una funzione hash sui dati (come, tra l'altro, consiglio pabloski :) ), renderà il tutto più ottimizzato per la find invece che un numero progressivo. Dipende tutto da che tipo di ricerca tu faccia, se la lista è ordinata, ...
Ma si vedrà se vuoi, basta che spieghi meglio perchè non si comprende molto nel post sopra.

Per quanto riguarda i numeri del file di testo, li carico tutti su un array e leggo riga per riga, sempre tramite array.
ma ti carichi TUTTO il file di testo in un array?? (a parte che non viene veramente caricato per questioni di efficienza dal tuo programma, ma solo in parte)
Questi dati li utilizzerai UNA volta solo per fare il confronto con x? o nella seconda parte riutilizzi questo iper-array[8500][50] per fare altre operazioni?

ADD (ho un po' di tempo aggiungo qualcosa salvo modifiche dalle tue risposta alle domande sopra :) ):

La cosa importante è che durante le operazioni è importante conoscere la posizione del numero che carico.
come pensavo utilizzi un semplice iteratore sull'array e non ti memorizzi il calcolo. In questo modo ripeti la stessa operazione (addizione) ad ogni combinazione


Esempio:
Righe(90000) con tutte le righe ordinate caricate dal file di testo
perchè 90000 e cosa intendi con ordinate. Intendi ordinate per lettura penso.

Numeri(50) contiene i 50 numeri
Caricando la riga(1) l'Array numeri verra aggiornato con i 50 numeri presenti nel file di testo.
qua già inizio a capire che fai addirittura due copie. Te ne basta una sola con un'operazione tipo read_line() con parser sui numeri interi (tipo strtok del C).

La cosa importante è che durante i calcoli necessito di conoscere la posizione attuale dell'array Numeri.

Questa è la lista su cui andro a lavorare e i calcoli che vengono effettuati
Num1+Num2+1
Num1+Num2+2
Num1+Num2+3
Num1+Num2+4
...
Num1+Num3+1
Num1+Num3+2
Num1+Num3+3
Num1+Num3+4
...
Num2+Num3+1
....
Num2+Num4+1
...
Num30+Num31+1
Num30+Num31+2
Num30+Num31+3
...

viene memorizzato solo se rispetta una certa condizione legata all'opearzione,

Allora ti scrivo qualche linea di un pseudo-codice simili-C-Java, chiedi pure se non comprendi (ma è semplice).
Vedi se è simile al tuo di codice, perchè vado ad interpretazioni di ciò che dici.

assunzioni:
- sono tutti numeri interi sia nel file che nell'array
- tutte le linee hanno 50 numeri esatti e sono tipizzati

sia:
File: il file di numeri di 8000 linee x 50 numeri
P: insieme di numeri dell'intervallo a tua scelta (es. [1,100]
Num[50]: array di numeri fresh

Mem[]: array dei numeri salvati conformi al confronto con x

Codice:
foreach linea in File{

          Num[50] = read_line(cast_to_num(linea)) 
//leggo UNA singola linea del file, faccio un qualche conversione dei numeri letti
//memorizzo nell'array Num (da modificare se riutilizzi i dati letti nella seconda parte del codice)
   
          int temp
          for int i = 1 to 50-1 {
               for int j = i+1 to 50 {
                       temp = Num[i] + Num[j] 
//qua salvo in una variabile l'addizione, nel tuo caso, da quanto dici, non lo memorizzi ma lo ricalcoli sempre nell'if sotto.
               
                       foreach p in P{
                             if(temp+p >= x) // da vedere come operi il salvataggio dei dati conformi [B](*)[/B]
                                   new Mem[]
                              else
                                   new Mem[]
                         }
                }
          }
          
}

ad esempio se la somma dei due numeri è uguale/maggiore/minore di x.
(*) se dici di più su questo x e se il confronto è sempre >, <, = si può pensare di toglier alcuni confronti inutili, se anche i numeri che aggiungi dell'intervallo [1,100] son sempre progressivi.
 
Ultima modifica da un moderatore:

Filippo90

Utente Attivo
212
1
CPU
i7 950
Scheda Madre
Gigabyte X58-USB3
HDD
SSD 180 GB + HD 2 TB + HD 3 TB
RAM
Corsair Vengance 12GB 1600mhz
GPU
R9 280X Toxic
Monitor
ASUS VW220TE 22" Widescreen
PSU
Corsair 850w
Case
Cooler Master Centurion II Advanced
OS
Windows 7 x64
Come vedo dal codice, se non erro, il ciclo fa il calcolo su numeri consecutivi?

num1+num2
num2+num3

essendo che la variabile i aumenta ad ogni ciclo?
Ho un ciclo simile dove

for i = 1 to 50

for s = 1 to 50
num(i)+num(s)
next s

next i

cosi viene sommato il primo numero con gli altri 50, poi il secondo con gli altri 50... Non ho capito bene

Poi conviene realmente leggere una riga per volta dal file di testo anche durante un ciclo for ne vanno caricate molte, ad esempio 20 a differenza che caricarle tutte prima in un array?


Per rendere migliore l'algoritmo è bene usare array multidimensionali?
esempio:

Dim ArrayT(100, 900) As String '\\100 sta per i valori da aggiungere alle somme, cosi so che l'ArrayT(5,...) è stato aggiunto 5 per effettuare il calcolo


ArrayT(1, 1) = "array 1 riga 1"
ArrayT(1, 2) = "array 1 riga 2"
ArrayT(2, 1) = "array 2 riga 1"
ArrayT(2, 2) = "array 2 riga 2"

For i = 1 To 2
For s = 1 To 2
ListBox1.Items.Add(ArrayT(i, s))
Next s
Next i
 
Ultima modifica:
D

deleted_98961

Ospite
Come vedo dal codice, se non erro, il ciclo fa il calcolo su numeri consecutivi?

num1+num2
num2+num3

essendo che la variabile i aumenta ad ogni ciclo?
uh hai ragione è un errore


Ho un ciclo simile dove

for i = 1 to 50

for s = 1 to 50
num(i)+num(s)
next s

next i

cosi viene sommato il primo numero con gli altri 50, poi il secondo con gli altri 50... Non ho capito bene
sì ho corretto il codice sopra, è uguale al tuo allora. Solo che gli estremi che hai messo sono corretti?

Codice:
int temp
for int i = 1 to 50-1 {
    for int j = i+1 to 50 {
         temp = Num[i] + Num[j]

         foreach p in P{
                 if(temp+p >= x)
                      new Mem[]
                 else
                      new Mem[]
          }
     }
}

te hai scritto:
- sommo il primo con tutti gli altri perciò da 1 a 50, contemporanemante sommo con un numero dell'intervallo [1,100].
1 + [2,50] + ...
- sommo il secondo con tutti gli altri
2 + [3,50] + ....
...
49 + [50] + ...

perciò non dovresti sommare il primo con il primo, ma il primo con il secondo, fino al penultimo con l'ultimo, l'ultimo non lo consideriamo. O sbaglio?

Ma poi te confronti con x, anche solo la somma Num[1]+Num[2] e poi Num[1]+Num[2]+2 perchè hai detto due cose diverse in due post diversi...

Poi conviene realmente leggere una riga per volta dal file di testo anche durante un ciclo for ne vanno caricate molte, ad esempio 20 a differenza che caricarle tutte prima in un array?
questo dipende se riutilizzi quell'array in un secondo momento.
Ma sì in effetti occuperesti circa neanche 2MB, e basta deallocare la memoria se non la utilizzi. Non è questo comunque che ti cambia il costo di elaborazione :)


Per rendere migliore l'algoritmo è bene usare array multidimensionali?
Dipende dall'utilizzo che se ne fa. Io ad esempio consiglierei l'utilizzo di un array lineari con due iteratori. Per navigare nell'array basta utilizzare l'algebra modulare. Ma in VB non so bene come siano allocate le matrici, forse hanno un sistema ottimizzato per la gestione di multiarray (gestione delle righe e collonne). In C ad esempio, per grandi matrici, consiglierei l'utilizzo di array monodimensionali per via che è molto più efficiente la gestione e allocazione rispetto a multidimensione.

Ma ora cosa utilizzi?

esempio:

Codice:
Dim ArrayT(100, 900) As String   '\\100 sta per i valori da aggiungere  alle somme, cosi so che l'ArrayT(5,...) è stato aggiunto 5 per  effettuare il calcolo
ma te ti salvi tutti i numeri calcolati in un secondo array?
perciò:

array di numeri presi dalle stringhe
array di numeri intervallo [1,100] che viene summato con i numeri del file
poi ti confronti con quel fantomatico x?

secondo me ti fai davvero mille cicli per nulla.

Guarda facciamo così, se vuoi puoi passarmi il pezzo di codice che stiamo analizzando (tramite PM con tag CODE o email) così capisco effettivamente cosa fai. Così ho il quadro completo :)
 
Ultima modifica da un moderatore:

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!