Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Suche » Suchergebnis » Hallo Gast [Anmelden|Registrieren]
Zeige Beiträge 1 bis 6 von 6 Treffern
Autor Beitrag
Thema: grep Komando
Liquid

Antworten: 3
Hits: 6.092
10.09.2020 20:05 Forum: formale Sprachen


Ist ziemlich einfach mit diesem regulären Ausdruck und dem grep-Kommando möglích:

code:
1:
grep -o '\a.*b' datei.txt

Hier wird jetzt nach allen Wörtern, die mit dem Buchstaben a anfangen und mit einem b enden, gesucht.
Thema: Minimierung mit KV-Diagramm
Liquid

Antworten: 1
Hits: 3.017
Minimierung mit KV-Diagramm 10.11.2018 02:45 Forum: Technische Informatik


Ich bin mir nicht sicher, ob ich so richtig minimiert habe und ob alle Gleichungen so richtig sind. Könnte mal jemand überprüfen, ob die minimierten Gleichungen richtig sind? Das ist nicht die übliche Darstellung des KV-Diagrammes aber eine, die wir verwenden sollen. Die Einsen in den Diagrammen sind auf jeden Fall richtig. Ich habe auch noch einmal alles an die Diagramme geschrieben und auch die Dezimalen äquivalente, nur um noch einmal unsere Darstellung klar zu machen, falls ihr die nicht kennen solltet.

Vor allem bei den Ausgängen y3 und y4 bin ich mir nicht sicher. y1 und y2 sollten meiner Meinung nach auf jeden Fall richtig sein. Brauche ich aber bei y3 bspw. noch eine Variable oder wie war das noch einmal? Ist das ein Spezialfalls, wenn man eine Schleife in einer Ecke hat, womit dann eine Variable wegfällt?
Thema: Little Endian auf dem Stack?
Liquid

Antworten: 1
Hits: 2.960
Little Endian auf dem Stack? 06.10.2018 11:47 Forum: Technische Informatik


Hi, es geht gerade um Reverse Engineering aber mir sind jetzt schon seit einiger Zeit einige Sachen nicht ganz klar und da frage ich hier lieber noch einmal nach, da ich das auch verstehen will. Ich finde das nämlich alles ziemlich interessant. Da es hier um die Ablage auf dem Stack, aber auch Reverse Engineering geht, bin ich nicht ganz sicher, ob ich hier im Forum in dem Bereich richtig bin aber sonst bitte verschieben.

Es geht um ein Beispiel, bei dem ich irgendwie nicht ganz mitkomme und auf einmal auch ein paar Sachen nicht mehr ganz verstehe. Das Beispiel ist mit Radare2 gemacht worden und es geht eigentlich nur um ein Beispiel mit einer main Funktion und einer Funktion func. In der main Funktion wird nur die Funktion func aufgerufen und in der func Funktion wird etwas ausgegeben, etwas mit gets eingelesen und das eingegebene wieder ausgegeben.
Bild 1 zeigt die disassemblierte func Funktion, wo zudem auch noch drei Breakpoints mit radare gesetzt wurden.
Bild2 zeigt alles, was nach der Speicheradresse, die im Register rdi liegt auf dem Stack liegt und weiter unten ist die disassemblierte main Funktion. Testweise wurden da mal 200 A's mit gets eingelesen, nur damit ihr euch nicht wundert.
Das Ziel ist es, eine Funktion aufzurufen, die nicht im Quellcode selbst aufgerufen wird aber dennoch da ist.

Meine Fragen dazu:
1) Das Beispiel ist auf Linux. Ist der Stack (oder der gesamte RAM) da standardmäßig oder allgemein - auch nicht Linux Betriebssysteme - die Byte-Reihenfolge Little Endian?
2) Das ist doch richtig, dass das keine physischen Adressen sind, die jeweils immer angegeben werden, also alles nur virtuelle Adressen?
3) Es geht ja auch darum, den RIP (Return Instruction Pointer) zu manipulieren, der ja auch auf dem Stack liegt. Der scheint ja im Stack an der rot markierten Stelle zu sein. Wie kommt man da aber auf die hexadezimale Angabe? Das soll ja wohl Little Endian sein aber wie kommt man von 0x00400725 auf die im Kasten stehenden 8 Byte? Radare lässt auch übrigens wohl führende Nullen weg, da das ganze auf einem 64 Bit Prozessor läuft.

