You are on page 1of 26

1

Recurrences
‫ واللي هو اشي أخذنا عنه مقدمة بشابتر‬Recurrences ‫ بهذا الشابتر رح نتعمق بشيء اسمه‬-
.. Recursive Algorithms ‫ لل‬Time Complexity ‫ واللي يتعلق بموضوع حساب ال‬2

 A recurrence relation is an equation or inequality that describes a


function in terms of itself by using smaller inputs.

‫ فبالتالي‬،‫ هي عملية تبسيط المشكلة إلى مشاكل أصغر‬Recursive ‫ ذكرنا إنه عملية ال‬-
‫ لحد ما‬.... Smaller Input ‫بستدعي نفس الفنكشن عدد من المرات وكل مرة بستدعيه ب‬
... Recursion ‫ ويتوقف عن عملية ال‬Base Case ‫يوصل الفنكشن ل‬

: ‫ بتكون على هاي الصورة‬Time ‫ طريقة حساب ال‬


The expression:

 c n 1

T ( n)  
2T  n   cn n  1
  2 
.. Algorithm ‫ اللي بتستغرقه ال‬Time ‫ بتعبر عن ال‬T(n) ‫ذكرنا سابقًأ إنه‬ -
:‫ وطلع معه التالي‬Time ‫ وحسب الها ال‬Algorithm ‫فاآلن هون أعطانا مثال ل‬
.. Constant Time ‫ رح يوخذ‬: Base Case ‫ عند ال‬
𝑛
.. 2𝑇 ቀ ቁ + 𝑐𝑛 ‫ معه إنه‬Time ‫ طلع ال‬: General Case ‫ عند ال‬
2
https://web.facebook.com/groups/IntelligenceGroup.CS/
‫‪2‬‬

‫شو معنى هذا الكالم !‬

‫معناه إنه داخل هاي ال ‪ Algorithm‬في عنده ‪ 2 Recursive Call‬وكل ‪ Call‬منهم رح‬ ‫‪-‬‬
‫𝑛‬
‫من ال ‪... Problem Size‬‬ ‫يوخذ‬
‫‪2‬‬

