»Beispiele (Schüler planen Klassen) -
Normale Denkverarbeitungsmethoden und Optimierungsverarbeitungsmethoden:
Zum Beispiel Planungskurse für Schüler. Studenten und Kurse sind eine viel zu viele Beziehung.
Laut normaler Logik sollte es eine Assoziationstabelle geben, um die Beziehung zwischen den beiden aufrechtzuerhalten.
Fügen Sie nun eine Einschränkung zur Überprüfung hinzu. Zum Beispiel: Die Kurse, die Zhang San im letzten Semester erfahren hat, sollte für solche Kurse bei der Planung von Kursen nicht geplant werden.
Daher muss eine Einschränkungstabelle (d. H. Historische Klassentabelle) erscheinen.
Das heißt: Zeitpläne für die Auswahl der Schüler erfordern die Note -Tabellen der Schüler als Einschränkungen.
―Scheme 1: Normale Verarbeitungsmethode -
Wenn ein Schüler die Kursauswahl erneut übernimmt. Sie müssen den Kursauswahlplan des Schülers überprüfen, um festzustellen, ob er bereits vorhanden ist.
Das heißt, die folgende Überprüfung ist:
// Abfragen Sie, ob die Daten mit dem Studiencode und dem Kurscode A und B vorhanden sind // Die Liste Set speichert alle Daten der Studienkursauswahldatensätze in der Liste <StudentRecordentity> listStudentrecord = service.findall (); // Die Daten abfragen, um festzustellen, ob StudentRecordEntity bereits existiert EnsR = listStudentrecord.find (s => s.StudentCode == a && s.code == b); If (Ensr == null) {// Student hat diesen Kurs nicht gewählt // ....} else {// Student hat diesen Kurs ausgewählt // ....}Der obige Code ist sehr präzise. Und es ist sehr leicht zu verstehen.
Angenommen, es gibt 5.000 Studenten und 100 Kurse. Dann, damit der Datensatz für Schüler Kurse auswählen kann, beträgt das Datenvolumen 5.000*100. Das Datenvolumen ist die Größenordnung der 100.000 -Ebene.
Unter den 100.000 Daten befragen Sie einen Aufzeichnung von student = a kurs = B. Die Ausführung ist ineffizient. Da die Abfrage der Find -Methode auch die Abfrage ist, sucht die Suche nach dem Datensatz.
Verwenden Sie also den obigen Code. Wenn das Datenvolumen allmählich zunimmt, sinkt die Ausführungseffizienz des Programms erheblich.
PS: Das Datenvolumen wächst, was in diesem Beispiel nicht sehr geeignet ist. Das Beispiel ist möglicherweise nicht angemessen. Wie auch immer, das bedeutet es wahrscheinlich. )
―Schem 2: Verwenden Sie den Speicher zur Optimierungseffizienz -
Diese Praxis erfordert Speicherkonsum. Oder die Überprüfung durchführen (Dateninitialisierung wird während der Bereitstellung des Systems durchgeführt). Das heißt: Wenn die Seite geladen wird, werden die Daten nur zur Überprüfung der bereitgestellten öffentlichen Methode aufgerufen.
// Student Code to Array Index Private Dictionary <String, int> _dicStudentCodetoArrayIndex; // Kurscode zum Datenindex Private Dictionary <String, int> _dicCourSeCodetoArrayIndex; // Alle Schülerlisten <Studententity> Listenstudent = Service.findallstudent (); ListCourse=service.findAllCourse();//All students’ course selection record List<StudentCourseEntity> ListStudentRecord=service.finAll();Private int[,] _ConnStudentRecord=new int[ListStudent.count,ListCourse.count];//Construct an array of students and courses to quickly find dictionary index Private void GenerateDic(){For(int i = 0; i <listStudent.count; i ++) _dicStudentCodetoArrayIndex.Add (Liststudent [i] .code, i)} für (int i = 0; i <listCourse.count; i ++) {_ diccourSecodetoArrayIndex.add (listDd (listCourse). Zweidimensionales Array für die Auswahl der Studierenden. 1 bedeutet, dass der Student den Kurs ausgewählt hat. y = diccourseCodetoArrayIndex [sre.coursecode]; connstudentrecord [x, y] = 1;}} // Methode öffnen: Fragen Sie, ob der Kursauswahldatensatz basierend auf dem Student -Code und dem Kurscode /// <returns> zurücksend 1 bedeutet, dass er existiert. Rückgabe 0 bedeutet, dass es nicht existiert </return> public void verififyRecordbYNTudentCodeAndCourSeCode (String pstudentCode, String pcoursecode) {int x = _dicstudentCodetoIndex [pstudentCode]; int y = _diccodetoyIndex [pcoursecode]; return Connstudentrecord [x, y];}"Performance -Analyse -
Analysieren Sie das Erscheinungsbild der zweiten Lösung.
1. Es gibt viele Möglichkeiten.
2. Es werden viele Variablen verwendet.
Zunächst muss ich darüber sprechen. Der Zweck dieser Optimierung ist es, das LAG -Phänomen (große Menge an Überprüfungsdaten) zu verbessern, denen die Schüler bei der Auswahl von Kursen begegnen.
Die obigen zwei Systeme werden separat analysiert:
Angenommen, der Schüler ist n und der Kurs ist m
Die erste Lösung:
Die Zeitkomplexität ist leicht zu berechnen, die erste Lösung mit einem Minimum von O (NM)
Die zweite Lösung:
1. Es gibt viele Codes. Der Benutzer stellt jedoch nur eine VerifyRecordByRtudentCodeandCourSecode -Methode bereit.
2. Es gibt viele Variablen, da diese Lösung die Verwendung des Speichers zur Verbesserung der Effizienz verwenden soll.
Ausführungsprozess dieser Methode: 1. Verwenden Sie den Code im Wörterbuch, um Index2 zu finden, und verwenden Sie den Index, um das Array abzufragen.
Im ersten Schritt verwendet die Abfrage im Wörterbuch den Hash -Suchalgorithmus. Die zeitliche Komplexität ist O (LGN) und die Zeit ist relativ schnell. Der zweite Schritt ist, dass die Zeitkomplexität O (1) ist, da das Array kontinuierlich ist. Der Index sucht direkt in die entsprechende Adresse nach.
Daher wird die zweite Lösung zur Überprüfung verwendet, und die zeitliche Komplexität der zweiten Lösung ist O (LGN+LGM)
-Zusammenfassen-
In der obigen Analyse ist ersichtlich, dass Gedächtnisbemühungen die Ausführungseffizienz des Programms verbessern können. Das obige ist nur ein Beispiel, und die Qualität der Optimierung hängt von der verwendeten Datenstruktur ab.
Das obige ist der gesamte Inhalt dieses Artikels über die Datenstruktur -Instanzcode für Java Performance -Optimierungsoptimierungsdatenstruktur. Ich hoffe, er wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!