|
|
|
|
Strumenti |
13-10-2008, 17:31 | #41 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Alè repne scasb
(seguo sempre i contest di GugoXX con interesse)
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
13-10-2008, 18:04 | #42 | |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Puoi spiegare un po' l'algoritmo(e soprattutto le ottimizzazioni per scendere sotto il decimo di secondo)? Ciao |
|
13-10-2008, 18:09 | #43 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7064
|
ho ottimizzato un attimino il codice per non fare proprio schifo:
Codice:
#include <iostream> #include <fstream> #include <sstream> #include <map> #include <time.h> #include <vector> using namespace std; class Ruota { public: Ruota(string data, string ruota, map<int,int> &estrazioni) { m_estrazioni = estrazioni; m_data = data; m_ruota = ruota; } string getData() { return m_data; } string getRuota() { return m_ruota; } bool contiene(vector<int> &valori) { for(unsigned int i = 0; i<valori.size(); ++i ) { if(m_estrazioni.count(valori[i]) == 0) { return false; } } return true; } private: map<int,int> m_estrazioni; string m_data, m_ruota; }; vector<string> trova(ifstream &dataFile, ifstream &findFile) { vector<string> results; vector<int>* valori; int numRighe; string tmp; char ch; findFile >> tmp >> numRighe; valori = new vector<int>[numRighe]; for(int i=0; i<numRighe; ++i) { char line[50]; findFile.getline(line, 50); if(line[0] == 13) { --i; continue; } stringstream lineStream(line); while(lineStream.good()) { int valore; lineStream >> valore >> ch; valori[i].push_back(valore); } } int numRuote, numValori; dataFile >> tmp >> numRuote; dataFile >> tmp >> numValori; while(dataFile.good()) { string data, ruota; map<int,int> estrazioni; dataFile >> data >> ruota; for(int i=0; i<numValori; ++i) { int estrazione; char sep; dataFile >> estrazione >> sep; estrazioni[estrazione] = 1; } Ruota r(data, ruota, estrazioni); for(int i=0; i<numRighe; ++i) { if(r.contiene(valori[i])) { stringstream result; result << "Data: " << r.getData() << " Ruota: " << r.getRuota() << " Valori:"; for(unsigned int j = 0; j<valori[i].size(); ++j ) { result << " " << valori[i][j]; } results.push_back(result.str()); } } } return results; } int main(int argc, char** argv) { if(argc < 3) return -1; ifstream dataFile(argv[1]); ifstream findFile(argv[2]); if(findFile.is_open() && dataFile.is_open()) { clock_t start, end; start = clock(); vector<string> results = trova(dataFile, findFile); end = clock(); dataFile.close(); findFile.close(); ofstream out("output.txt"); vector<string>::iterator it; for(it = results.begin(); it != results.end(); it++ ) { out << (*it) << endl; } cout << "Ci ho messo ben " << ((end-start)*1000)/CLOCKS_PER_SEC << "millisecondi" << endl; } else cout << "Unable to open file" << endl; } su linux con le stesse ottimizzazioni (-O2) ci mette 5 secondi Ultima modifica di k0nt3 : 13-10-2008 alle 18:39. |
13-10-2008, 18:53 | #44 |
Senior Member
Iscritto dal: May 2008
Messaggi: 530
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 15:01. |
13-10-2008, 19:30 | #45 | |
Member
Iscritto dal: Sep 2004
Messaggi: 216
|
Quote:
|
|
13-10-2008, 19:56 | #46 |
Senior Member
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
|
La mia soluzione da 20 sec netti la posto, o faccio solo brutta figura??
La posto e chissenefrega, almeno è semplice da capire! Codice:
/** * laRicerca: ArrayList ordinato dei numeri da ricercare * tramite funzione sort offerta da Collections * estrazione: idem qui per i valori dell'estrazione * * Poi uso il metodo containsAll per vedere se i valori da cercare * sono contenuti */ private void bruteForce() { Ricerca laRicerca; Estrazione estrazione ; for(int i = 0; i < findList.size(); i++) { laRicerca = findList.get(i); System.out.println(laRicerca); for(int j = 0; j < theList.size(); j++) { estrazione = theList.get(j); if(estrazione.getTheValues().containsAll(laRicerca.getTheList())) { System.out.println(estrazione); } } } }
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole" |
13-10-2008, 23:27 | #47 |
Senior Member
Iscritto dal: May 2008
Messaggi: 530
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 15:02. |
14-10-2008, 06:15 | #48 | |
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
|
|
14-10-2008, 10:11 | #49 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7064
|
@rеpne scasb
a me dice che il file non è corretto (ho modificato le define in modo da caricare i miei file) |
14-10-2008, 10:44 | #50 |
Senior Member
Iscritto dal: May 2008
Messaggi: 530
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 15:02. |
14-10-2008, 10:46 | #51 |
Senior Member
Iscritto dal: May 2008
Messaggi: 530
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 15:02. |
14-10-2008, 11:02 | #52 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
repne ho provato ad eseguire quest'ultimo sul mio pc. questi i risultati:
Codice:
*** Tempo per caricamento dati e creazione strutture: 0.365 secondi *** Tempo per ricerca della soluzione difficile: 0.399 secondi *** Tempo totale per l'intera elaborazione: 0.764 secondi Process returned 0 (0x0) execution time : 0.788 s Press any key to continue. |
14-10-2008, 11:19 | #53 |
Senior Member
Iscritto dal: May 2008
Messaggi: 530
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 15:03. |
14-10-2008, 11:31 | #54 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
mi chiedi troppo sono un novellino
comunque il mio pc è una via di mezzo tra i due da te postati: intel core 2 duo t5500(1.66 Ghz) 2 gb ddr2 windows vista 32 bit. |
14-10-2008, 12:17 | #55 |
Senior Member
Iscritto dal: May 2008
Messaggi: 530
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 15:03. |
14-10-2008, 13:14 | #56 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
eccoli
Codice:
*** Tempo per caricamento dati e creazione strutture: 0.363 secondi *** Tempo per ricerca della soluzione difficile: 0.007 secondi *** Tempo totale per l'intera elaborazione: 0.370 secondi |
14-10-2008, 14:42 | #57 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Questi sono i tempi di repne sulla mia macchina(compilatore: visual studio 2008):
La mia macchina: Codice:
AMD Athlon(tm) 64 X2 Dual Core Processor 4800+ 2.50 GHz 896 MB di RAM Microsoft Windows XP Professional Service Pack 3 Redirezione su file: Ultima modifica di Vincenzo1968 : 14-10-2008 alle 14:45. |
14-10-2008, 15:01 | #58 | |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
puoi postare il codice per intero? Vorrei fare un confronto fra le varie soluzioni proposte prendendo i tempi su un'unica macchina(invito tutti gli altri a fare lo stesso). |
|
14-10-2008, 15:19 | #59 | |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
scusa se insisto ma di matematica non ci capisco niente(proprio il niente che è niente). Conservo in una cartella che ho chiamato "programming pearls" (il nome l'ho preso in prestito dal bel libro di Jon Bentley) il tuo intervento nel contest 3 e la tua spiegazione sul teorema del limite centrale. Mi piacerebbe aggiungere un'altra "pearl" a quella cartella. Ultima modifica di Vincenzo1968 : 14-10-2008 alle 15:22. |
|
14-10-2008, 15:57 | #60 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Una spiegazione matematica sarebbe veramente interessante
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:06.