2017-12-16 4 views
2

In C++ ist es möglich, eine NxN Matrix-Stil Eingabe aus einer Datei und weisen Sie auf eine zweidimensionale Anordnung in einer Zeit zu lesen, die asymptotische Komplexität unter der Annahme, besser als O(n^2) hat, dass N in gegeben die erste Zeile und andere Zeilen haben ein Leerzeichen zwischen ganzen Zahlen? Ich kann mein Array mit den Input-Ganzzahlen nacheinander füllen, die eine Kosten O(n^2) hat.C++ Lesen Matrix Typ Eingabe aus einer Datei

#define MAX_SIZE 1000 

std::string row,temp; 
std::ifstream inpfile("input.txt"); 
inpfile>>row; 
int size=std::stoi(row); 
static int M[MAX_SIZE][MAX_SIZE]; 

for(int i=0;i<size;++i){ 
    for(int j=0;j<size;++j){ 
     inpfile>>temp; 
     A[i][j]=std::stoi(temp); 
    } 
} 

Ich denke nur, so etwas wie die nth line zu lesen und die nth row von Array erstellen (oder einem Container), die Zeitkomplexität zu linear time reduzieren. Gibt es irgendwelche Implementierungen, die besser sind als die Iteration aller Elemente einer gegebenen Matrix?

+0

'int A [Größe] [Größe];' - Dies ist nicht gültig C++. Arrays in C++ werden mit einer Kompilierzeitkonstanten deklariert, um die Anzahl der Einträge anzugeben, keine Variable. – PaulMcKenzie

+0

Wahr. Ich habe meine Frage bearbeitet. – kntgu

+1

Sie müssen immer noch N x N Werte lesen, um die Matrix zu füllen, egal wie die Matrix aufgebaut ist, daher verstehe ich Ihre Frage nicht ganz. – PaulMcKenzie

Antwort

1

Eine Antwort, die durch O (N) läuft, wobei N ein int ist, wäre dies, aber in Form von Linien haben Sie immer O (N^2) unabhängig davon. Vielleicht ist dies die nächste Lösung, die Sie haben könnten.

int temp; 
int countX = 0; 
while(inFile >> temp) 
{ 
    A[countX/size][countX % size] = std::stoi(temp); 
    countX++; 
} 

Ich hoffe, das hilft.

+0

Es sieht so aus, als würde ich diese Antwort in meinem Code verwenden. Vielen Dank! – kntgu

+0

@ ÉŊÉ wenn es geholfen hat, bitte upvote und akzeptiere als antwort. Np immer glücklich zu helfen –

Verwandte Themen