You are on page 1of 5

‫خوارزميات نظري‬ ‫السنة الثانية‬ ‫جامعة حلب‬

‫م‪ .‬دعاء مصري‬ ‫قسم البرمجيات‬ ‫المعهد التقاني للحاسوب‬ ‫ال‬

‫المحاضرة الرابعة‬
‫أمثلة عن الخوارزميات التعاودية‪:‬‬
‫خوارزمية القاسم المشترك الأكبر لعددين صحيحين‬

‫خوارزمية أقليدس هي دالة استدعاء ذاتي‪ ،‬تستخدم لحساب القاسم المشترك األكبر لعددين صحيحين نرمز لها ‪gcd‬‬

‫)‪gcd(x,y‬‬

‫‪input: integer x, integer y such that x >= y and y >= 0‬‬


‫‪1. if y is 0, return x‬‬

‫] ))‪2. otherwise, return [ gcd(y, (remainder of x/y‬‬

‫‪end gcd‬‬

‫‪ ‬مثال )‪gcd (48,30‬‬

‫البرنامج بلغة الجافا‬


‫)‪int gcd (int x , int y‬‬
‫{‬
‫)‪if(y ==0‬‬
‫‪return x‬‬
‫‪else‬‬
‫)‪return gcd (y,x%y‬‬
‫}‬
‫‪1‬‬
‫خوارزميات نظري‬ ‫السنة الثانية‬ ‫جامعة حلب‬
‫م‪ .‬دعاء مصري‬ ‫قسم البرمجيات‬ ‫المعهد التقاني للحاسوب‬ ‫ال‬

‫خوارزمية الرفع الى قوة ‪:n‬‬

‫‪bn = b*b* ……*b‬‬


‫‪n‬مرة‬

‫كتابة الخوارزمية باألسلوب التكراري (باستخدام حلقة) ‪A= bn‬‬


‫‪1- Start‬‬
‫‪2- Let A=1‬‬
‫‪3- Loop 1n‬‬
‫‪A=A*b‬‬
‫‪4- Output A‬‬
‫‪5- End‬‬

‫كتابة الخوارزمية باالسلوب التعاودي ) ‪:bn = power(b,n‬‬


‫‪bn= 1‬‬ ‫‪if‬‬ ‫‪n=0‬‬
‫)‪bn= b*power(b,n-1‬‬ ‫‪if‬‬ ‫‪n>0‬‬

‫‪1- Start‬‬
‫)‪2- If (n=0‬‬
‫‪output = 1‬‬
‫‪else‬‬
‫)‪output = b*pow(b,n-1‬‬
‫‪3- End‬‬

‫البرنامج بلغة الجافا‪:‬‬

‫{)‪int pwr(int b, int x‬‬


‫)‪if(x == 0‬‬
‫‪return 1‬‬
‫‪else‬‬
‫;)‪return b*pwr(b,x-1‬‬
‫}‬

‫‪2‬‬
‫خوارزميات نظري‬ ‫السنة الثانية‬ ‫جامعة حلب‬
‫ دعاء مصري‬.‫م‬ ‫قسم البرمجيات‬ ‫المعهد التقاني للحاسوب‬ ‫ال‬

‫خوارزمية الرفع الى قوة التعاودية الذكية‬

bn= 1 if n=0
bn= power(b,n/2)*power(b,n/2) if n>0 and n is even
bn= power(b,n/2)*power(b,n/2) *b if n>0 and n is even

.‫ فردية‬n ‫ تهمل الباقي عندما تكون‬n/2 ‫علما أن‬

1- Start
2- If (n=0)
output = 1
else if n is even
output = pow(b,n/2)*pow(b,n/2)
else
output = pow(b,n/2)*pow(b,n/2)*b
3- End
: ‫مثال‬

2 10=2 5 * 2 5

22*22*2 22*22*2

2*2 * 2 *2 *2 2*2 * 2 *2 *2 = 2 10

:‫البرنامج بلغة الجافا‬


int pwr(int b, int x){
if(x == 0)
return 1
else if (x%2 == 0)
return pow(b,n/2)*pow(b,n/2)
else
return pow(b,n/2)*pow(b,n/2)*b
}

3
‫خوارزميات نظري‬ ‫السنة الثانية‬ ‫جامعة حلب‬
‫م‪ .‬دعاء مصري‬ ‫قسم البرمجيات‬ ‫المعهد التقاني للحاسوب‬ ‫ال‬

‫طباعة الاعداد من ‪ 1‬حتى ‪ n‬بطريقة تعاودية(البرنامج بلغة الجافا)‬

‫{)‪int Sum(int N‬‬


‫(‪if )N < 2‬‬
‫;‪Sum = 1‬‬
‫‪else‬‬
‫;)‪Sum = N + Sum(N - 1‬‬
‫;‪return sum‬‬
‫}‬

‫توضيح‪:‬‬

‫اول شرط تقوم به الدالة هو فحص هل المدخل (البارميتر) ‪ N‬يحمل قيمة اصغر من ‪ 2‬فان الناتج حينها هو‪:‬‬
‫‪Sum = 1‬‬
‫و الواحد هنا هو قيمة صحيحة اليوجد فيها اي استدعاء ولكن اذا لم يتحقق هذا الشرط فان الناتج هو‪:‬‬
‫)‪Sum = N + Sum(N - 1‬‬
‫الحظ هنا ان الناتج في هذة الحالة سوف يكون المتغير ‪ N‬مضاف اليه ناتج الدالة نفسها ولكن مع تمرير ‪ N-1‬في هذة‬
‫المرة فاذا كانت قيمة ‪ N=4‬فان السطر سوف يكون كالتالي‪:‬‬
‫)‪Sum = 4 + Sum(3‬‬
‫طالما الـ ‪ N‬اكبر من اثنين فانه سوف يتم استدعاء الدالة بتقليل قيمة الـ ‪ N‬وبالتالي فان في االخير البد وان يصل الى اقل‬
‫من اثنين وينتهي عندها االستدعاء الذاتي‪..‬‬
‫واالن عند استدعاء الدالة ‪ Sum‬طبعا ً هذة الدالة وظيفتها ان تجمع القيم من الواحد والى القيمة ‪ N‬فاذا كانت القيمة ‪N=5‬‬
‫قيمة ‪ N‬هل اصغر من ‪ 2‬وإال فان الناتج هو‪:‬‬
‫)‪Sum = N + Sum(N-1‬‬
‫)‪Sum = 5 + Sum(5-1‬‬
‫وبالتالي‪:‬‬
‫)‪1‬‬ ‫)‪Sum(5‬‬ ‫=‬ ‫‪5‬‬ ‫‪+‬‬ ‫)‪Sum(4‬‬
‫)‪2‬‬ ‫)‪Sum(4‬‬ ‫=‬ ‫‪4‬‬ ‫‪+‬‬ ‫)‪Sum(3‬‬
‫)‪3‬‬ ‫)‪Sum(3‬‬ ‫=‬ ‫‪3‬‬ ‫‪+‬‬ ‫)‪Sum(2‬‬
‫)‪4‬‬ ‫)‪Sum(2‬‬ ‫=‬ ‫‪2‬‬ ‫‪+‬‬ ‫)‪Sum(1‬‬
‫)‪5‬‬ ‫)‪Sum(1‬‬ ‫=‬ ‫‪1‬‬

‫‪4‬‬
‫خوارزميات نظري‬ ‫السنة الثانية‬ ‫جامعة حلب‬
‫م‪ .‬دعاء مصري‬ ‫قسم البرمجيات‬ ‫المعهد التقاني للحاسوب‬ ‫ال‬

‫‪ ‬في االستدعاء االول كانت قيمة الدالة هي ‪ 5‬مضاف اليها الدالة نفسها ولكن بتمرير ‪ 4‬اي ان ناتج )‪ Sum(5‬هو ‪5‬‬
‫مضاف الى )‪ Sum(4‬والننا النعرف كم ناتج )‪Sum(4‬تقوم باستدعاء نفسها مرة اخرى الى ان نصل الى الخطوة‬
‫الخامسة وهي الخطوة الحاسمة حيث تتنج قيمة عن الدالة الن المتغير ‪ N‬يساوي واحد اي اصغر من اثنين وبهذا فان‬
‫ناتج الدالة ‪ Sum(1)=1‬وعندئذ يتم تعويضه في الخطوة الرابعة فيتنج ‪ Sum(2)=2 +1‬ومنها فان ناتج ‪Sum(2)=3‬‬
‫وبالتالي يمكن تعويضه في الخطوة الثالثة حيث ان ‪ Sum(3)= 3+ 3 ....‬وهكذا حتى نحصل على قيمة للمعادلة‬
‫‪Sum(5)=15‬وذلك بالشكل التالي‪:‬‬

‫)‪1‬‬ ‫)‪Sum(5‬‬ ‫=‬ ‫‪5‬‬ ‫‪+‬‬ ‫‪10 = 15‬‬


‫)‪2‬‬ ‫)‪Sum(4‬‬ ‫=‬ ‫‪4‬‬ ‫‪+‬‬ ‫‪6 = 10‬‬
‫)‪3‬‬ ‫)‪Sum(3‬‬ ‫=‬ ‫‪3‬‬ ‫‪+‬‬ ‫‪3 = 6‬‬
‫)‪4‬‬ ‫)‪Sum(2‬‬ ‫=‬ ‫‪2‬‬ ‫‪+‬‬ ‫‪1 = 3‬‬
‫)‪5‬‬ ‫)‪Sum(1‬‬ ‫=‬ ‫‪1‬‬

‫نهاية المحاضرة الرابعة‬

‫‪5‬‬

You might also like