EDIT: Das mit 3) hat sich erledigt. Irgendwie hatte ich mich da total verlesen. Passt ja doch. Zunge raus
Thema: Normalisierung: Frage zu 3NF
Liquid

Antworten: 1
Hits: 5.253
Normalisierung: Frage zu 3NF 08.08.2018 00:57 Forum: Datenbanken


Die Aufgabe ist, wie oben schon angegeben, das Relationenschema in die 3NF zu bringen. Da alle Attribute in der Menge F vorhanden sind, schreibe ich diese mal nicht hier seperat auf. In der 1NF ist das RSH ja so oder so, da es keine Mengenwertigen Attribute gibt, bzw. alle Attribute atomar sind. In der 2NF ist es ja noch nicht, da einzelne Attribute schon von einem Teil des Schlüssels abhängen, bspw.
code:
1:
TeileNr -> TeileBezeichnung

TeileNr & LieferantNr dürften ja zusammen der Schlüssel sein.
also würde ich das ganze so auslagern, in 3 Relationenschemata
Teil = { TeileNr, TeileBezeichnung }
Lieferant = { LieferantNr, LieferantName, LieferantOrt }
Rsh = { TeileNr, LieferantNr, TeilePreis, LagerOrt, Bestand }

so wäre es ja dann in der 2NF, wenn ich micht nicht irre. Die 3NF ist ja dann, dass es keine transitiven Abhängigkeiten mehr gibt (oder auch, dass aus keinem Nichtschlüsselattribut ein anderes Nichtschlüsselattribut folgt), aber da bin ich mir nicht ganz sicher. In dem RSH Rsh ist ja TeileNr & LieferantNr Primärschlüssel und das darf man ja nicht auseinanderreißen, da beide zusammen bspw. den TeilePreis bestimmen oder den LagerOrt aber das ist ja hier nicht erforderlich?
Es scheint ja keine transitiven Abhängigkeiten zu geben, da kein Nichtschlüsselattriibut ein anderes bestimmt also wäre es doch so in der 3NF, oder?
Was jetzt noch fehlt ist, wie wir es zumindest gelernt haben, dass man bspw. sagt, TeileNr in Rsh ist FS bzgl. TeileNr in Teil und LieferantNr ist FS bzgl. LieferantNr in Lieferant und so wäre es doch dann in der 3NF, richtig?

Ich will nur noch einmal sichergehen, dass ich wirklich alles richtig gemacht habe.
Thema: Parallele Matrixmultiplikation
Liquid

Antworten: 0
Hits: 2.679
Parallele Matrixmultiplikation 27.11.2017 05:13 Forum: Praktische Informatik


Wir sollen gerade eine parallele Matrixmultiplikation implementieren und wir haben dafür auch Pseudo-Code gekriegt aber leider komme ich damit nicht ganz klar. Wir sollen nämlich die Matrizen zunächst in Submatrizen aufteilen, dann parallel multiplizieren und dann wieder die Ergebnissubmatrizen aus der gesplitteten Matrix bilden. Leider ist der Pseudo-Code aber absolut nicht vollständig und unser Prof. hat da auch nicht großartig mehr zu gesagt, außer das am Anfang die Matrizen A und B gesplittet werden solllen und am Ende soll die Ergebnismatrix aus der gesplitteten Matrix C, die berechnet wrude gebildet werden und das nur die Berechnung parallel sein soll.

