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.