|
|
|
![]() |
|
Strumenti |
![]() |
#21 | |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
![]() Cioè circa 3 volte più veloce? Cavoli, non pensavo che la scanf() avesse un tale impatto. ![]() Come no, posta pure che è interessante. ![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! Ultima modifica di DanieleC88 : 16-08-2008 alle 10:26. |
|
![]() |
![]() |
![]() |
#22 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Tra l'altro ho appena escogitato una possibile soluzione al secondo punto del problema, ma ho ancora un po' di dubbi sulla sua efficienza. Appena posso butto giù del codice e incrocio le dita.
![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#23 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#24 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
In ritardo(causa condivisione dell'unico portatile tra parenti e amici
![]() Nella macchina menzionata nel post precedente, impiega 0.02400 secondi. Codice:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> #include <time.h> #define BUFFER_SIZE 4096 typedef enum tagStati { S_ERROR = -1, S0, S1 } Stati; int GetArraySize(const char *szFileName) { int array_size; FILE *fp; char buffer[BUFFER_SIZE + 1]; int numread; int k; char c; fp = fopen(szFileName, "rb"); if ( fp == NULL ) { printf("Errore nell'apertura del file %s\n", szFileName); return S_ERROR; } numread = fread(buffer, 1, BUFFER_SIZE, fp); if (numread == 0) { fclose(fp); printf("Errore 4 nella lettura del file %s\n", szFileName); return S_ERROR; } *(buffer + numread + 1) = '\0'; k = 0; c = *(buffer + k); array_size = 0; while ( c != '\n' ) { if ( c >= '0' && c <= '9' ) { array_size = array_size * 10 + c - '0'; } c = *(buffer + k++); } fclose(fp); return array_size; } Stati DFA(const char *szFileName, int **a, int array_size) { Stati stato = S0; FILE *fp; unsigned char buffer[BUFFER_SIZE + 1]; int numblocks; int numread; char c; int k, x; int riga, colonna; int num; fp = fopen(szFileName, "rb"); if ( fp == NULL ) { printf("Errore nell'apertura del file %s\n", szFileName); return S_ERROR; } if ( fseek(fp, 0, SEEK_END) ) return 0; numblocks = ftell(fp)/BUFFER_SIZE; if ( numblocks == 0 ) { numblocks = 1; } else { if ( ftell(fp) % BUFFER_SIZE != 0 ) numblocks++; } fseek(fp, 0, SEEK_SET); numread = fread(buffer, 1, BUFFER_SIZE, fp); if (numread == 0) { fclose(fp); printf("Errore 1 nella lettura del file %s\n", szFileName); return S_ERROR; } k = 0; c = *(buffer + k++); while ( c != '\n' ) { if (c == '\0') { printf("Errore 2 nella lettura del file.\n"); fclose(fp); return S_ERROR; } c = *(buffer + k++); } riga = colonna = 0; num = 0; x = 0; while ( x < numblocks ) { c = *(buffer + k++); switch ( stato ) { case S0: num = 0; if ( c >= '0' && c <= '9' ) { num = c - '0'; stato = S1; } else if ( c == '-' ) { c = *(buffer + k++); if ( k >= BUFFER_SIZE ) { numread = fread(buffer, 1, BUFFER_SIZE, fp); if (numread == 0) { fclose(fp); printf("Errore 3 nella lettura del file %s\n", szFileName); return S_ERROR; } k = 0; c = *(buffer + k++); x++; } else if ( c < '0' || c > '9' ) { printf("Automa: Stato S0 errore sul carattere -> '%c'\n", c); return S_ERROR; } num = (c - '0') * -1; stato = S1; } else if ( c == '\r' ) { } else if ( c == '\n' ) { colonna = 0; riga++; if (riga >= array_size) return stato; } else { printf("Automa: Stato S0 errore sul carattere -> '%c' k -> %d\n", c, k); return S_ERROR; } break; case S1: if ( c >= '0' && c <= '9' ) { num = num * 10 + c - '0'; } else if ( c == ' ' ) { a[riga][colonna] = num; num = 0; colonna++; stato = S0; } else if ( c == '-' ) { k--; stato = S0; } else { printf("Automa: Stato S1 errore sul carattere -> '%c'\n", c); return S_ERROR; } break; } if ( k >= BUFFER_SIZE ) { numread = fread(buffer, 1, BUFFER_SIZE, fp); if (numread == 0) { fclose(fp); printf("Errore 3 nella lettura del file %s\n", szFileName); return S_ERROR; } k = 0; x++; } } fclose(fp); return stato; } int main() { clock_t c_start, c_end; int x; int **m; int array_size; Stati stato; c_start = clock(); array_size = GetArraySize("matrix1.txt"); if ( array_size <= 0 ) return; m = (int**)malloc(sizeof(int*)*array_size); if ( m != NULL ) { for ( x = 0; x < array_size; x++ ) { m[x] = (int*)malloc(sizeof(int)*array_size); if ( m[x] == NULL ) { printf("Memoria insufficiente.\n"); return S_ERROR; } } } else { printf("Memoria insufficiente.\n"); return S_ERROR; } stato = DFA("matrix1.txt", m, array_size); if ( stato == S_ERROR ) { printf("L'automa ha restituito un errore.\n"); return -1; } c_end = clock(); printf("\nTempo impiegato per la lettura del file -> %5.5f secondi\n", (double)(c_end - c_start) / CLOCKS_PER_SEC); printf("\ngli ultimi dieci elementi della matrice:\n"); for ( x = 989; x < 1000; x++ ) printf("m[999][%d] -> %d\n", x, m[999][x]); printf("\n"); for ( x = 0; x < array_size; x++ ) free(m[x]); free(m); return 0; } ![]() Ultima modifica di Vincenzo1968 : 16-08-2008 alle 18:57. |
![]() |
![]() |
![]() |
#25 | |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#26 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#27 | |
Member
Iscritto dal: Sep 2004
Messaggi: 216
|
Quote:
![]() Grazie. |
|
![]() |
![]() |
![]() |
#28 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
|
![]() |
![]() |
![]() |
#29 | |||||
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
![]() ![]() Quote:
![]() Quote:
![]() Quote:
![]() Be' sì, perché no? ![]() Quote:
![]() Un automa a stati finiti è un modello di macchina che reagisce a degli input portandosi da uno stato iniziale ad uno stato finale e dando determinati output (diversi a seconda degli stati di destinazione o delle transizioni effettuate). Almeno io è così che la conosco per quel poco che ho fatto, se vuoi maggiori dettagli su come implementarle in C rivolgiti a Vincenzo che saprà consigliarti letture utili. ![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|||||
![]() |
![]() |
![]() |
#30 | |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
come prima cosa volevo incoraggiarti(anzi, incoraggiarvi; l'invito è rivolto anche a ndakota) a partecipare ugualmente. L'accento è posto sugli algoritmi e non sulla velocità di esecuzione; non è detto quindi che il tuo algoritmo non possa risultare interessante. Per quanto riguarda gli automi a stati finiti puoi vedere questo mio articolo e, se sei particolarmente interessato, ti consiglio caldamente questo libro: Codice:
John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman Automi, linguaggi e calcolabilità ADDISON-WESLEY P.S. ndakota, c,è un accenno agli automi a stati finiti anche sul Cormen(capitolo 32, 'string matching') ![]() Ultima modifica di Vincenzo1968 : 16-08-2008 alle 20:00. |
|
![]() |
![]() |
![]() |
#31 |
Senior Member
Iscritto dal: Dec 2007
Città: brianza
Messaggi: 717
|
[OT]
E' interessante notare come il mio futuro libro di sistemi riesca a trattare la macchina di Touring senza citare gli automi a stati finiti ![]() ![]() [/OT]
__________________
AMD Ryzen 9700X MSI RX 480 Gaming X 8G ASRock B850 Pro-A Windows 11 Pro RAM DDR5 16GBx2 TEAMGROUP T-Create Expert 6000 MHz CL30 SSD Crucial T500 4TB case Corsair Carbide 200R |
![]() |
![]() |
![]() |
#32 |
Member
Iscritto dal: Aug 2006
Messaggi: 135
|
La prima riga di ogni file indica la dimensione della matrice giusto??
![]() Quindi per il primo esercizio la matrice è 1000 * 1000 vero?? ![]() Scusate le domande banali!! ![]() |
![]() |
![]() |
![]() |
#33 | ||
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
giusto, si. Si tratta di una matrice 1000x1000. Quote:
si, è decisamente interessante! Fammi sapere il titolo del libro quando esce(che evito di comprarlo). Ho postato quel codice non perché voglia dimostrare chissà cosa, ma perché lo ritengo interessante. Anche se l'esercizio specifica che i tempi di lettura dal file non debbono rientrare nel computo, nella vita reale uno non si può presentare dal cliente e dirgli: "l'algoritmo di ricerca è velocissimo; tuttavia, il programma impiega mezz'ora di tempo a causa della lettura del file". ![]() |
||
![]() |
![]() |
![]() |
#34 |
Member
Iscritto dal: Sep 2004
Messaggi: 216
|
Per ho scritto il codice per memorizzare la matrice, questo è il codice
Codice:
// Contest5.cpp : Defines the entry point for the console application. // #include <Windows.h> #include <stdio.h> #include <stdlib.h> #include <fstream> #include <iostream> #include <ctime> #define SRCFILE "Matrix1.txt" #define FILEBUFER 4096 int matrixSize = 1000; char matrix[1000][1000]; bool OpenContestFile(char* pFileName) { char buffer[FILEBUFER + 1]; std::ifstream inputFile; inputFile.open(pFileName); if (inputFile.fail()) { printf("Impossibile aprire il file %s", pFileName); return false; } inputFile.getline(buffer, FILEBUFER, '\n'); /* int lenghtFirstLine = inputFile.tellg(); std::string textRecord; textRecord.insert(0, buffer + 2, lenghtFirstLine - 4); matrixSize = atoi(textRecord.c_str());*/ matrixSize = atoi(buffer+1); // Legge tutti i valori della matrice int Row = 0; char* tempBuffer; while (inputFile.eof() == false) { inputFile.getline(buffer, FILEBUFER, '\n'); tempBuffer = buffer; for (int i = 0; i < matrixSize; i++) { matrix[Row][i] = atoi(tempBuffer); while ((*tempBuffer >= '0' && *tempBuffer <= '9') || *tempBuffer == '-') { ++tempBuffer; } // if (*tempBuffer == ' ' && *tempBuffer != '\n' && *tempBuffer != '\r') { ++tempBuffer; } } ++Row; } inputFile.clear(); inputFile.close(); return true; } int main() { clock_t t1; clock_t t2; // Lettura file t1 = clock(); bool staus = OpenContestFile(SRCFILE); t2 = clock(); char text[512]; sprintf(text, "Lettura file completata in %5.5f secondi", float(t2-t1) / CLOCKS_PER_SEC); OutputDebugStr(text); return 0; } Pensavo peggio ![]() |
![]() |
![]() |
![]() |
#35 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Provo a gettare una prima soluzione per il punto 2.
Completamente funzionale Quote:
Codice:
class Program { static void Main(string[] args) { Matrix mat = new Matrix("Matrix2.txt"); Stopwatch sw = new Stopwatch(); sw.Start(); var toprint = mat.Ex2(); sw.Stop(); Console.WriteLine("Coordinate: {0},{1} - Dimensione {2} - Somma {3}", toprint.Coords.x, toprint.Coords.y, toprint.Coords.z, toprint.val); Console.WriteLine("Time: {0}ms", sw.ElapsedMilliseconds); int x=toprint.Coords.x; int y=toprint.Coords.y; int z=toprint.Coords.z; int test = (from yy in Enumerable.Range(y, z+1) from xx in Enumerable.Range(x, z+1) select mat.Mat[xx, yy]).Sum(); Console.WriteLine("Test: {0}", test); Console.ReadKey(); } } public class Matrix { public int Dim; public int[,] Mat; public void Save(string fname) { StreamWriter sw = new StreamWriter(@"C:\temp\" + fname); sw.WriteLine("--{0}--", Dim); for (int y = 0; y < Dim; y++) { for (int x = 0; x < Dim; x++) { sw.Write("{0} ", Mat[x, y].ToString()); } sw.WriteLine(); } sw.Close(); } public Matrix(string fname) { Load(fname); } public Matrix(int[,] vals) { Mat = vals; Dim = vals.GetLength(0); } public void Load(string fname) { StreamReader sr = new StreamReader(@"C:\temp\" + fname); string fline = sr.ReadLine(); string mds = fline.Substring(2, fline.Length - 4); Dim = int.Parse(mds); Mat = new int[Dim, Dim]; for (int y = 0; y < Dim; y++) { string line = sr.ReadLine(); string[] valss = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var valis = valss.Select(t => int.Parse(t)).ToArray(); Enumerable.Range(0, Dim).ForAll(x => Mat[x, y] = valis[x]); } sr.Close(); } public struct CoordsStruct { public int x; public int y; public int z; public CoordsStruct(int ix, int iy, int iz) { x = ix; y = iy; z = iz; } } public struct Ex2Result { public CoordsStruct Coords; public int val; public Ex2Result(CoordsStruct ics,int ival) { Coords = ics; val = ival; } } public Ex2Result Ex2() { int parsum = 0; var domgrp = from y in Enumerable.Range(0, Dim) from x in Enumerable.Range(0, Dim) let min = Math.Min(Dim - y, Dim - x) from z in Enumerable.Range(1, min - 1) select new Ex2Result( new CoordsStruct(x,y,z), parsum = (z == 1 ? Mat[x, y] : parsum) + Mat[x + z, y + z] + (from t in Enumerable.Range(0, z) select Mat[x+t,y+z]+Mat[x+z,y+t]).Sum() ); var orig = from y in Enumerable.Range(0, Dim) from x in Enumerable.Range(0, Dim) select new Ex2Result(new CoordsStruct(x, y, 0), Mat[x, y]); var complete = domgrp.Concat(orig); Ex2Result res = complete.Max(t => t.val); return res; } } public static class Extensor { public static void ForAll<T>(this IEnumerable<T> domain,Action<T> act) { foreach (T t in domain) act(t); } public static T Max<T, U>(this IEnumerable<T> domain, Func<T, U> elem) where U:IComparable<U> { T CurmaxRow = default(T); U CurMax=default(U); foreach (T t in domain) { U CurVal=elem(t); if (CurVal.CompareTo(CurMax) > 0) { CurmaxRow = t; CurMax = CurVal; } } return CurmaxRow; } }
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 16-08-2008 alle 23:41. |
|
![]() |
![]() |
![]() |
#36 | |||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Considera che un automa a stati finiti fa veramente "il minimo indispensabile", mentre la scanf ha numerosi controlli in più che esegue sempre. ![]() Quote:
"Tu l'hai detto." ![]() Quote:
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|||
![]() |
![]() |
![]() |
#37 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ho snellito un po' il codice dell'automa con l'aggiunta di uno stato che rende più agevole la gestione dei numeri negativi:
Codice:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> #include <time.h> #define BUFFER_SIZE 4096 typedef enum tagStati { S_ERROR = -1, S0, S1, S2 } Stati; int GetArraySize(const char *szFileName) { int array_size; FILE *fp; char buffer[BUFFER_SIZE + 1]; int numread; int k; char c; fp = fopen(szFileName, "rb"); if ( fp == NULL ) { printf("Errore nell'apertura del file %s\n", szFileName); return S_ERROR; } numread = fread(buffer, 1, BUFFER_SIZE, fp); if (numread == 0) { fclose(fp); printf("Errore 4 nella lettura del file %s\n", szFileName); return S_ERROR; } *(buffer + numread + 1) = '\0'; k = 0; c = *(buffer + k); array_size = 0; while ( c != '\n' ) { if ( c >= '0' && c <= '9' ) { array_size = array_size * 10 + c - '0'; } c = *(buffer + k++); } fclose(fp); return array_size; } Stati DFA(const char *szFileName, int **a, int array_size) { Stati stato = S0; FILE *fp; unsigned char buffer[BUFFER_SIZE + 1]; int numblocks; int numread; char c; int k, x; int riga, colonna; int num; int segno; fp = fopen(szFileName, "rb"); if ( fp == NULL ) { printf("Errore nell'apertura del file %s\n", szFileName); return S_ERROR; } if ( fseek(fp, 0, SEEK_END) ) return 0; numblocks = ftell(fp)/BUFFER_SIZE; if ( numblocks == 0 ) { numblocks = 1; } else { if ( ftell(fp) % BUFFER_SIZE != 0 ) numblocks++; } fseek(fp, 0, SEEK_SET); numread = fread(buffer, 1, BUFFER_SIZE, fp); if (numread == 0) { fclose(fp); printf("Errore 1 nella lettura del file %s\n", szFileName); return S_ERROR; } k = 0; c = *(buffer + k++); while ( c != '\n' ) { if (c == '\0') { printf("Errore 2 nella lettura del file.\n"); fclose(fp); return S_ERROR; } c = *(buffer + k++); } riga = colonna = 0; num = 0; x = 0; while ( x < numblocks ) { c = *(buffer + k++); switch ( stato ) { case S0: segno = 1; if ( c >= '0' && c <= '9' ) { num = c - '0'; stato = S1; } else if ( c == '-' ) { num = 0; stato = S2; } else if ( c == '\r' ) { } else if ( c == '\n' ) { colonna = 0; riga++; if (riga >= array_size) return stato; } else { printf("Automa: Stato S0 errore sul carattere -> '%c' k -> %d\n", c, k); return S_ERROR; } break; case S1: if ( c >= '0' && c <= '9' ) { num = num * 10 + c - '0'; } else if ( c == ' ' ) { a[riga][colonna] = num * segno; num = 0; colonna++; stato = S0; } else { printf("Automa: Stato S1 errore sul carattere -> '%c'\n", c); return S_ERROR; } break; case S2: if ( c >= '0' && c <= '9' ) { num = c - '0'; segno = -1; stato = S1; } else { printf("Automa: Stato S2 errore sul carattere -> '%c'\n", c); return S_ERROR; } break; } if ( k >= BUFFER_SIZE ) { numread = fread(buffer, 1, BUFFER_SIZE, fp); if (numread == 0) { fclose(fp); printf("Errore 3 nella lettura del file %s\n", szFileName); return S_ERROR; } k = 0; x++; } } fclose(fp); return stato; } int main() { clock_t c_start, c_end; int x; int **m; int array_size; Stati stato; char *szFileName = "matrix1.txt"; c_start = clock(); array_size = GetArraySize(szFileName); if ( array_size <= 0 ) return; m = (int**)malloc(sizeof(int*)*array_size); if ( m != NULL ) { for ( x = 0; x < array_size; x++ ) { m[x] = (int*)malloc(sizeof(int)*array_size); if ( m[x] == NULL ) { printf("Memoria insufficiente.\n"); return S_ERROR; } } } else { printf("Memoria insufficiente.\n"); return S_ERROR; } //c_start = clock(); stato = DFA(szFileName, m, array_size); if ( stato == S_ERROR ) { printf("L'automa ha restituito un errore.\n"); return; } c_end = clock(); printf("\nTempo impiegato per la lettura del file -> %5.5f secondi\n", (double)(c_end - c_start) / CLOCKS_PER_SEC); printf("\ngli ultimi dieci elementi della matrice:\n"); for ( x = array_size - 10; x < array_size; x++ ) printf("m[%d][%d] -> %d\n", array_size - 1, x, m[array_size - 1][x]); printf("\n"); for ( x = 0; x < array_size; x++ ) free(m[x]); free(m); return 0; } |
![]() |
![]() |
![]() |
#38 | |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
![]() |
![]() |
![]() |
#39 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Comunque alla fine ho tradotto in Python l'idea che avevo, ma sembra dannatamente lenta...
![]() In fondo era solo un metodo "velocizzato" per analizzare tutti i possibili sottoquadrati, ma l'ho lanciato oltre venti minuti fa ed è ancora lì che gira, quindi non so se vale la pena di tradurlo anche in C: dubito di riuscire anche lontanamente a raggiungere gugoXX, pure su un computer serio. ![]() Magari dopo provo a farlo lo stesso e vediamo che schifezza ne esce fuori. ciao ![]() EDIT: come non detto, ha appena finito... ![]() Ci ha messo appena 35 minuti. ![]() Codice:
Lettura completata in 2500.54476273 millisecondi. Caricata una matrice 200x200. Inizio la ricerca... completata in 2115368.25458 millisecondi. Risultato: posizione (94, 60) larghezza 56 somma 3185 Codice:
from time import clock def read(filename): f = open(filename) list = [] first = f.readline() side = int(first[2 : len(first)-3]) for line in f: tmp = [] for w in line.split(): tmp.append(int(w)) list.append(tmp) f.close() return side, list def sumrange(a, x1, y1, x2, y2): s = 0 for y in xrange(y1, y2): for x in xrange(x1, x2): s += a[y][x] return s def contest5b(w, a): max_side = 1 max_coord = (0, 0) max_sum = 0 side = 1 while side <= w: x = 0 while (x + side) <= w: tmp = sumrange(a, x, 0, x + side, side) if (tmp > max_sum): max_coord = (x, 0) max_side = side max_sum = tmp y = 0 while (y + side) < w: for i in xrange(side): tmp += (a[y+side][x+i] - a[y][x+i]) if (tmp > max_sum): max_coord = (x, y+1) max_side = side max_sum = tmp y += 1 x += 1 side += 1 return max_coord, max_side, max_sum t1 = clock() w, a = read("Matrix2.txt") t2 = clock() print "Lettura completata in", (t2-t1)*1000.0, "millisecondi." print "Caricata una matrice %dx%d." % (w, w) print "Inizio la ricerca...", t1 = clock() coord, side, sum = contest5b(w, a) t2 = clock() print "completata in", (t2-t1)*1000.0, "millisecondi." print print "Risultato: posizione", coord, "larghezza", side, "somma", sum ![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! Ultima modifica di DanieleC88 : 17-08-2008 alle 14:03. |
![]() |
![]() |
![]() |
#40 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Daniele, perché non provi Psyco?
Installalo, e all'inizio del tuo programma Python scrivi le seguenti 2 righe: Codice:
import psyco psyco.full() Codice:
import psyco, gc psyco.full() gc.disable() ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:15.