Da ich leider aber mit der Unterteilung in die Submatrizen klar komme, komme ich leider auch mit dem gesamten nicht weiter. Den Pseudo-Code habe ich als Anhang hochgeladen und hier ist das, was ich bis jetzt habe:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
public static Matrix multParallel(final Matrix matA, final Matrix matB) {	
    Matrix[][] matASplit = split(matA);
    Matrix[][] matBSplit = split(matB);
    
    final int matASplitRows = matASplit.length;
    final int matBSplitCols = matBSplit[0].length;
    final int cpuCount = Runtime.getRuntime().availableProcessors();
    Matrix[][] matCSplit = new Matrix[matASplitRows][matBSplitCols];
    
    TimeUnit tUnit = TimeUnit.MINUTES;
    BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<Runnable>(matASplitRows * matBSplitCols + 1);
    ThreadPoolExecutor threadpool = new ThreadPoolExecutor(cpuCount, cpuCount + 2, 10, tUnit, workQueue);
	    
    for(int i = 0; i < matASplit.length; i++) {
    	final int iF = i;
    	for(int l = 0; l < matBSplit[0].length; l++) {
    	    final int lF = l;
	    threadpool.execute(new Runnable() {    	
                int j, k;
	        @Override
	        public void run() {
	            for(j = 0, k = 0; j < 1; j++, k++) { 
	                matCSplit[iF][lF].data[j][k] += matASplit[iF][lF].data[j][1] * matBSplit[iF][lF].data[1][k] + matASplit[iF][lF].data[j][2] * matBSplit[iF][lF].data[2][k]; 
	            }
	        }
	    });
    	}
    }
    
    try {
	threadpool.shutdown();
	if(!threadpool.awaitTermination(500, TimeUnit.MILLISECONDS)) {
            threadpool.shutdownNow();
	    threadpool.awaitTermination(500, TimeUnit.MILLISECONDS);
        }
    } catch(InterruptedException e) {
        e.printStackTrace();
    }
	
    return Matrix.merge(matCSplit);
}


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
private static Matrix[][] split(Matrix mat) {
	int currentRowIndex = 0;
	int currentColIndex = 0;
	int currentNewMatRow = 0;
	int currentNewColRow = 0;
	final int rowsOfMat = mat.getNumberOfRows();
	final int colsOfMat = mat.getNumberOfColumns();
	Matrix[][] splittedMatrix = new Matrix[rowsOfMat * 100][colsOfMat * 100];
	
	while(currentRowIndex < (rowsOfMat - 1)) {
		while(currentColIndex < (colsOfMat - 1)) {
			double[][] newMatData = new double[2][2];
			for(int j = 0; j < 2; j++) {
				for(int k = 0; k < 2; k++) {
					newMatData[j][k] = mat.data[currentRowIndex + j][currentColIndex + k];
				}
			}
			currentColIndex += 2;
			splittedMatrix[currentNewMatRow][currentNewColRow++] = new Matrix(newMatData);
		}
		currentNewMatRow++;
		currentColIndex = 0;
		currentRowIndex += 2;
	}
	return splittedMatrix;	
}


Ich bin mir ehrlich gesagt aber absolut nicht sicher, ob ich so richtig die Untermatrizen in der split Methode gebildet habe und ich weiß auch nicht, wie ich da die Anzahl an Zeilen und Spalten berechnen soll, die für die gesplittete Matrix gebraucht werden. Die Rechnung ist natürlich so noch nicht korrekt, aber ich wollte einfach erst einmal ein weng diskutieren, ob ich das bis dahin so richtig habe und ein wenig Hilfe einholen.

Man brauch doch auch dieses 2D-Array aus Matrizen, denn eine Dimension würde ja noch nicht reichen oder würde eine auch reichen? Ich bin gerade total verwirrt, deswegen frage ich hier mal lieber nach.
Thema: Epsilon aus Grammatik (genauer Startregel) entfernen?
Liquid

Antworten: 1
Hits: 3.259
Epsilon aus Grammatik (genauer Startregel) entfernen? 09.02.2017 21:30 Forum: formale Sprachen


Wenn ich eine Grammatik mit dem Produktionen
S -> Epsilon | SS | [S] | (S)

wie kann ich dann das Epsilon entfernen? Ist das nicht ein Sonderfall gewesen oder kann ich das auch so ersetzen?

S -> SS | [S] | (S) | S | [] | ()

oder wäre das nicht gültig?
War da nicht irgendwas mit einem Sonderfall oder würde das so, wie oben beschrieben auch gehen? Ansonsten war das ja glaube ich so, das man eine neue Startregel einführt, die dann auf die alte übergeht oder wie war das?

S' -> Epsilon | S
S -> SS | [S] | (S)

Wären die beiden Sachen äquivalent oder wäre nur das zweite richtig bzw. ist überhaupt eins davon riichtig?

Das Ziel ist eigentlich eine Chomsky-Normalform zu erstellen aber geht das überhaupt mit nur einer Regel oder sollte man da die Grammatik lieber verändern?
Zeige Beiträge 1 bis 6 von 6 Treffern