‫‪ -‬وفي كمان (‪ )cn‬يعني في ‪ Other Steps‬موجودة بالفنكشن وبتستغرق ‪... Linear Time‬‬
‫اآلن لو بتالحظوا هذا ال )‪ T(n‬بشبه مين من ال ‪ Algorithms‬اللي أخذناهم بشابتر ‪.! 2+1‬‬
‫الجواب هو ال ‪... Merge Sort‬‬
‫𝑛‬
‫وبس يخلص هاي‬
‫‪2‬‬
‫فال ‪ Merger Sort‬كان يعمل ‪ 2 Recursive Call‬وكل مرة يبعث‬ ‫‪-‬‬
‫العملية‪ ،‬كان يستدعي فنكشن ال ‪ Merge‬اللي كان يعمل عملية ‪ Combine‬للعناصر وكان‬
‫يستغرق ‪... Linear Time‬‬
‫‪Recurrence Examples:‬‬

‫‪‬‬ ‫‪0‬‬ ‫‪n0‬‬ ‫‪‬‬ ‫‪0‬‬ ‫‪n0‬‬


‫‪T ( n)  ‬‬ ‫‪T ( n)  ‬‬
‫)‪c  T (n  1‬‬ ‫‪n0‬‬ ‫)‪n  T (n  1‬‬ ‫‪n0‬‬

‫‪‬‬ ‫‪c‬‬ ‫‪n 1‬‬ ‫‪‬‬


‫‪‬‬ ‫‪‬‬ ‫‪c‬‬ ‫‪n 1‬‬
‫‪‬‬ ‫‪‬‬
‫‪T ( n)  ‬‬ ‫‪T ( n)  ‬‬
‫‪2T  n   c‬‬ ‫‪n 1‬‬ ‫‪ n‬‬
‫‪‬‬
‫‪ 2‬‬ ‫‪aT    cn‬‬ ‫‪n 1‬‬
‫‪ b‬‬

‫‪ ‬الحظوا باألمثلة فوق‪ ،‬إنه مش شرط داي ًما يكون الفنكشن ببعث نصف ال ‪Input Size‬‬
‫𝑛‬
‫من ال ‪ ... Problem Size‬ممكن يكون ببعث‬ ‫يعني مش كل ال ‪ Algorithms‬ببعثوا‬
‫‪2‬‬
‫‪ n – 1‬وممكن يكون في ‪ Other Functions‬والخ ‪....‬‬

‫‪https://web.facebook.com/groups/IntelligenceGroup.CS/‬‬
‫‪3‬‬

‫آخر ‪ Example‬تحت عاليمين بعطيك ال ‪ Formula‬تبعت ال ‪ ،Recurrences‬بحيث إنه ‪:‬‬ ‫‪-‬‬


‫‪ : a ‬تمثل عدد ال ‪ Recursive Call‬داخل ال ‪.Algorithm‬‬
‫‪ : b ‬تمثل حجم ال ‪ Input Size‬اللي رح ينبعث مع كل ‪.Recursive Call‬‬
‫‪ Solving Recurrences:‬‬
‫‪Examples:‬‬
‫)‪T(n) = 2T(n/2) + (n‬‬ ‫‪‬‬ ‫)‪T(n) = (n lg n‬‬
‫‪T(n) = 2T(n/2) + n‬‬ ‫‪‬‬ ‫)‪T(n) = (n lg n‬‬
‫‪T(n) = 2T(n/2) + 17 + n ‬‬ ‫)‪T(n) = (n lg n‬‬

‫‪ ‬هون بحكيلك إنه رح نتعلم بهذا الشابتر ككل؛ كيفية حل وحساب ال ‪Time Complexity‬‬
‫لل ‪.. Recursive Algorithms‬‬
‫‪ -‬يعني الحظوا األمثلة فوق‪ ،‬رح نحول الفنكشن من صورة )‪ T(n/2‬إلى صورة )‪ T(n‬عشان‬
‫نقدر نستخدم ال ‪..... Asymptotic Notation‬‬
‫‪ -‬واحنا اولريدي أخذنا بشابتر ‪ 2‬عملية التحويل واللي كانت عبارة عن تعويض المعادلة في‬
‫نفسها لحد ما نوصل ل ‪ General Formula‬بحيث تكون على صورة )‪ T(n‬وليس )‪T(n/2‬‬
‫وبالتالي تطلع معنا المعادلة بداللة ‪.n‬‬
‫بس اآلن رح نشوف طريقتين للحل ورح نطلع ب ‪ Formula‬عشان تريحنا من إنه كل مرة‬
‫نعوض في المعادلة وكذا ‪..‬‬
‫‪ We will discuss two methods for solving recurrences‬‬
‫‪- Iteration method.‬‬
‫‪- Master method.‬‬

‫‪https://web.facebook.com/groups/IntelligenceGroup.CS/‬‬
‫‪4‬‬

‫‪ Iteration Method:‬‬


‫‪ Expand the recurrence k times.‬‬
‫‪ Work some algebra to express as a summation.‬‬
‫‪ Evaluate the summation.‬‬
‫‪ -‬أول طريقة إنه أمشي أعوض بالمعادلة عدد غير محدد من المرات لحد ما أوصل ل‬
‫‪ .. General Form‬رح نمشي ب ‪ 3‬خطوات ‪:‬‬
‫‪ ‬أول اشي رح نكرر عملية التعويض في المعادلة لحد ما نوصل ل ‪.General Term of k‬‬
‫‪ ‬بعدين بشوف ال ‪ Stop Condition‬اللي رح يوقف عملية ال ‪ Recursive‬اللي هو ال‬
‫‪ Base Case‬يعني‪.‬‬
‫‪ ‬اخر اشي بعمل ‪ Evaluation‬للمعادلة اللي طلعت معي‪ ،‬ف بنكتبها ك ‪.Term of n‬‬
‫‪Examples:‬‬
‫‪EXAMPLE 1:‬‬ ‫‪‬‬ ‫‪0‬‬ ‫‪n0‬‬
‫‪T ( n)  ‬‬
‫)‪c  T (n  1‬‬ ‫‪n0‬‬

‫‪ ‬بالبداية حكينا رح نعوض بالمعادلة )‪ T(n‬لحد ما نوصل أو لحد ما نليها ‪... in term of k‬‬
‫)‪T(n) = c + T(n-1‬‬
‫‪ -‬اآلن رح نعوض )‪ (n-1‬في المعادلة ‪( ...‬اللي باألحمر)‬
‫)‪T(n) = c + c + T(n-1-1‬‬
‫)‪= 2c + T(n-2‬‬
‫لما عوضنا )‪ (n-1‬طلعت معنا هاي المعادلة ‪...‬‬
‫اآلن خلونا نعوض )‪ (n-2‬بدل كل (‪ )n‬في المعادلة ‪...‬‬ ‫‪-‬‬
‫)‪T(n) = 2c + c + T(n-2-1‬‬
‫)‪= 3c + T(n-3‬‬
‫‪https://web.facebook.com/groups/IntelligenceGroup.CS/‬‬
‫‪5‬‬

‫اآلن المفروض الحظنا ال ‪ General Formula‬لهذا الفنكشن ‪ ...‬أال وهو ‪..‬‬ ‫‪-‬‬
‫)‪T(n) = k.c + T(n-k‬‬
‫احنا لحد اآلن أوجدنا أول خطوة من ال ‪ Iteration Method‬اللي هو ال ‪... Term of k‬‬ ‫‪-‬‬
‫‪ ‬الخطوة الثانية نشوف ال ‪.. Stop Condition‬‬
‫‪ -‬لو رجعنا لل )‪ T(n‬الموجودة بالسؤال‪ ،‬ف رح نالقي إنه عندما ‪ n = 0‬رح يتوقف الفنكشن‬
‫عن استدعاء نفسه‪ ،‬بالتالي ال ‪ Stop Condition‬هو لما ‪.n = 0‬‬
‫يعني لما ‪ n – k = 0‬رح تتوقف عملية ال ‪... Recursive‬‬
‫)‪T(n) = k.c + T(n-k‬‬
‫‪==> n-k = 0‬‬
‫‪So, n=k‬‬
‫‪ ‬الخطوة الثالثة ‪ :‬بالتعويض بالمعادلة رح يصير ‪‬‬
‫)‪T(n) = n.c + T(n-n‬‬
‫‪= c.n + T(0) = c.n + 0 = c.n‬‬
‫)‪Thus T(n) = (n‬‬
‫وهيك بنكون أوجدنا ال ‪ Time Complexity‬لهاي ال ‪... Recursive Algorithm‬‬
‫‪---------------------------------------------------------------------------------------‬‬
‫‪EXAMPLE 2 :‬‬ ‫‪‬‬ ‫‪0‬‬ ‫‪n0‬‬
‫‪T ( n)  ‬‬
‫‪n  T (n  1) n  0‬‬

‫‪ ‬بالبداية رح نعوض بالمعادلة )‪ T(n‬لحد ما نوصل أو لحد ما نليها ‪... in term of k‬‬
‫)‪T(n) = n + T(n-1‬‬

‫‪https://web.facebook.com/groups/IntelligenceGroup.CS/‬‬
‫‪6‬‬

‫‪ -‬اآلن رح نعوض )‪ (n-1‬بدل كل (‪ )n‬في المعادلة ‪( ...‬اللي باألحمر)‬


‫)‪T(n) = n + n-1 + T(n-1-1‬‬
‫)‪= n + n-1 + T(n-2‬‬
‫لما عوضنا )‪ (n-1‬طلعت معنا هاي المعادلة ‪‬‬
‫اآلن خلونا نعوض )‪ (n-2‬بدل كل (‪ )n‬في المعادلة ‪...‬‬ ‫‪-‬‬
‫)‪T(n) = n + n-1 + n-2 + T(n-2-1‬‬
‫)‪= n + n-1 + n-2 + T(n-3‬‬
‫لما عوضنا )‪ (n-2‬طلعت معنا هاي المعادلة ‪‬‬
‫اآلن خلونا نعوض )‪ (n-3‬بدل كل (‪ )n‬في المعادلة ‪...‬‬ ‫‪-‬‬
‫)‪T(n) = n + n-1 + n-2+ n-3 + T(n-3-1‬‬
‫)‪= n + n-1 + n-2 + n-3 + T(n-4‬‬
‫اآلن كيف رح نحولها ل ‪ Term of k‬؟‬ ‫‪-‬‬
‫)‪T(n) = n + n-1 + n-2 + n-3 + ……… + (n-k+1) + T(n-k‬‬

‫‪ -‬الحظوا إنه ‪ n‬بتنقص كل مرة بمقدار ‪ 1‬وكل مرة بجمع هذا المقدار بالتالي أنا عندي مجموع‬
‫بهاي الحالة‪ ،‬ابتدا ًء من )‪ (n-k+1‬إلى (‪.)n‬‬
‫𝑛‬

‫∑‬ ‫𝑘 ≥ 𝑛 𝑟𝑜𝑓 )𝑘 ‪𝑖 + 𝑇 (𝑛 −‬‬


‫‪𝑖=𝑛−𝑘+1‬‬

‫الحظوا إنه كل ال ‪ Terms‬اللي قبل )‪ T(n-k‬هي عبارة عن عملية جمع ‪ n‬مع ال ‪n-1‬‬
‫بعدها مع ال ‪ n-2‬الخ ‪....‬‬
‫يعني هو عبارة عن مجموع‪ ،‬بس بالمعادلة ظهر عنا المجموع بالعكس‪ ،‬يعني بدل ما يبدأ‬
‫من ‪ 1‬إلى ‪ ، n‬هو بدأ من ‪ n‬وبدأ يحسب المجموع لحد ما وصل ‪... 1‬‬
‫ليش حط ‪ i = n-k+1‬؟‬
‫‪https://web.facebook.com/groups/IntelligenceGroup.CS/‬‬
‫‪7‬‬

‫‪ -‬اآلن متى رح يتوقف ال ‪ Recursive Call‬؟ يعني شو ال ‪.!! Stop Condition‬‬


‫من السؤال ال ‪ Stop Condition‬هو عندما ‪ .... n = 0‬معناته ‪‬‬
‫‪==> n-k = 0‬‬
‫‪So, n=k‬‬
‫‪ -‬المجموع ببدأ من ‪ 1‬وبنتهي أكيد إلى ‪ n‬عشان هيك هو عمل ‪ n-k+1‬عشان يبدأ من ‪1‬‬
‫وينتهي ب ‪ ،n‬مع إنه كان ظاهر بالمعادلة إنه المجموع ببدأ من ‪ n‬وبنتهي بال ‪ 1‬بس هذا‬
‫هو عكسها مع الحفاظ على صحة الجواب‪ .‬نوخذ مثال توضيحي فقط على هاي النقطة ‪..‬‬
‫لو كانت عندي ‪ n=7‬فبالتالي ‪...‬‬
‫‪‬‬
‫)‪T(n) = 7 + 6 + 5 + 4 + 3 +2 + (n-k+1) + T(n-k‬‬
‫‪= 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0 = 28‬‬
‫فاللي تحت السهم األخضر هو االتجاه اللي بلّش منه عملية ال ‪... Summation‬‬
‫مش مهم كثير هاالشي بس من باب ال ِعلم بالشيء‪..‬‬
‫‪ ‬الخطوة الثانية نشوف ال ‪.. Stop Condition‬‬
‫احنا اولريدي ذكرنا ال ‪ Stop Condition‬وأنا بوضح بالخطوة األولى‪ ،‬بس رح نرجع نعيدها‪.‬‬
‫معناته ‪‬‬ ‫متى رح يتوقف الفنكشن ؟ من السؤال بحكيلي عندما ‪.n = 0‬‬
‫‪==> n-k = 0‬‬
‫‪So, n=k‬‬
‫‪ ‬الخطوة الثالثة ‪ :‬بالتعويض بالمعادلة رح يصير ‪‬‬
‫𝑛‬

‫∑‬ ‫)𝑘 ‪𝑖 + 𝑇 (𝑛 −‬‬


‫‪𝑖=𝑛−𝑘+1‬‬

‫‪https://web.facebook.com/groups/IntelligenceGroup.CS/‬‬
‫‪8‬‬

‫𝑛‬ ‫𝑛‬ ‫𝑛‬

‫‪∑ 𝑖 + 𝑇 (𝑛 − 𝑛) = ∑ 𝑖 + 𝑇 (0) = ∑ 𝑖 + 0‬‬


‫‪𝑖=1‬‬ ‫‪𝑖=1‬‬ ‫‪𝑖=1‬‬
‫𝑛‬
‫)‪𝑛(𝑛 + 1‬‬
‫= 𝑖∑‬
‫‪2‬‬
‫‪𝑖=1‬‬

‫)‪Thus T(n) = (n2‬‬


‫‪---------------------------------------------------------------------------------------‬‬
‫مش عاجبيتك الطريقة !‪ .‬وال يهمك بنحللك بطريقة ثانية ‪ ...‬وإذا ما عجبتك بنحل بطريقة ثالثة‬
‫وال تزعل ‪...‬‬
‫مش طريقة ثانية‪ ،‬إنما حساب ثاني‪ ،‬يعني رؤية مختلفة لألرقام‪ ،‬فالحل األول مشى بال ‪Terms‬‬
‫واحد واحد بدون ما يدمجهم‪ ،‬واكتشف إنهم رح يكونوا مجموع بالنهاية‪.‬‬
‫واحد ثاني ممكن يعمل كالتالي‪:‬‬
‫‪EXAMPLE 2 : Another solution‬‬
‫)‪T(n) = n + T(n-1‬‬
‫)‪T(n) = n + n-1 + T(n-1-1‬‬ ‫)‪= 2n-1 + T(n-2‬‬
‫)‪T(n) = n + n-1 + n-2 + T(n-2-1‬‬ ‫)‪= 3n -1-2 + T(n-3‬‬
‫)‪T(n) = n + n-1 + n-2+ n-3 + T(n-3-1‬‬ ‫)‪= 4n -1-2-3 + T(n-4‬‬
‫)‪T(n) = n + n-1 + n-2+ +n-3 + n-4 + T(n-3-1) = 5n -1-2-3-4 + T(n-5‬‬
‫)‪T(n) = k.n -1 -2 -3 - … - (k-1) + T(n-k‬‬

‫‪𝑘−1‬‬

‫)𝑘 ‪𝑘. 𝑛 − ∑ 𝑖 + 𝑇(𝑛 −‬‬


‫‪𝑖=1‬‬

‫‪https://web.facebook.com/groups/IntelligenceGroup.CS/‬‬
‫‪9‬‬

‫‪ ‬الخطوة الثانية نشوف ال ‪.. Stop Condition‬‬


‫‪==> n-k = 0‬‬
‫‪So, n=k‬‬
‫‪ ‬الخطوة الثالثة ‪ :‬بالتعويض بالمعادلة رح يصير ‪‬‬
‫)‪𝑛(𝑛 + 1‬‬ ‫‪𝑛+1‬‬
‫‪𝑛. 𝑛 −‬‬ ‫𝑛 = )𝑛 ‪+ 𝑇(𝑛 −‬‬
‫‪2‬‬ ‫‪2‬‬
‫)‪Thus T(n) = (n2‬‬
‫‪---------------------------------------------------------------------------------------‬‬
‫‪EXAMPLE 3:‬‬ ‫‪‬‬ ‫‪c‬‬ ‫‪n 1‬‬
‫‪ n‬‬
‫‪T (n)  2T‬‬
‫‪   c n 1‬‬
‫‪  2 ‬‬

‫‪ ‬الخطوة األولى ‪:‬‬


‫‪T(n) = 2T(n/2) + c‬‬

‫اآلن رح نعوض )‪ (n/2‬بدل كل (‪ )n‬في المعادلة ‪( ...‬اللي باألحمر)‬ ‫‪-‬‬


‫‪T(n) = 2[2T(n/2/2) + c] + c‬‬
‫‪= 4T(n/4) +2c = 22T(n/22) + (22-1)c‬‬
‫لما عوضنا )‪ (n/2‬طلعت معنا هاي المعادلة ‪‬‬
‫اآلن خلونا نعوض )‪ (n/22‬بدل كل (‪ )n‬في المعادلة ‪...‬‬ ‫‪-‬‬
‫‪T(n) = 22[2T(n/22/2) + c] + (22-1)c = 23T(n/23) + (23-1)c‬‬

‫‪https://web.facebook.com/groups/IntelligenceGroup.CS/‬‬
10

 ‫( طلعت معنا هاي المعادلة‬n/22) ‫لما عوضنا‬


... ‫( في المعادلة‬n/23) ‫اآلن خلونا نعوض‬ -
T(n) = 23[2T(n/23/2) + c] + (23-1)c = 24T(n/24) + (24-1)c

... General Terms of k ‫ اآلن المفروض وصلنا ل‬-


T(n) = 2k T(n/2k) + (2k-1)c

... ‫ اآلن‬Stop Condition ‫ ال‬


 ‫ معناته‬.... 0 ‫ وليس‬n = 1 ‫ من السؤال هي عندما‬Stop Condition ‫الحظ إنه ال‬
==> n/2k = 1
So, n=2k && log(n) = k

... Evaluation ‫ نكمل عملية ال‬


T(n) = 2k T(n/2k) + (2k-1)c
= n T(n/n) + (n-1)c
= n T(1) + (n-1)c || T(1) = c (‫)من السؤال‬
= n.c + n.c – c
= 2nc – c
Thus T(n) = (n)
---------------------------------------------------------------------------------------

https://web.facebook.com/groups/IntelligenceGroup.CS/
11

EXAMPLE 4 :  c n 1

T (n )   n 
2T   c n 1
 3

T(n) = 2 T(n/3) + c 1
= 2(2 T(n/3/3) + c) + c 2
= 22 T(n/32) + 2c + c
= 22(2 T(n/32/3) + c) + (22-1)c 3
= 23 T(n/33) + 4c + 3c
= 23 T(n/33) + (23-1)c
= 23(2 T(n/33/3) + c) + 7c 4
= 24 T(n/34) + (24-1)c
= 2k T(n/3k) + (2k - 1)c
... ‫ اآلن‬Stop Condition ‫ ال‬
==> n/3k = 1
So, n=3k && log3(n) = k
.. 3 ‫ الحظوا هون إنه األساس هو‬-
... Evaluation ‫ نكمل عملية ال‬
T(n) = 2log3n T(n/3 log3n) + (2 log3n -1)c
= nlog32 T(n/n) + (nlog32-1)c
= nlog32 T(1) + (nlog32-1)c || T(1) = c (‫)من السؤال‬
= n log32.c + n log32.c – c
https://web.facebook.com/groups/IntelligenceGroup.CS/
12

= 2cn log32 - c
Thus T(n) = ( nlog32.c)
----------------------------------------------------------------------------------
EXAMPLE 5 :  c n 1

T (n )    n 
3T  2   c n 1
  


T(n) = 3T(n/2) + c
= 3[3T(n/2/2) + c]+c = 32 T(n/22) + (22-1)c

= 32[3T(n/22/2) + c] + (22-1)c = 33 T(n/23) + (23-1)c


T(n) = 3k T(n/2k) + (2k-1)c
... ‫ اآلن‬Stop Condition ‫ ال‬
==> n/2k = 1
So, n=2k && log (n) = k
... Evaluation ‫ نكمل عملية ال‬
T(n) = 3k T(n/2k) + (2k-1)c
= 3logn T(n/n) + (n-1)c
= nlog3 T(1) + (n-1)c
= nlog3.c + n.c – c
Thus T(n) = ( nlog3.c)

https://web.facebook.com/groups/IntelligenceGroup.CS/
‫‪13‬‬

‫الحظوا إنه جميع األمثلة اللي حليناها كانت على صورة ‪:‬‬ ‫‪-‬‬
‫‪‬‬ ‫‪c‬‬ ‫‪n 1‬‬
‫‪‬‬
‫‪‬‬
‫‪T ( n)  ‬‬
‫‪2T  n   c‬‬ ‫‪n 1‬‬
‫‪‬‬
‫‪ 2‬‬

‫‪ -‬انسوا الرقم ‪ 2‬بس حطوا مكانهم ‪ ..... a,b‬كل األمثلة السابقة كان مجموع ‪ Constant C‬لل‬
‫)‪ .. T(n/2‬وبس وهللا ‪..‬‬
‫‪----------------------------------------------------------------------------------‬‬
‫‪ ‬اآلن نوخذ شكل مختلف ‪ ..‬يعني مش شرط داي ًما اللي يكون مجموع ل )‪ T(n/2‬إنه يكون‬
‫‪ ... Constant c‬ممكن يكون ‪ Linear‬وممكن يكون تربيعي وغيره ‪...‬‬
‫‪EXAMPLE 6:‬‬

‫‪‬‬ ‫‪c‬‬ ‫‪n 1‬‬


‫‪ n‬‬
‫‪T (n)  aT‬‬
‫‪   cn n  1‬‬
‫‪  b ‬‬

‫هون حاطين ‪ a,b‬عشان يطلعوا ب ‪ Formula‬بدل ما نضل كل مرة نمشي بالخطوات‬


‫ونعوض في المعادلة الخ ‪...‬‬
‫‪ ‬بالبداية حكينا رح نعوض بالمعادلة )‪ T(n‬لحد ما نوصل أو لحد ما نليها ‪... in term of k‬‬

‫‪T(n) = aT(n/b) + cn‬‬ ‫‪1‬‬


‫‪= a(aT(n/b/b) + cn/b) + cn‬‬ ‫‪2‬‬
‫=‬ ‫‪a2T(n/b2) + cna/b + cn‬‬
‫=‬ ‫)‪a2T(n /b2) + cn(a/b + 1‬‬

‫‪https://web.facebook.com/groups/IntelligenceGroup.CS/‬‬
14

= a2(aT(n/b2/b) + cn/b2) + cn(a/b + 1) 3


= a3T(n /b3) + cn(a2/b2) + cn(a/b + 1)
= a3T(n/b3) + cn(a2/b2 + a/b + 1)
= akT(n/bk)+cn(ak-1/bk-1 + ak-2/bk-2 + ... +a2/b2 + a/b + 1)

... ‫ اآلن‬Stop Condition ‫ ال‬


==> n-bk = 1
So, n= bk && logb(n) = k
... Evaluation ‫ نكمل عملية ال‬
T(n) = akT(1) + cn(ak-1/bk-1 +...+ a2/b2 + a/b+1)
= akc + cn(ak-1/bk-1 + ... + a2/b2 + a/b + 1)
= cak + cn(ak-1/bk-1 + ... + a2/b2 + a/b + 1)
= cnak/bk + cn(ak-1/bk-1 + ... + a2/b2 + a/b + 1)
= cn(ak/bk + ... + a2/b2 + a/b + 1)

So ==> T(n) = cn(ak + bk+ …. + a2/b2 + a/b + 1)

... a,b ‫ وبالمتغيرات‬Term of k ‫ ب‬General Formula ‫ اآلن احنا وصلنا ل‬-


 b ‫ و‬a ‫اآلن نوخذ الحاالت الممكنة لكل من‬

 What if a = b?
.... Term of n ‫ ونشوف شو ال‬Formula ‫ ونعوض في ال‬a = b ‫نشوف حالة إنه‬ -

T(n) = cn(1logbn + 1logbn+ …. + 12/12 + 1/1 + 1) || k = logbn.


= cn(1+1+1+ ……… +1+1) ==> (K+1 times)
= cn(k+1)
= cn(logbn + 1)
T(n) = (nlogbn)
https://web.facebook.com/groups/IntelligenceGroup.CS/
15

Recursive ‫ لل‬Time Complexity ‫ ف رح يطلع ال‬a=b ‫ فبالتالي لما تكون‬-


.(nlogbn) ‫ ب‬Algorithm

‫ على الصورة اللي محطوطة في‬T(n) ‫ بس ال تنسوا الشرط !!!!!! الشرط إنه يكون من‬-
... ‫السؤال‬

 What if a < b?

- Recall that
 (xk + xk-1 + … + x + 1) = (xk+1 -1)/(x-1)
- So:
a k a k 1

a
 1 
a b  1
k 1

1  a b 
k 1

1
b k b k 1 b a b   1 1  a b  1 a b

T(n) = cn ·(1) = (n)

‫ بس اللي صار إنه عمل شوية حسابات وطلع معه‬،‫لألمانة ما فهمت شو عمل هون بالضبط‬
.(n) ‫ يساوي‬Time Complexity ‫ وطلع معنا ال‬Term of n

 What if a > b?

a k a k 1
   
a
1 
a b k 1  1 
  a b 
k

b k b k 1 b a b   1

==> T(n) = (nlogba)


https://web.facebook.com/groups/IntelligenceGroup.CS/
‫‪16‬‬

‫‪ ‬اآلن خلينا نرتبهم عشان تطلع ال ‪ Formula‬كاملةً مكملةً ‪...‬‬

‫‪‬‬ ‫‪c‬‬ ‫‪n 1‬‬


‫‪ n‬‬
‫‪T (n)  aT‬‬
‫‪   cn n  1‬‬
‫‪  b ‬‬

‫اآلن بس نشوف فنكشن على الصورة اللي فوق‪ ،‬ف مباشرة رح نقارن ‪ a‬مع ‪ b‬كالتالي‪:‬‬ ‫‪-‬‬
‫…‪==> So‬‬
‫‪ n ‬‬ ‫‪ab‬‬
‫‪‬‬
‫‪T (n)  n log b n ‬‬ ‫‪ab‬‬
‫‪‬‬
‫‪  n logb a‬‬
‫‪‬‬ ‫‪‬‬ ‫‪ab‬‬

‫‪ -‬ضروري نركز بالصورة المكتوبة عليها )‪ T(n‬عشان نقدر نسخدم هذول القوانين‪.‬‬
‫الصورة المكتوبة عليها )‪ T(n‬أال وهي ‪:‬‬
‫‪ ‬عندما ‪ <== n = 1‬ف رح تستغرق ‪... Constant Time‬‬
‫‪ ‬عندما ‪ <== n > 1‬ف رح تستغرق ‪ Linear Time‬باإلضافة لل ‪... Recursive Call‬‬

‫اآلن بس تشوف مثال مكتوب على الصورة اللي ذكرناها فوق‪ ،‬بتقارن ‪ a‬مع ‪ b‬ومباشرة بتحدد‬
‫ال ‪ Time Complexity‬بدون حسابات ‪...‬‬

‫‪EXAMPLE 7:‬‬ ‫‪‬‬ ‫‪3‬‬ ‫‪n 1‬‬


‫‪ n‬‬
‫‪T (n)  4T‬‬
‫‪   3n n  1‬‬
‫‪‬‬
‫‪ 9‬‬

‫على نفس الصورة‪ ،‬ف مباشرة بقارن ‪...‬‬ ‫‪-‬‬


‫‪- Since 4 < 9‬‬
‫‪T (n)  n‬‬
‫‪https://web.facebook.com/groups/IntelligenceGroup.CS/‬‬
17

EXAMPLE 8:
 7 n 1
 n
T (n)  5T
   7n n  1

 5
- Since 5 = 5

T (n)  n log 5 n 

---------------------------------------------------------------------------------------
EXAMPLE 9:
 8 n 1

T (n)  7T  n   8n n  1
 

 3

- Since 7 > 3

T (n)   nlog3 7 
---------------------------------------------------------------------------------------

 The Master Theorem:

- An algorithm that divides the problem of size n into a sub problems,


each of size n/b.

‫ اللي بتقسم‬Algorithm ‫ هي ال‬Reclusive Algorithm ‫ إنه ال‬24 ‫ بحكيلك بساليد‬-


‫) من ال‬n/b( ‫ بحيث كل استدعاء يوخذ‬،‫ من التقسيمات‬a ‫( إلى‬n) ‫المشكلة اللي حجمها‬
.‫ ككل‬Problem Size

. Iteration Method ‫ واللي هي مشتقة من ال‬Master Method ‫اآلن رح نحكي عن ال‬ -

https://web.facebook.com/groups/IntelligenceGroup.CS/
‫‪18‬‬

‫‪ -‬في ال ‪ Iteration Method‬لما استخدمنا ال ‪ Formula‬اللي وصلنا الها بعد جهد جهيد؛‬
‫كان عنا شرط إنه الزم يكون الفنكشن اللي مع )‪ aT(n/b‬الزم يكون ‪... Linear‬‬

‫‪ -‬اآلن بال ‪ Master Method‬طلعوا ب ‪ Formula‬بحيث نوجد ال ‪Time Complexity‬‬


‫بغض النظر عن الفنكشن اللي معه‪ ،‬سواء كان ‪ Linear‬أو غيره ‪...‬‬

‫‪n‬‬
‫‪ If‬‬ ‫)‪T (n)  aT    f (n‬‬ ‫‪Where a ≥ 1 && b > 1‬‬
‫‪b‬‬
‫‪Then‬‬
‫‪‬‬ ‫‪‬‬
‫‪‬‬
‫‪ logb a‬‬
‫‪ n‬‬ ‫‪‬‬ ‫‪‬‬
‫‪f (n)  O n logb a ‬‬ ‫‪‬‬ ‫‪‬‬
‫‪‬‬
‫‪‬‬ ‫‪‬‬
‫‪ logb a‬‬ ‫‪  0‬‬
‫‪T (n)   n‬‬ ‫‪‬‬ ‫‪lg n‬‬ ‫‪‬‬ ‫‪f ( n)   n‬‬ ‫‪‬‬
‫‪logb a‬‬
‫‪‬‬ ‫‪‬‬
‫‪‬‬ ‫‪ c 1‬‬
‫‪‬‬ ‫‪‬‬
‫‪ f (n) ‬‬ ‫‪f ( n)   n‬‬ ‫‪‬‬
‫‪logb a ‬‬
‫&‬ ‫‪‬‬
‫‪‬‬
‫‪‬‬ ‫‪‬‬
‫‪‬‬ ‫‪af (n / b)  cf (n) for large n‬‬

‫تعبيرا عن إنه ممكن يكون هذا الفنكشن أي فنكشن‬


‫ً‬ ‫‪ ‬الحظوا إنه )‪ f(n‬صار ضمن المعادلة‬
‫سواء ‪ Linear‬أو ‪ Constant‬أو غيره ‪..‬‬

‫طيب كيف الطريقة يعني عشان نوجد ال ‪ Time‬في هاي الحالة ؟‬


‫رح نعمل ‪ 3‬خطوات لحتى نقرر ‪...‬‬

‫‪ ‬أول خطوة ‪ :‬رح نوجد 𝑎 𝑏 ‪... log‬‬

‫‪ ‬ثاني خطوة ‪ :‬بنوجد ‪ .... f(n)logba‬وهذا الحد رح نمسيه ب ‪.RHS‬‬

‫‪https://web.facebook.com/groups/IntelligenceGroup.CS/‬‬
19

: ‫ الموجود في المعادلة بحيث‬f(n) ‫ ب‬RHS ‫ رح نقارن هذا ال‬: ‫ ثالث خطوة‬

Case 1 : if f(n) = O(nlogba-e) || e: 𝜀


Then We Say that T(n) = (nlogba)

Case 2 : if f(n) = (nlogba)


Then We Say that T(n) = (nlogba logn)

Case 3 : if f(n) = (nlogba+e) && af(n/b) < cf(n) && c > 1


Then We Say that T(n) = (f(n))

... ‫ باألمثلة بتتضح الصورة‬-

EXAMPLE 1: T(n) = 4T(n/2) + n

... log 𝑏 𝑎 ‫ رح نوجد‬: ‫ أول خطوة‬


==> a = 4 , b = 2 , f(n) = n
==> log 𝑏 𝑎
==> log 2 4 = 2
.... nlogba ‫ بنوجد‬: ‫ ثاني خطوة‬

==> RHS = n2
... RHS ‫ وبين ال‬f(n) ‫ هي المقارنة بين‬: ‫ ثالث خطوة‬
f(n) = n
RHS = n2

f(n) = O(n2) ‫ بالتالي بقدر أكتبه على صورة‬f(n) ≤ RHS ‫ بالمقارنة رح نالقي إنه‬-
... Case 1 ‫ ف رح نالقي إنه احنا في ال‬... ‫ اللي كتبناها فوق‬Formula ‫وبالرجوع لل‬

Case 1 : if f(n) = O(nlogba-e) || e: 𝜀


Then We Say that T(n) = (nlogba-e)

https://web.facebook.com/groups/IntelligenceGroup.CS/
‫‪20‬‬

‫‪ -‬يعني بالمحصلة )‪ T(n‬هو عبارة عن )‪(n2-e) = (nlogba-e‬‬

‫ً‬
‫أصال ؟‬ ‫‪ -‬بس ضلت شغلة ال ‪ ‬كيف رح نحسبها ؟ أو شو هي‬
‫صح احنا طلع معنا )‪ f(n) = O(n2‬يعني بقدر أكتبها على صورة ‪:‬‬

‫‪f(n) ≤ RHS‬‬
‫‪n ≤ n2-e‬‬

‫هي القيمة اللي رح تخلي المعادلة دائ ًما صحيحة‪.‬‬ ‫‪ -‬ال ‪‬‬
‫اللي هاي المتباينة صحيحة دائ ًما ؟‬ ‫اآلن شو قيمة ‪‬‬
‫ف رح تصير المعادلة غير صحيحة إلنه رح تصير ‪ n‬أكبر ‪..‬‬ ‫يعني لو كانت ‪ = 3‬‬
‫فلذلك قيمة ال ‪ ‬رح تكون محصورة ==< ‪0 <  < 1‬‬

‫إلنه رح تصير المعادلة غير صحيحة‪ ،‬بالتالي ما رح أقدر أوجد‬ ‫‪ -‬يعني ممنوع تكون ‪ > 1‬‬
‫ال ‪ Time‬الدقيق والصحيح‪.‬‬
‫فالزم أحط هذا الشرط أال وهو إنه ‪... 0 <  < 1‬‬

‫‪ ‬مختصر الحل عشان ما تنعجقوا ‪:‬‬


‫‪==> log 2 4 = 2‬‬
‫‪==> RHS = n2‬‬
‫‪==> f(n) = O(n2-e) && 0 <  < 1‬‬
‫)‪So we Apply Case 1 ==> T(n) = (nlogba) = (n2‬‬
‫‪----------------------------------------------------------------------------------‬‬

‫‪EXAMPLE 2: T(n) = T(n/3) + n2 logn‬‬

‫‪ ‬أول خطوة ‪ :‬رح نوجد 𝑎 𝑏 ‪... log‬‬


‫‪2‬‬
‫)‪==> a = 1 , b = 3 , f(n) = n log(n‬‬
‫𝑎 𝑏 ‪==> log‬‬
‫‪==> log 3 1 = 0‬‬

‫‪https://web.facebook.com/groups/IntelligenceGroup.CS/‬‬
‫‪21‬‬

‫‪ ‬ثاني خطوة ‪ :‬بنوجد ‪.... nlogba‬‬


‫‪==> RHS = n0‬‬

‫‪ ‬ثالث خطوة ‪ :‬هي المقارنة بين )‪ f(n‬وبين ال ‪... RHS‬‬


‫‪F(n) = n2 logn‬‬
‫‪RHS = n0‬‬

‫‪So ==> f(n) ≥ RHS‬‬


‫بالتالي ==< )‪ f(n) = ( nlogba-e‬وبالتالي ‪....‬‬

‫‪F(n) ≥ RHS‬‬
‫‪n2 logn ≥ n0+e‬‬

‫‪ -‬شو قيمة ‪ ‬اللي بتخلي هاي المتبانية صحيحة ؟ الجواب هو ‪0 <  < 2‬‬

‫‪ -‬الحظوا إنه احنا طبقنا ‪ Case 3‬بس الحالة الثالثة كان الها شرطين نتحقق منهم وليس‬
‫شرط واحد ‪ ..‬الشرط األول تحققنا منه وت َ ْم‪.‬‬

‫‪ -‬نيجي للشرط الثاني‪ ،‬اللي هو إنه نوجد قيمة ‪ C‬وتكون هاي ال ‪... C < 1‬‬

‫)‪==> af(n/b) < cf(n) && c < 1 (Page 18 in this file and Slide 25‬‬

‫)‪==> af(n/3) = (n/3)2 log(n/3‬‬


‫)‪= (n2/9) (logn – log3‬‬
‫)‪= (1/9)n2 (logn – log3‬‬
‫)‪==> (1/9)n2 (logn – log3) < (1/9)n2 log(n‬‬

‫)‪Then c = 1/9 Which is less than 1 (C < 1‬‬

‫… ‪So case 3 applies‬‬


‫))‪==> T(n) = (n2 log(n‬‬
‫‪https://web.facebook.com/groups/IntelligenceGroup.CS/‬‬
22

EXAMPLE 3: T(n) = 8T(n/2) + n2.2

... ‫ سريعًا نفس الخطوات‬-


2.2
==> a = 8 , b = 2 , f(n) = n
==> log 2 8 = 3
==> RHS = n3

==> f(n) ≤ RHS


==> f(n) = O(n3-e) && 0 <  < 0.8
So we Apply Case 1 ==> T(n) = (nlogba) = (n3)
----------------------------------------------------------------------------------

EXAMPLE 4: T(n) = 9T(n/3) + n3

==> a = 9 , b = 3 , f(n) = n3
==> log 3 9 = 2
==> RHS = n2

==> f(n) ≥ RHS


==> f(n) = ( nlogba+e) && 0 < <1
&& af(n/3) = 9f(n/3)
= 9(n/3)3
= 9(n3/27)
= (9/27)n3
= (1/3)n3

==> (1/3)n3 < cf(n)


==> (1/3)n3 < c.n3
Then c = 1/3 Which is less than 1 (C < 1)
So, We Apply Case 3 ==> T(n) = (n3)

https://web.facebook.com/groups/IntelligenceGroup.CS/
23

EXAMPLE 5: T(n) = T(n/2) + 1 (Binary Search)

==> a = 1 , b = 2 , f(n) = 1
==> log 2 1 = 0
==> RHS = n0

==> f(n) = RHS


==> f(n) = ( nlogba)

==> So We Apply Case 2 ==> T(n) = ( nlogba log(n))


==> T(n) = (log(n))
----------------------------------------------------------------------------------

EXAMPLE 6: T(n) = 4T(n/2) + n2 log(n)

==> a = 4 , b = 2 , f(n) = n2 log(n)


==> log 2 4 = 2
==> RHS = n2

==> f(n) ≥ RHS


==> f(n) = ( nlogba+e)

.. ‫ بس في تريك هون بسيط‬f(n) ≥ RHS ‫ فنبالقي إنه‬RHS ‫ و‬f(n) ‫ بالمقارنة بين‬-


.. ‫ اللي بتخلي المعادلة صحيحة‬ ‫احنا حكينا إنه الزم نوجد قيمة‬

f(n) ≥ RHS ‫ بحقق‬Range ‫ ف ما رح نالقي‬ ‫ ل‬Range ‫ لو حاولنا ندور على‬-


.. polynomial ‫ بتزيد بشكل لوغاريتمي وليس بشكل طبيعي أو‬f(n) ‫إلنه الزيادة الموجود في‬

.‫ بهاي الحالة‬Master Method ‫ بتحقق المعادلة فبالتالي ما بقدر استخدم ال‬ ‫وبما إنه ما في‬ -

https://web.facebook.com/groups/IntelligenceGroup.CS/
24

- There is no positive  that can be added to the power of n2 such


that n2 ln g is  (n2+ ).
- Because f(n) = n2 logn is not polynomially larger than nlogba = n2)

Thus, the Master Theorem doesn’t apply here.


----------------------------------------------------------------------------------

EXAMPLE 7: T(n) = 2T(n/2) + log(n)

==> a = 2 , b = 2 , f(n) = log(n)


==> log 2 2 = 1
==> RHS = n1

==> f(n) ≤ RHS


==> f(n) = O(n1-e)

- There is no positive  that can be subtracted from the power of n1


such that log(n) is O (n1- )
- Because f(n) = log(n) is not polynomially Smaller than nlogba = n1)
Thus, the Master Theorem doesn’t apply here.
---------------------------------------------------------------------------------------
EXAMPLE 7: T(n) = 2T(√𝒏) + log(n)

