مرحبًا! محاضرة اليوم ستكون مختلفة قليلا عن البقية. وسوف يختلف من حيث أنه يرتبط بشكل غير مباشر فقط بجافا. ومع ذلك، هذا الموضوع مهم جدا لكل مبرمج. سنتحدث عن الخوارزميات . ما هي الخوارزمية؟ بعبارات بسيطة، هذا هو تسلسل معين من الإجراءات التي يجب تنفيذها لتحقيق النتيجة المرجوة . غالبًا ما نستخدم الخوارزميات في الحياة اليومية. على سبيل المثال، تواجهك كل صباح مهمة: الحضور إلى المدرسة أو العمل، وفي نفس الوقت:
- يرتدي
- ينظف
- تغذية جيدة
- استيقظ على المنبه.
- استحم، اغسل وجهك.
- تحضير وجبة الإفطار، وتحضير القهوة/الشاي.
- يأكل.
- إذا لم تقم بكوي ملابسك منذ المساء، قم بكويها.
- يرتدى ملابسة.
- اترك المنزل.
- قم بالشراء أو التنزيل على الإنترنت "قاموس الأسماء الشخصية الروسية" طبعة 1966.
- ابحث عن كل اسم في قائمتنا في هذا القاموس.
- اكتب على قطعة من الورق أي صفحة من القاموس يوجد الاسم.
- رتّب الأسماء باستخدام الملاحظات الموجودة على قطعة من الورق.
for
تؤدي هذه المهمة
int[] numbers = new int[100];
// ..заполняем массив числами
for (int i: numbers) {
System.out.println(i);
}
ما هو مدى تعقيد الخوارزمية المكتوبة؟ خطي، O(N). يعتمد عدد الإجراءات التي يجب على البرنامج تنفيذها على عدد الأرقام التي تم تمريرها إليه بالضبط. إذا كان هناك 100 رقم في المصفوفة، فسيكون هناك 100 إجراء (مخرجات على الشاشة)، وإذا كان هناك 10000 رقم في المصفوفة، فسيلزم تنفيذ 10000 إجراء. هل يمكن تحسين الخوارزمية لدينا؟ لا. على أية حال، سيتعين علينا جعل N يمر عبر المصفوفة وتنفيذ N مخرجات إلى وحدة التحكم. دعونا ننظر إلى مثال آخر.
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
لدينا رقم فارغ LinkedList
ندخل فيه عدة أرقام. نحتاج إلى تقدير مدى تعقيد الخوارزمية الخاصة بإدراج رقم واحد في LinkedList
مثالنا، وكيف يعتمد ذلك على عدد العناصر في القائمة. الجواب هو O(1) - التعقيد المستمر . لماذا؟ يرجى ملاحظة: في كل مرة نقوم بإدخال رقم في بداية القائمة. بالإضافة إلى ذلك، كما تتذكر، عند إدراج الأرقام في LinkedList
العناصر، لا يتم نقلها إلى أي مكان - تتم إعادة تعريف الروابط (إذا نسيت فجأة كيفية عمل LinkedList، فقم بإلقاء نظرة على إحدى محاضراتنا القديمة ). إذا كان الرقم الأول في قائمتنا الآن هو الرقم х
، وقمنا بإدراج الرقم y في بداية القائمة، فكل ما نحتاجه هو:
x.previous = y;
y.previous = null;
y.next = x;
بالنسبة لإعادة تعريف المرجع هذا، لا يهمنا عدد الأرقام الموجودة الآنLinkedList
- واحد على الأقل، مليار على الأقل. سيكون تعقيد الخوارزمية ثابتًا - O(1).
GO TO FULL VERSION