- أمثلة عرض (جدولة الطلاب) -
طرق معالجة التفكير العادي وطرق معالجة التحسين:
على سبيل المثال ، فصول الجدولة للطلاب. الطلاب والدورات التدريبية هي علاقة كثيرة.
وفقًا للمنطق الطبيعي ، يجب أن يكون هناك جدول رابطة للحفاظ على العلاقة بين الاثنين.
أضف الآن قيدًا للتحقق. على سبيل المثال: لا ينبغي تحديد جدولة الدورات التدريبية Zhang San في هذه الدورات عند جدولة الفصول الدراسية.
لذلك ، يجب أن يظهر جدول القيد (أي جدول الصف التاريخي).
أي: تتطلب جداول اختيار الدورة التدريبية للطلاب جداول الطلاب كقيود.
―scheme 1: طريقة المعالجة العادية -
عندما يأخذ الطالب اختيار الدورة مرة أخرى. تحتاج إلى التحقق من جدول اختيار الدورة للطالب لمعرفة ما إذا كان موجودًا بالفعل.
أي أن التحقق التالي هو:
// استعلام ما إذا كانت البيانات التي تحتوي على رمز الطالب ورمز الدورة A و B موجودة على التوالي // مجموعة القائمة تخزن جميع بيانات سجلات اختيار الدورة الطالب في القائمة <TudentReCordentity> listStudentRecord = service.findall () ؛ // استعلام البيانات لمعرفة ما إذا كان studentRecordentity موجود بالفعل eStr = listStudentRecord.find (s => s.StudentCode == A && S.Code == B) ؛ if (eSTr == null) {// لم يختار الطالب هذه الدورة // ....} آخر {// قد حدد الطالب هذه الدورة // ....}الرمز أعلاه موجز للغاية. ومن السهل جدًا الفهم.
أولاً ، لنفترض أن هناك 5000 طالب و 100 دورة. ثم بالنسبة لمجموعة البيانات للطلاب لاختيار الدورات التدريبية ، سيكون حجم البيانات 5000*100. سيكون حجم البيانات هو ترتيب مستوى 100000.
من بين 100000 بيانات ، استعد سجل الطالب = دورة = ب. سيكون التنفيذ غير فعال. لأن الاستعلام عن طريقة Find هو أيضًا مكان الاستعلام ، أي البحث عن طريق اجتياز مجموعة البيانات.
لذلك ، استخدم الكود أعلاه. مع زيادة حجم البيانات تدريجياً ، ستنخفض كفاءة تنفيذ البرنامج بشكل كبير.
ملاحظة: ينمو حجم البيانات ، وهو غير مناسب جدًا في هذا المثال. قد لا يكون المثال مناسبًا. على أي حال ، ربما هذا ما يعنيه. )
―scheme 2: استخدم الذاكرة لكفاءة التحسين -
هذه الممارسة تتطلب استهلاك الذاكرة. أو هل يعمل التحقق إلى الأمام (يتم تنفيذ تهيئة البيانات أثناء نشر النظام). هذا هو: عندما يتم تحميل الصفحة ، يتم استدعاء البيانات فقط إلى الطريقة العامة المقدمة للتحقق.
// رمز الطالب لفهرس صفيف القاموس الخاص <string ، int> _dicStudentCodeToArarayIndex ؛ // رمز الدورة التدريبية إلى فهرس البيانات القاموس الخاص <string ، int> _diccoursecodeToarRayIndex ؛ قائمة سجلات اختيار الدورة التدريبية للطلاب <TudentCourceEntity> listStudentRecord = service.finall () ؛ private int [،] _connstudentRecord = new int [liststudent.count ، listcourse.count] _dicStudentCodeToArrayIndex.add (liststudent [i] .code ، i)} لـ (int i = 0 ؛ i <listcourd.count ؛ i ++) {_ diccoursecourtoarrayIndex.add (listcourse [i] 1 يعني أن الطالب قد اختار الدورة التدريبية الخاصة باختصار void generatearray () {foreach (studentRecordentity SRE في liststudentRecord) {int x = _dicstudentCodeToArrayIndex [sre.StudentCode] ؛ int y = diccoursecodetoarrayIndex [sre.coursecode] ؛ connstudentRecord [x ، y] = 1 ؛} // المفتوح الطريقة: الاستعلام ما إذا كان سجل اختيار الدورة موجودًا بناءً على رمز الطالب ورمز المقرر /// <إرجاع> إرجاع 1 يعني أنه موجود. العائد 0 يعني أنه غير موجود </returns> public void VerifyRecorDbyStudentCodeAndCoursecode (String pstudentCode ، String pcoursecode) {int x = _dicstudentCodeToArayIndex [pstudentCode] ؛ int y = _diccoursecodetoindeex connstudentRecord [x ، y] ؛}تحليل الأداء
تحليل مظهر الحل الثاني.
1. هناك طرق عديدة.
2. هناك العديد من المتغيرات المستخدمة.
بادئ ذي بدء ، لا بد لي من التحدث عن ذلك. الغرض من هذا التحسين هو تحسين ظاهرة التأخر (كمية كبيرة من بيانات التحقق) التي يواجهها الطلاب عند اختيار الدورات.
يتم تحليل المخططين أعلاه بشكل منفصل:
افترض أن الطالب ن والدورة م
الحل الأول:
تعقيد الوقت سهل حساب الحل الأول بحد أدنى من O (NM)
الحل الثاني:
1. هناك العديد من الرموز. لكن المستخدم يوفر فقط طريقة VERIFYRECORDBYSTUDENTCODEANDCOURSecode.
2. هناك العديد من المتغيرات ، لأن هذا الحل هو استخدام الذاكرة لتحسين الكفاءة.
عملية تنفيذ هذه الطريقة: 1. استخدم الكود في القاموس للعثور على الفهرس 2 ، واستخدام الفهرس للاستعلام عن الصفيف.
في الخطوة الأولى ، يستخدم الاستعلام في القاموس خوارزمية بحث التجزئة. التعقيد الزمني هو O (LGN) والوقت سريع نسبيا. الخطوة الثانية هي أن التعقيد الزمني هو O (1) ، لأن الصفيف مستمر. سوف يبحث الفهرس مباشرة عن العنوان المقابل.
لذلك ، يتم استخدام الحل الثاني للتحقق ، والتعقيد الزمني للحل الثاني هو O (LGN+LGM)
-صيب-
من خلال التحليل أعلاه ، يمكن ملاحظة أن جهود الذاكرة يمكن أن تحسن كفاءة تنفيذ البرنامج. ما سبق هو مجرد مثال ، وتتعتمد جودة التحسين على بنية البيانات المستخدمة.
ما سبق هو المحتوى الكامل لهذه المقالة حول رمز مثيل بنية بيانات تحسين أداء Java ، وآمل أن يكون مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!