You are on page 1of 52

‫‪H‬‬

‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬

‫)?(‪O‬‬

‫الخوارزميات وبنى المعطيات‬


‫تعقيد الخوارزميات‬

‫د‪ .‬ندى غـنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫ماذا يعني تحليل خوارزمية؟‬
‫تحليل خوارزمية يعني دراسة ما يلي‪:‬‬
‫‪ .1‬صحة الخوارزمية‬
‫كم العمل الالزم للوصول إلى الحل‬
‫‪ّ .2‬‬
‫‪ .3‬حجم الذاكرة الضروري‬
‫‪ .4‬البساطة‬
‫‪ .5‬األمثلية‬

‫د‪ .‬ندى غنـيم‬


‫لماذا نحلّل الخوارزميات؟‬
‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬

‫تحسين الخوارزمية‬ ‫‪‬‬

‫إجراء مقارنة بين مجموعة من الخوارزميات التي‬ ‫‪‬‬


‫تحل المسألة نفسها بهدف اختيار األنسب‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫‪ .1‬صحة الخوارزمية‬
‫الشروط المسبقة ‪ : Preconditions‬يجب التحقق من طبيعة الدخل‬ ‫‪‬‬
‫الذي تُطبق عليه الخوارزمية‪.‬‬
‫الشروط الالحقة ‪ : Postconditions‬يجب أن نعرف طبيعة الخرج‬ ‫‪‬‬
‫الذي يجب أن تولّده الخوارزمية‪.‬‬

‫برهان صحة خوارزمية يعني برهان التالي‪:‬‬ ‫‪‬‬


‫”يف حال كانت الشروط املسبقة حمققة‪ ،‬و‬
‫إذا انتهى تنفيذ اخلوارزمية‪،‬‬
‫فإن الشروط الالحقة حمققة“‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫‪ .2‬ك ّم العمل الالزم للوصول إلى الحل‬

‫زمن تنفيذ الخوارزمية على آلة ما؟‬ ‫‪‬‬

‫تعقيد الخوارزمية؟‬ ‫‪‬‬

‫كيف نقيس؟‬ ‫‪‬‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫قياس زمن التنفيذ‬
‫دراسة تجريبية ‪Experimental Study‬‬ ‫‪‬‬

‫اكتب برنامجا ً ِّ‬


‫ينجز الخوارزمية‬ ‫‪‬‬

‫نفذ البرنامج على مجموعة من المعطيات تختلف في حجمها‬ ‫‪‬‬


‫وفي تركيبتها‪.‬‬
‫استخدم طريقة مثل ‪ )(clock‬للحصول على قياس دقيق لزمن‬ ‫‪‬‬
‫التنفيذ الفعلي‪.‬‬
‫إذا كان هناك عدداً كبيراً من مجموعات المعطيات‪ ،‬فبإمكانك‬ ‫‪‬‬
‫منحن يوافق تعقيد الخوارزمية‪.‬‬
‫ٍ‬ ‫الحصول على‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫الدراسات التجريبية ؟‬
‫للدر‪8‬اسات التجريبية عدة مساوئ‪:‬‬ ‫‪‬‬

‫من الضروري تنفيذ واختبار الخوارزمية لتحديد زمن‬ ‫‪‬‬


‫تنفيذها‪.‬‬
‫يمكن إجراء التجارب على مجموعة محدودة فقط من‬ ‫‪‬‬
‫الدخل‪ ،‬ويمكن أن تكون هذه المجموعات غير ذات داللة‬
‫على زمن تنفيذ مدخالت أخرى غير موجودة ضمن‬
‫التجربة‪.‬‬
‫عند مقارنة خوارزميتين‪ ،‬يجب استخدام نفس البيئة‬ ‫‪‬‬
‫البرمجية ‪ software‬والعتادية ‪.hardware‬‬
‫د‪ .‬ندى غنـيم‬
‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫التعقيد ‪Complexity‬‬
‫منهجية عامة لتحليل زمن تنفيذ الخوارزميات ‪:‬‬ ‫‪‬‬

‫تستخدم وصفا ً عالي المستوى للخوارزمية بدالً من اختبار‬ ‫‪‬‬


‫أحد تنفيذاتها‪.‬‬
‫تأخذ بعين االعتبار جميع المدخالت المحتملة‪.‬‬ ‫‪‬‬

‫تسمح بتقييم فعالية أية خوارزمية بطريقة مستقلة عن‬ ‫‪‬‬


‫البيئة البرمجية والعتادية‪.‬‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫تعقيد الخوارزميات‬
‫العمليات األولية‪ :‬حسابات منخفضة المستوى مستقلة إلى ٍ‬
‫حد كبير‬ ‫‪‬‬
‫عن لغة البرمجة ويمكن تعرفها في الرماز المفترض‪ ،‬مثل‪:‬‬
‫استدعاء طريقة والعودة من طريقة (‪)return‬‬ ‫‪‬‬

‫إجراء عملية حسابية (مثل الجمع‪)... ،‬‬ ‫‪‬‬

‫مقارنة عددين‪ ،‬إلخ‪.‬‬ ‫‪‬‬

‫يمكننا بالتدقيق في الرماز المفترض عد العمليات األولية التي تنفذها‬ ‫‪‬‬


‫الخوارزمية‪.‬‬

‫د‪ .‬ندى غنـيم‬


‫تعقيد الخوارزميات‬
‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬

‫بداللة ”حجم معطيات الدخل“‪:‬‬


‫نعد عدد مرات الدخول في الحلقة‬ ‫‪ُّ ‬‬
‫‪ ‬يمكن أن نختار عمليات أساسية ذات عالقة وثيقة‬
‫بالعمل الذي تقوم به الخوارزمية ونع ّدها فقط‪ ،‬دون‬
‫االلتفات إلى العمليات الثانوية‪.‬‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫أمثلة على عمليات أساسية‬
‫العملية األساسية‬ ‫المسألة‬
‫مقارنة كلمتين‬ ‫البحث عن الكلمة ‪ x‬داخل‬
‫صفيفة من األسماء‬
‫جداء عددين حقيقيين‬ ‫جداء مصفوفتين‬
‫مقارنة عددين من صفيفة الدخل‬ ‫فرز صفيفة من األعداد الحقيقية‬
‫عدد مرات استدعاء اإلجرائية العودية‬ ‫مسألة تستدعي إجرائيات عودية‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫قواعد حساب زمن تنفيذ خوارزمية‬
‫بعد تحديد أنواع العمليات األولية‪ ،‬يتم َعـد العمليات من كل نوع‪،‬‬ ‫‪‬‬
‫وذلك تبعاً لما يلي‪:‬‬
‫‪ ‬بالنسبة إلى العمليات المتتالية فإن الزمن هو مجموع األزمنة‪.‬‬
‫بالنسبة إلى العملية الشرطية‬ ‫‪‬‬

‫)‪X=if (c) then (a) else (b‬‬


‫يحسب حد أعلى لعدد العمليات‪ .‬إذا كان )‪T(X‬عدد العمليات‬
‫األولية في ‪ X‬فإن‬
‫))‪T(X)  T(c)  Max(T(a), T(b‬‬
‫د‪ .‬ندى غنـيم‬
‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫قواعد حساب زمن تنفيذ خوارزمية‬
‫بالنسبة إلى الحلقات‪ ،‬فإن عدد العمليات هو‪:‬‬ ‫‪‬‬

‫)‪ΣT(i‬‬
‫حيث ‪ i‬هو المتحول الذي يتحكم بالحلقة‪ ،‬و)‪ T(i‬عدد العمليات‬
‫األولية المتعلقة بالمرور رقم ‪ i‬في الحلقة‪.‬‬
‫بالنسبة إلى طلب (استدعاء) إجرائية تحسب درجة تعقيد اإلجرائية‬ ‫‪‬‬
‫باتباع نفس القواعد (حساب عدد العمليات األولية في اإلجرائية)‪.‬‬
‫بالنسبة إلى اإلجرائيات العودية‪ ،‬تستخدم عالقتها العودية لحساب‬ ‫‪‬‬
‫درجة التعقيد ))‪.T(n) = f(T(g(n‬‬
‫د‪ .‬ندى غنـيم‬
‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫نظرية عامة‬
‫إذا استطعنا وضع معادلة التعقيد الزمني على الشكل‪:‬‬
‫‪T(1)=p‬‬
‫‪T(n) = aT(n/b) + cnk‬‬
‫تكون لدينا الحاالت الثالث التالية‪:‬‬
‫) ‪Case (1): a  bk then T(n) is O(nlogba‬‬
‫)‪Case(2): a = bk then T(n) is O(nk logn‬‬
‫) ‪Case(3): a < bk then T(n) is O(nk‬‬
‫د‪ .‬ندى غنـيم‬
‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫”حجم معطيات الدخل“؟‬
‫‪ ‬مثال ‪:‬‬
‫العمليات الالزمة لفرز صفيفة من ‪ 1000‬عدد >‬
‫عدد العمليات الالزمة لفرز صفيفة من ‪ 10‬أعداد‪.‬‬

‫نحتاج إلى مقياس لحجم المعطيات‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫أمثلة على مقياس حجم المعطيات‬
‫حجم المعطيات‬ ‫المسألة‬
‫عدد األسماء في الصفيفة‬ ‫البحث عن كلمة ‪ x‬داخل‬
‫صفيفة من األسماء‬
‫أبعاد المصفوفات‬ ‫جداء مصفوفتين‬
‫عدد األعداد في الصفيفة‬ ‫فرز صفيفة من األعداد‬
‫الحقيقية‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫الحالة الوسطية ‪ | Average Case‬الحالة األسوأ ‪Worst Case‬‬

‫يمكن أن يكون تنفيذ خوارزمية ما على مجموعة‬ ‫‪‬‬


‫معينة من المعطيات أسرع من تنفيذها على معطيات‬
‫أخرى‬
‫مثال‪ :‬فرز صفيفة شبه مرتبة ‪ /‬فرز صفيفة غير مرتبة‬ ‫‪‬‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫الحالة الوسطية ‪ | Average Case‬الحالة األسوأ ‪Worst Case‬‬

‫يمكن أن يكون إيجاد الحالة الوسطية صعباً جداً‪ ،‬لذلك يقاس‬ ‫‪‬‬
‫تعقيد الخوارزميات عادة بالتعقيد الزمني في الحالة األسوأ‪.‬‬
‫كذلك‪ ،‬تكون معرفة التعقيد الزمني في الحالة األسوأ في‬ ‫‪‬‬
‫بعض التطبيقات الخاصة أمراً أساسياً‪:‬‬
‫التحكم في حركة المطارات‪،‬‬ ‫‪‬‬

‫العمليات الجراحية‪.‬‬ ‫‪‬‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫‪Worst-Case Complexity‬‬ ‫التعقيد في أسوأ الحاالت‬

‫تابع التعقيد في أسوأ الحاالت )‪W(n‬هو أكبر عدد من العمليات‬


‫يمكن أن تقوم بها الخوارزمية لحل مسألة من أجل أي دخل حجمه‬
‫‪.n‬‬
‫}‪W(n)=max {t(i): iDn‬‬
‫حيث‪:‬‬
‫‪ Dn‬مجموعة معطيات الدخل التي حجمها ‪،n‬‬ ‫‪‬‬

‫‪ i‬أحد عناصر ‪ ،Dn‬و)‪ t(i‬عدد العمليات األساسية التي تنفذها‬ ‫‪‬‬


‫الخوارزمية لحل المسألة من أجل الدخل ‪.i‬‬
‫د‪ .‬ندى غنـيم‬
‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫‪Average-Case Complexity‬‬ ‫التعقيد في الحالة الوسطى‬

‫تابع التعقيد في الحالة الوسطى )‪ A(n‬هو متوسط عدد‬


‫العمليات التي تقوم بها الخوارزمية من أجل كل معطيات‬
‫الدخل التي حجمها ‪n‬‬
‫)‪A(n)= Pr(i) * t(i‬‬
‫حيث )‪ Pr(i‬احتمال ورود الدخل ‪i‬‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫مالحظات‬
‫أسوأ الحاالت مرتبطة بطريقة عمل الخوارزمية‬ ‫‪‬‬
‫‪ ‬هنا عندما يكون العدد في الموقع األخير مثالً ‪.‬‬

‫ما هي أسوأ الحاالت في خوارزمية تبحث عن العدد من‬ ‫‪‬‬


‫الموقع األخير إلى الموقع األول؟‬

‫د‪ .‬ندى غنـيم‬


‫مراجعة رياضية‬
‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬

‫اللوغاريتمات والرفع إلى أس‪.‬‬ ‫‪‬‬

‫المتتاليات ‪Summations‬‬ ‫‪‬‬

‫العالقات العودية ‪recurrence relations‬‬ ‫‪‬‬

‫د‪ .‬ندى غنـيم‬


H
I
AS
T
‫اللوغاريتمات والرفع إلى أس‬: ‫مراجعة رياضية‬
:‫تعريف‬ 

a = bc if logb a = c
:‫خواص‬ 
logb ac = logb a + logb c c
(ba) = ba c
logb a/c = logb a - logb c
logb ac = c . logb a ba bc = ba + c

logb a = logc a / logc b ba / bc = ba - c


b = alogab
b logca = a logcb

‫ ندى غنـيم‬.‫د‬
‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫مراجعة رياضية‪ :‬المتتاليات‬
‫‪t‬‬ ‫تعريف‪:‬‬ ‫‪‬‬
‫‪‬‬‫‪is‬‬
‫) ‪f (i )  f ( s )  f ( s  1)  ...  f (t‬‬

‫حيث ‪ f‬دالة‪ s ،‬دليل البداية‪ ،‬و ‪ t‬دليل النهاية‪.‬‬

‫‪ ‬في المتتالية الهندسية ‪f(i) = a i‬‬


‫بأخذ عدد صحيح ‪ n  0‬و عدد حقيقي ‪a  1 < 0‬‬
‫‪n 1‬‬
‫‪n‬‬
‫‪1‬‬ ‫‪‬‬ ‫‪a‬‬
‫‪‬‬
‫‪i 0‬‬
‫‪a‬‬ ‫‪i‬‬
‫‪‬‬‫‪1‬‬ ‫‪‬‬ ‫‪a‬‬ ‫‪‬‬ ‫‪a‬‬ ‫‪2‬‬
‫‪‬‬ ‫‪...‬‬ ‫‪‬‬ ‫‪a‬‬ ‫‪n‬‬
‫‪‬‬
‫‪1 a‬‬
‫تبدي المتتالية الهندسية تزايداً أسيا ً‬ ‫‪‬‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫مراجعة رياضية‪ :‬المتتاليات (تتمة)‬
‫المتتالية الحسابية‪:‬‬ ‫‪‬‬
‫‪n‬‬
‫)‪n( n  1‬‬
‫‪‬‬
‫‪i 1‬‬
‫‪i ‬‬
‫‪2‬‬
‫متتاليات أخرى هامة‪:‬‬
‫‪n‬‬
‫)‪n( n  1)( 2n  1‬‬
‫‪i‬‬‫‪i 1‬‬
‫‪2‬‬
‫‪‬‬
‫‪6‬‬
‫‪n‬‬
‫‪n 2 ( n  1) 2‬‬
‫‪‬‬ ‫‪i‬‬ ‫‪3‬‬

‫‪i 1‬‬
‫‪‬‬
‫‪4‬‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫التدوين المقارب ‪Asymptotic Notation‬‬
‫الهدف‪ :‬تبسيط التحليل بالتخلص من المعلومات غير الضرورية‬ ‫‪‬‬

‫الرمز ‪”O “Big-Oh‬‬ ‫‪‬‬

‫لدينا الدالتان )‪ f(n‬و )‪ ،g(n‬نقول‬ ‫‪‬‬


‫أن)‪ f(n‬هي))‪ ، O(g(n‬إذا وفقط‬
‫إذا وجد ثابتان ‪ c‬و ‪n0‬بحيث أن‬
‫)‪ f(n) < c g(n‬من أجل جميع‬
‫قيم ‪ n‬التي تحقق ‪.n  n0‬‬

‫الدالتان )‪ f(n‬و )‪ g(n‬معرفتان‬ ‫‪‬‬


‫على األعداد الصحيحة غير‬
‫)‪ :O(g‬ا‪88‬لتوا‪8‬بع‪ 8‬ا‪88‬لتيت‪88‬نمو ب‪88‬سرعة ال‪ 8‬ت‪88‬تجاوز س‪88‬رعة‬ ‫السالبة‪.‬‬
‫‪.g‬‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫التدوين المقارب ‪Asymptotic Notation‬‬

‫)‪ :Θ(g‬ا لتوابع ا لتيت نمو ب سرعة م ماثلة ل سرعة ‪.g‬‬ ‫)‪ :Ω(g‬ا لتوابع ا لتيت نمو علىا ألقلب سرعة ‪.g‬‬
‫د‪ .‬ندى غنـيم‬
‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫التدوين المقارب (تتمة)‬

‫قاعدة بسيطة ‪ :‬أسقط الحدود األقل مرتبة والعوامل الثابتة‪.‬‬ ‫‪‬‬

‫‪ 7n - 3‬هي )‪O(n‬‬ ‫‪‬‬

‫‪ 8n 2 log n + 5n 2 + n‬هي )‪O(n 2 log n‬‬ ‫‪‬‬

‫د‪ .‬ندى غنـيم‬


‫لخوارزميات‬8‫صفوف خاصة من ا‬
H
I
AS
T

idealConstant 
goodlog(n) 
n 
n.log(n) 
poor n2 
n3 
awful en 

‫ ندى غنـيم‬.‫د‬
‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬

‫القيم الرقمية ألشهر التوابع‬

‫د‪ .‬ندى غنـيم‬


‫تعقيد ا‪8‬لخوارزميات‬
‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬

‫مثال‪:‬‬ ‫‪‬‬

‫‪ ‬إذا كانت لدينا خوارزمية ‪ P‬بزمن ‪،106n‬‬


‫‪ ‬وخوارزمية ‪ Q‬بزمن ‪،n2‬‬
‫‪ ‬وإذا كان لدينا‪ n<=106‬دوماً‪،‬‬
‫‪ ‬فما هي الخوارزمية الفضلى في هذه المسألة؟‬

‫‪ ‬الخوارزمية‪ Q‬هي الفضلى‬


‫د‪ .‬ندى غنـيم‬
‫تعقيد ا‪8‬لخوارزميات‬
‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬

‫إذا كان البرنامج بحاجة إلى ‪ 2n‬خطوة‪ ،‬وإذا كانت لدينا ‪n=40‬‬ ‫‪‬‬
‫‪ ‬عدد الخطوات تقريباً‪. 1012*1.1‬‬
‫فعلى حاسوب ينفذ بليون ‪ Giga‬عملية في الثانية فذلك يتطلب‬
‫‪ 18.3‬دقيقة‪.‬‬
‫إذا كانت‪ n=50  13‬يوماً‪.‬‬ ‫‪‬‬

‫إذا كانت‪ n=60  310.56‬سنة‪.‬‬ ‫‪‬‬

‫إذا كانت‪ n=100  4*1013‬سنة‪.‬‬ ‫‪‬‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬ ‫تعقيد ا‪8‬لخوارزميات‬
‫إذا كان البرنامج ذو درجة تعقيد كثيرة حدود بدرجة عالية‪ ،‬كأن‬ ‫‪‬‬
‫يحتاج إلى ‪ n10‬خطوة‪:‬‬
‫‪ n=10‬ثوان‪.‬‬ ‫إذا كانت‪ 10‬‬ ‫‪‬‬

‫إذا كانت‪ n=100  3171‬سنة‪.‬‬ ‫‪‬‬

‫إذا كانت‪ n=1000  3.17*1013‬سنة‪.‬‬ ‫‪‬‬

‫إذا كانت درجة التعقيد تحتاج إلى ‪ n3‬خطوة‪:‬‬ ‫‪‬‬


‫‪ n=1000‬ثانية‪.‬‬ ‫إذا كانت‪ 1‬‬ ‫‪‬‬

‫‪ n=10000‬دقيقة‪.‬‬ ‫إذا كانت‪ 110.67‬‬ ‫‪‬‬

‫إذا كانت‪ n=100000  11.57‬يوماً‪.‬‬ ‫‪‬‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫تعقيد الخوارزميات‬
‫من الناحية العملية‪ ،‬من المنطقي أنه من أجل ‪ n‬كبيرة (‪)n>100‬‬ ‫‪‬‬
‫تصبح البرامج ذات التعقيد المنخفض هي التي تعتبر ذات جدوى‬
‫(‪)n, n log n, n2, n3‬‬

‫حتى لو استطعنا إنشاء حواسيب تنفذ ‪ 1012‬عملية في الثانية‬ ‫‪‬‬


‫فسيتقلص زمن التنفيذ في الجدول بنسبة ‪. 103‬‬

‫عند ‪ n=100  3.17‬سنة لتنفيذ ‪ n10‬تعليمة و ‪ 1016*4‬سنة‬ ‫‪‬‬


‫لتنفيذ ‪ 2n‬تعليمة‪.‬‬

‫د‪ .‬ندى غنـيم‬


H
I
AS
T
‫ على التحليل المقارب‬1‫مثال‬
prefix averages ‫خوارزمية لحساب متوسطات األعداد السابقة‬

Algorithm prefixAverages1(X):
Input: An n-element array X of numbers.
Output: An n-element array A of numbers such that
A[i] is the average of elements X[0], ... , X[i].

Let A be an array of n numbers.


for i  0 to n - 1 do
a0
for j  0 to i do
a  a + X[j] O(n2)
A[i]  a / (i + 1)
return array A
‫ ندى غنـيم‬.‫د‬
H
I
AS
T
‫ على التحليل المقارب‬2‫مثال‬
:‫خوارزمية أفضل لحساب متوسطات األعداد السابقة‬
Algorithm prefixAverages2(X):
Input: An n-element array X of numbers.
Output: An n-element array A of numbers such that
A[i] is the average of elements X[0], ... , X[i].

Let A be an array of n numbers.


n 1 n 1
s 0
for i 0 to n - 1 do  (1  1)   2
s s + X[i] i 0 i 0

A[i] s / (i + 1)  2( n )  O ( n )
return array A

‫ ندى غنـيم‬.‫د‬
‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫مثال‪: 4‬خوارزمية تكرارية إليجاد مجموع عناصر صفيفة‬
‫خوارزمية تكرارية تقوم بإيجاد مجموع عناصر صفيفة ‪ A‬عدد عناصرها ‪n‬‬

‫)‪Algorithm Sum (…..‬‬


‫‪Input:.‬‬
‫‪Output:‬‬

‫د‪ .‬ندى غنـيم‬


H
I
AS
T
‫عدد الخطوات في كل تنفيذ‬
Number of steps per execution
Sum ‫التعقيد المقارب لـ‬
Statement s/e frequency Total steps
Float Sum(float a[], int n) 0 - O(0)

;float s = 0.0 { 1 1 O(1)

For (int I = 1; I<=n; I++) 1 n+1 O(n)

;S += a[I] 1 n O(n)

;Return s 1 1 O(1)

} 0 - O(0)

Total O(n)

‫ ندى غنـيم‬.‫د‬
‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫مثال‪: 4‬خوارزمية عودية إليجاد مجموع عناصر صفيفة‬
‫خوارزمية عودية تقوم بإيجاد مجموع عناصر صفيفة ‪ A‬عدد عناصرها ‪n‬‬

‫)‪Algorithm Sum (…..‬‬


‫‪Input:.‬‬
‫‪Output:‬‬

‫د‪ .‬ندى غنـيم‬


H
I
AS
T RSum ‫التعقيد المقارب لـ‬
Statement s/e Frequency Total steps
n=0 n>o n=0 n>o
Float RSum(float a[], int n) 0 - - O(0) 0

if (n <=0) { 1 1 1 O(1) 1

;Return (0.0) 1 0 1 O(0) 1

else

;Return (Rsum(a, n-1)+a[n]) x +2 1 0 O(2+x) 0

} 0 - - O(0) 0

Total O(2+x) 2

X = TRsum(n-1)
‫ ندى غنـيم‬.‫د‬
H
I
AS
T RSum ‫التعقيد المقارب لـ‬
Statement TRSum  2
s/e (n) Frequency n 0
Totalifsteps
n=0 n>o n=0 n>o
 2  TRSum (n - 1) if n  0
Float RSum(float a[], int n) 0 - - O(0) 0

if (n <=0) { TRSum 1  21  TRSum


1 (n) (n - 1)1
O(1)

;Return (0.0) 1 0  21  2 O(0)


TRSum (n1- 2)
else  2(2)  TRSum (n - 2)
;Return (Rsum(a, n-1)+a[n]) x +2 1  0 O(2+x) 0

} 0 -  n(2)
- T O(0) (0)0
RSum
Total  2n  2, O(2+x) n 2 0
X = TRsum(n-1)
‫ ندى غنـيم‬.‫د‬
‫حساب تعقيد قيمة كثير حدود‬
H
I
AS
T

P(x)  an x n  an-1x n-1  ...  a1x  a0

Algorithm polynomial (x0, a0, a1, … ,an)

Input: ...
Output: …

y = a0
for i =1 to n
power (x0 , i)
y = y + ai * power
 C (n )  O (n )
2

Return y

‫ ندى غنـيم‬.‫د‬
H
I
AS
T
‫حساب تعقيد قيمة كثير حدود‬
P(x)  an x n  an-1x n-1  ...  a1x  a0

P(x)  (...((an x  an-1 )x  an- 2 )x  ...  a1 )x  a0

Algorithm Horner (x0, a0, a1, … ,an)

Input: …
Output: …

y = an
 C(n)  O(n)
for i =1 to n
y = y * x0 + an-I
Return y
‫ ندى غنـيم‬.‫د‬
‫حساب درجة تعقيد البحث الثنائي‬
H
I
AS
T

bool BS(int Nb,int Table[],int debut,int fin) n


{ T ( n)  1  T   , T (1)  1
 2
if(fin  debut)
return (Nb  Table[fin] ) n
T ( n)  2  T  
else  4
if(Nb  Table[(fin -debut)/2]) n
T ( n)  3  T  
return true 8
else
 n 
if(Nb  Table[(fin -debut)/2]) T ( n)  k  T  k 
return BS(Nb,Table, (fin-debut)/2,fin) 2 
else n  2 k  k  log(n)
return BS(Nb,Table,d ebut,(fin-debut)/2)
}

‫ ندى غنـيم‬.‫د‬
‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫مثال أعداد فيبوناتشي‬
‫تعرف ‪ Fibonacci‬أعداد فيبوناتشي بالعالقة‪:‬‬ ‫‪‬‬

‫‪‬‬ ‫‪n‬‬ ‫‪if‬‬ ‫‪n‬‬


‫‪Fib(n)  Fib(n - 2)  Fib(n - 1) else‬‬‫‪‬‬ ‫‪2‬‬
‫‪‬‬

‫د‪ .‬ندى غنـيم‬


H
I
AS
T
‫مثال أعداد فيبوناتشي‬
n2
Fib(n)  Fib(n - 2) n Fib(n - 1) if else

:‫• النسخة العودية من الخوارزمية‬


Algorithm Fib (n)
Input:……
Output: …..

if (n < 2)
return n;
else
return Fib(n - 2) + Fib(n - 1);
‫ ندى غنـيم‬.‫د‬
H
I
AS
T )‫مـثال (تتمة‬
Algorithm iterativeFib (n)
:‫خوارزمية فيبوناتشي التكرارية هي‬
Input:……
Output: …..

if (n <= 1)
return n;
else
int fn, fnm1 = 1;
fnm2 = 0;
for (int i = 2; i <= n; i++)
fn = fnm1 + fnm2;
fnm2 = fnm1;
fnm1 = fn;
‫ ندى غنـيم‬.‫د‬
return fn;
‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫الطريقة المباشرة لحساب أعداد فيبوناتشي هي‪:‬‬

‫‪ n  ˆ n‬‬
‫‪Fib(n) ‬‬
‫‪5‬‬

‫حيث‬
‫‪1‬‬
‫‪  (1  5 ) and ˆ  1  ‬‬
‫‪2‬‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫‪ .3‬حجم الذاكرة الضروري‬
‫أي برنامج يحتاج إلى ذاكرة لتخزين ما يلي‪:‬‬ ‫‪‬‬
‫تعليمات البرنامج‬ ‫‪‬‬

‫معطيات الدخل‬ ‫‪‬‬

‫المتحوالت والثوابت التي يستخدمها البرنامج‬ ‫‪‬‬

‫هناك عدة طرق لتخزين معطيات الدخل مما يتطلب المقارنة بين‬ ‫‪‬‬
‫حجم الذاكرة التي تحتاجها كل طريقة‪.‬‬
‫تخزين سلسلة من األعداد في صفيفة أو في الئحة مترابطة‬ ‫‪‬‬

‫‪LL‬‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪AB C‬‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫حجم الذاكرة الضروري‬
‫يمكن المقارنة بين حجم الذاكرة اإلضافية التي يستخدمها البرنامج‬ ‫‪‬‬
‫أثناء تنفيذه‪.‬‬
‫‪ ‬خوارزميات فرز صفيفة تفرز في الصفيفة نفسها‪ /‬خوارزمية‬
‫تستخدم صفيفة إضافية‬

‫عند تصميم الخوارزميات هناك دائماً حالة تسوية بين التعقيد الزمني‬ ‫‪‬‬
‫وحجم الذاكرة‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫‪ .4‬بساطة الخوارزمية‬
‫الخوارزمية البسيطة ليست دائماً الفضلى من حيث األداء‪.‬‬ ‫‪‬‬

‫ولكن البساطة ضرورية لسهولة تنفيذ وتصحيح الخوارزميات (فريق‬ ‫‪‬‬


‫العمل)‪.‬‬

‫إذا كانت الخوارزمية كثيرة االستخدام فمن الضروري أن تكون‬ ‫‪‬‬


‫فعالة جداً ولو لم تكن بسيطة!‬

‫د‪ .‬ندى غنـيم‬


‫‪H‬‬
‫‪I‬‬
‫‪A‬‬‫‪S‬‬
‫‪T‬‬
‫‪ .5‬أمثلية الخوارزميات‬
‫ال يمكن تخفيض تعقيد أية خوارزمية إلى أقل من ٍ‬
‫حد معين‪ .‬فلكل‬ ‫‪‬‬
‫مسألة تعقيدها الخاص المستقل عن خوارزميات حلها‪.‬‬
‫نقول عن خوارزمية إنها مثلى ‪ optimal‬في أسوأ الحاالت‪ ،‬إذا لم‬ ‫‪‬‬
‫تكن هناك خوارزمية أخرى من الخوارزميات التي تحل المسألة ذات‬
‫تعقيد أقل في أسوأ الحاالت‪.‬‬

‫د‪ .‬ندى غنـيم‬

You might also like