‫ مختلفة عن األمثلة‬n ‫ مش موجودة بشكل واضح وحتى ال‬b ‫ بهذا المثال الحظوا إنه قيمة‬-
‫ خلينا نحولها ل الصورة الطبيعية اللي بنعرفها عشان تكون‬،‫ عشان نس ّهل على حالنا الحل‬،‫السابقة‬
: ‫ فاللي رح نعمله هو التالي‬......‫ واضحين‬b ‫ و‬a ‫عنا المعادلة واضحة و‬

- Simplify it by letting m = lg n  n = 2m
T (2m )  2T (2m / 2 )  m
https://web.facebook.com/groups/IntelligenceGroup.CS/
25

... n = 2m <== ‫ وبالتالي‬m = log(n) ‫ رح نفرض ما داخل‬-


- Rename S(m) = T(2 m)

... S(m) = T(2m) ‫ رح افرض‬،m ‫ بعد ما صارت المعادلة بالمتغير‬-


: ‫ف رح تصير المعادلة على هذا الشكل‬
==> S(m) = 2S(m/2) + m

Master Method ‫ بنبلش نحل المعادلة بنا ًء على ال‬،‫ اآلن بعد ما حولناها للشكل الطبيعي‬-
... Iteration Method ‫أو من خالل ال‬

... Master Method ‫ خلونا نحلها على ال‬-


EXAMPLE 7: S(m) = 2S(m/2) + m
==> a = 2 , b = 2 , f(n) = m
==> log 2 2 = 1
==> RHS = m1

==> f(n) = RHS


==> f(n) = ( mlogba)
So We Apply Case 2 ==> T(n) = ( mlogba log(m)) = (m1 log(m))

- Changing back from S(m) to T(n), we obtain:


: ‫ األصلية كذلك ف تصبح‬n ‫ قيمتها األصلية وبعد هيك برجع قيمة‬T(n) ‫ اآلن بنرجع‬-

T(n) = T(2m)
= S(m)
= (m log(m))
= ( log(n) log(logn) ==> T(n) = ( log(n) log(logn)

Albara Fwaz
#Intelligence Group
https://web.facebook.com/groups/IntelligenceGroup.CS/

You might also like