Data Structure and
Algorithm Design
‫طراحی‬ ‫و‬ ‫داده‬ ‫ساختمان‬
‫ها‬‫الگوریتم‬
2
3
‫ومراجع‬ ‫منابع‬
T. Cormen, C. Leiserson, R. Rivest, and C.
Stein, Introduction to Algorithms, 3rd
edition, MIT Press, 2009.
4
J. Kleinberg and E. Tardos, Algorithm
Design, Addison Wesley, 2005.
5
Introduction to Algorithms, A Creative Approach,Addision-
wesley 1988 By:U.Manber
6
‫محمدقدسی‬ ،‫ها‬ ‫الگوریتم‬ ‫تحلیل‬ ‫و‬ ‫طراحی‬ ‫مبانی‬
،
‫شری‬ ‫صنعتی‬ ‫دانشگاه‬ ‫علمی‬ ‫انتشارات‬ ‫مؤسسه‬
‫چاپ‬ ،‫ف‬
،‫اول‬
1400
.
7
،‫محمدقدسی‬ ،‫ها‬‫الگوریتم‬ ‫مبانی‬ ‫و‬ ‫ساختارها‬‫داده‬
،‫نهم‬ ‫چاپ‬ ،‫فاطمی‬ ‫انتشارات‬
1400
.
8
‫نظری‬ ‫و‬ ‫نویسی‬ ‫برنامه‬ ‫الگوریتمی‬ ‫های‬ ‫مسئله‬
‫محمد‬ ،
‫قدسی‬
-
‫چاپ‬ ،‫فاطمی‬ ‫انتشارات‬ ،‫مهدیان‬ ‫محمد‬
،‫پنجم‬
1394
9
‫ها‬‫الگوریتم‬ ‫طراحی‬
:
‫کا‬ ‫ارزیابی‬ ‫و‬ ‫طراحی‬ ،‫تحلیل‬
،‫رایی‬
‫نشر‬ ‫به‬ ،‫چهارم‬ ‫ویرایش‬ ،‫زاده‬‫نقیب‬ ‫محمود‬
(
‫انتشار‬
‫ات‬
‫رضوی‬ ‫قدس‬ ‫آستان‬
)
10
‫ارزشیابی‬
•
‫ترم‬ ‫پایان‬ 10
‫نمره‬
•
‫ترم‬ ‫میان‬ 5
‫نمره‬
•
‫کوئیز‬ ‫و‬ ‫پروژه‬ ،‫تمرین‬ ،‫کالسی‬ ‫کار‬ 5
‫نمره‬
11
‫الگوریتم‬
:
(
‫از‬
‫نظر‬
‫علم‬
‫کامپیوتر‬
)
‫هر‬
‫دستورالعملی‬
‫که‬
‫مراحل‬
‫مختلف‬
‫انجام‬
‫کاری‬
‫را‬
‫به‬
‫زبان‬
‫دقیق‬
‫و‬
‫با‬
‫جزییات‬
‫کاف‬
‫ی‬
‫بیان‬
‫کند‬
‫به‬
‫ای‬‫گونه‬
‫که‬
‫ترتیب‬
‫مراحل‬
‫و‬
‫شرط‬
‫خاتمه‬
‫عملیات‬
‫کامال‬
‫مشخص‬
‫با‬
،‫شد‬
‫الگوریتم‬
‫نامیده‬
‫شود‬‫می‬
.
‫ها‬‫الگوریتم‬ ‫پیچیدگی‬ ‫درجه‬ ‫محاسبه‬
12
‫الگوریتم‬
( :
‫لغوی‬ ‫معنی‬
)
‫است‬ ‫ازمسائل‬ ‫دسته‬ ‫یک‬ ‫حل‬ ‫مخصوص‬ ‫روش‬ ‫هر‬
.
‫ها‬‫ویژگی‬
‫باشد‬ ‫غیرمبهم‬ ‫یا‬ ‫باشد‬ ‫واضح‬ ‫باید‬ ‫العمل‬ ‫دستور‬
.
‫باشند‬ ‫اجرا‬ ‫قابل‬ ‫باید‬ ‫ها‬ ‫العمل‬ ‫دستور‬
(
‫ب‬ ‫تقسیم‬
‫ر‬
‫و‬ ‫صفر‬
) .....
‫باشد‬ ‫پذیر‬‫پایان‬
.
‫باشد‬ ‫داشته‬ ‫خاتمه‬ ‫شرط‬
.
‫فاقد‬ ‫تواند‬‫می‬ ‫ولی‬ ‫باشد‬ ‫داشته‬ ‫خروجی‬ ‫یک‬ ‫حداقل‬
‫باشد‬ ‫ورودی‬
.
‫الگوریتم‬ ‫پیچیدگی‬ ‫محاسبه‬
13
‫الگوریتم‬
:
(
‫کتاب‬
‫هورویتز‬
)
‫ای‬‫مجموعه‬
‫متناهی‬
‫از‬
‫مراحل‬
‫است‬
‫که‬
‫هر‬
‫مرحله‬
‫ممکن‬
‫است‬
‫مستلزم‬
‫یک‬
‫یا‬
‫چندین‬
‫دستورالعمل‬
‫باشد‬
.
‫هر‬
‫دستورالعمل‬
‫هایی‬‫محدودیت‬
‫به‬
‫شرح‬
‫زیر‬
‫دارد‬
:
‫اجرا‬ ‫زمان‬
‫پردازنده‬ ‫نوع‬
‫کامپایلر‬
‫ورودی‬ ‫اندازه‬
‫الگوریتم‬ ‫پیچیدگی‬
...
‫الگوریتم‬ ‫پیچیدگی‬ ‫محاسبه‬
14
‫الگوریتم‬ ‫طراحی‬
:
15
‫الگوریتم‬ ‫کارایی‬
:
‫الگوریتم‬ ‫وبدی‬ ‫خوبی‬ ‫ی‬ ‫ها‬ ‫معیار‬
(
‫ارزیابی‬
: )
1
-
‫اجرا‬ ‫زمان‬
2
-
‫حافظه‬ ‫میزان‬
‫نیاز‬ ‫مورد‬
‫زمانی‬ ‫سنجش‬
:
1
-
‫زمانی‬ ‫دقیق‬ ‫سنجش‬
2
-
‫اجرا‬ ‫زمان‬ ‫تقریبی‬ ‫و‬ ‫تحلیلی‬ ‫سنجش‬
(
‫الگوریتم‬ ‫زمانی‬ ‫ی‬ ‫مرتبه‬
)
‫دقیق‬ ‫سنجش‬ ‫از‬ ‫استفاده‬ ‫معایب‬
:
1
-
‫و‬ ‫دما‬ ،‫کامپیوتر‬ ‫باشد‬ ‫یکی‬ ‫باهم‬ ‫ها‬ ‫قسمت‬ ‫تمامی‬ ‫باید‬
.....
‫ها‬‫الگوریتم‬ ‫برتری‬ ‫معیار‬
:
✓
‫ی‬‫مرتبه‬
‫فضایی‬
(
‫مکانی‬
)
‫اجرا‬
(
Space Complexity
)
:
‫پیچیدگی‬
‫فضایی‬
‫یک‬
‫الگوریتم‬
‫مقدار‬
‫ای‬‫حافظه‬
‫است‬
‫که‬
‫با‬
‫توجه‬
‫به‬
‫های‬‫داده‬
،‫مسئله‬
‫برای‬
‫حل‬
‫آن‬
‫الزم‬
‫است‬
.
✓
‫ی‬‫مرتبه‬
‫زمانی‬
‫اجرا‬
(
Time Complexity
)
:
T(n)
‫مدت‬
‫زمانی‬
‫که‬
‫نیاز‬
‫است‬
‫تا‬
‫تمامی‬
‫اعمال‬
‫الزم‬
‫برای‬
‫کامل‬
‫شدن‬
‫یک‬
‫الگوریتم‬
‫انجام‬
‫پذیرد‬
‫را‬
‫پیچید‬
‫گی‬
‫زمانی‬
‫آن‬
‫الگوریتم‬
‫گویند‬
.
16
‫نماد‬
O
∃𝑛0, 𝑐 > 0 ∀𝑛 ≥ 𝑛0 : 𝑓 𝑛 ≤ 𝑐𝑔 𝑛 𝑓 𝑛 = 𝑂 𝑔 𝑛
17
‫نشود‬ ‫بیشتر‬ ‫حد‬ ‫این‬ ‫از‬ ‫الگوریتم‬ ‫اجرای‬ ‫زمان‬ ‫یعنی‬ ‫باال‬ ‫کران‬ ‫کمترین‬
.
(
‫حالت‬ ‫بدترین‬
)
‫نمادها‬
( Big – O )
‫نماد‬
‫رياض‬ ‫تعريف‬
‫ی‬
:
O(g(n))
f(n)
cg(n)
f(n)
:
0
n
n
0
c
,
0
n =






T(n)=O(g(n))
18
‫مجانبی‬ ‫نماد‬
O
‫بزرگ‬

O
:
‫مرتبه‬
‫زمانی‬
f(n)
‫برابر‬
g(n)
،‫است‬
‫که‬
‫به‬
‫صورت‬
f(n)=O(g(n))
‫یا‬
f(n) 
(g(n))
‫نوشته‬
،‫شده‬
‫اگر‬
‫و‬
‫فقط‬
‫اگر‬
‫بتوان‬
‫ثابت‬
‫صحیح‬
n0
‫و‬
‫ثابت‬
‫مثبت‬
c
‫را‬
‫چنان‬
‫پیدا‬
‫کرد‬
‫که‬
‫داشته‬
‫باشیم‬
:
|f(n)|  c |g(n)| n  n0

ً‫ال‬‫معمو‬
‫در‬
‫مبحث‬
‫مرتبه‬
‫های‬
‫زمانی‬
n
‫های‬
‫کوچک‬
‫را‬
‫در‬
‫نظر‬
‫نمی‬
،‫گیرند‬
‫چون‬
‫هر‬
‫الگوریتم‬
‫بدی‬
‫برای‬
‫مسأله‬
‫های‬
‫کوچک‬
‫قابل‬
‫قبول‬
‫و‬
‫خوب‬
‫کار‬
‫می‬
،‫کند‬
‫در‬
‫نتی‬
‫جه‬
n
‫های‬
‫بزرگ‬
‫در‬
‫نظر‬
‫گرفته‬
‫می‬
‫شود‬
.

‫مرتبه‬
‫زمانی‬
O
(
‫بزرگ‬
)
‫تعداد‬
‫اعمال‬
‫الزم‬
‫برای‬
‫اجرای‬
‫الگوریتم‬
‫را‬
‫از‬
‫باال‬
‫محدود‬
‫می‬
‫کند‬
‫به‬
‫عبارت‬
‫دیگر‬
‫مرتبه‬
O
‫حد‬
‫باالی‬
‫مجانبی‬
‫تعداد‬
‫اعمال‬
‫الزم‬
‫برای‬
‫اجرای‬
‫الگوریتم‬
‫را‬
‫مشخص‬
‫می‬
‫کند‬
.
f(n)
c g(n)
n0
f(n)
n
19
‫مجانبی‬ ‫نماد‬
O
‫بزرگ‬

،‫مثال‬
1. f(n)=2n2
g(n)=n2 ،c=10 n0=1  2n2  n2 n  n0
 f(n)=O(n2)
2. f(n)=1,000,000n2
g(n)=n2 ،c=10،000،000 n0=1  1،000،000n2  ،،n2 n  
f(n)=O(n2)
3. f(n)=10n2+3n+200
g(n)=n2 ،c=100 n0=2  10n2+3n+200 n2 n  
 f(n)=O(n2)
20
‫مجانبی‬ ‫نماد‬
O
‫بزرگ‬

‫توجه‬
:
،‫زمانی‬ ‫مرتبه‬ ‫مبحث‬ ‫در‬
g(n)
‫باشد‬ ‫ممکن‬ ‫تابع‬ ‫کوچکترین‬ ‫بایستی‬
( .
‫که‬ ‫چند‬ ‫هر‬
‫در‬
‫نباشد‬ ‫تواند‬ ‫می‬ ‫ریاضیات‬
)
f(n)=2n f(n)  n2 n    f(n) =O(n2)

‫است‬ ‫درست‬ ‫ریاضی‬ ‫لحاظ‬ ‫از‬ ‫نتیجه‬ ‫مثال‬ ‫در‬
.
‫ز‬ ‫مرتبه‬ ‫به‬ ‫مربوط‬ ‫محاسبات‬ ‫این‬ ‫اگر‬ ‫اما‬
‫مانی‬
‫الگوریتمی‬
‫باید‬ ‫باشد‬
g(n)
‫گرفت‬ ‫نظر‬ ‫در‬ ‫ممکن‬ ‫کوچکترین‬ ‫را‬
.

‫مورد‬ ‫در‬ ‫قبلی‬ ‫توضیحات‬ ‫و‬ ‫نکته‬ ‫این‬ ‫به‬ ‫توجه‬ ‫با‬
O
‫گفت‬ ‫توان‬‫می‬
:

O
،
‫حداقلی‬
‫باالی‬ ‫حد‬ ‫برای‬
‫مجانبی‬
‫کن‬ ‫می‬ ‫مشخص‬ ‫را‬ ‫الگوریتم‬ ‫یک‬ ‫در‬ ‫کلیدی‬ ‫عمل‬ ‫تکرار‬ ‫تعداد‬
‫د‬
.

‫نماد‬ ‫کمک‬ ‫به‬ ‫اگر‬ ‫مثال‬
‫مجانبی‬
O
‫زمانی‬ ‫مرتبه‬ ‫بگوییم‬ ،
‫الگوریتمی‬
n2
‫تکرار‬ ‫تعداد‬ ‫حداکثر‬ ‫یعنی‬ ،‫است‬
‫با‬ ‫حداقل‬ ‫الگوریتم‬ ‫اجرای‬ ‫برای‬ ‫کلیدی‬ ‫عمل‬
n2
‫با‬ ‫دیگر‬ ‫عبارت‬ ‫به‬ ‫و‬ ‫است‬ ‫متناسب‬
n3
‫نخواهد‬ ‫متناسب‬
‫بود‬
.
21
‫رایج‬ ‫زمانی‬ ‫های‬ ‫مرتبه‬ ‫از‬ ‫برخی‬
O(1), O(logn), O(nlogn), O(n2), ...,O(n3 ), ..., O(2n), O(3n),...,O(n!)

‫ثابت‬
‫مخفی‬
(Hidden Constant)
:
‫اگر‬
‫مرتبه‬
‫زمانی‬
‫دو‬
‫تابع‬
‫یکسان‬
،‫باشد‬
‫توان‬‫می‬
‫ضریب‬
‫بزرگترین‬
‫توان‬
‫را‬
‫در‬
‫نظر‬
‫گرفت‬
.
f1(n)= 4n+374 → O(n)
f2(n)= 3.2n+29 → O(n)

‫اگر‬
‫در‬
‫برخی‬
‫مسائل‬
‫ثابت‬
‫مخفی‬
‫داده‬
،‫نشود‬
‫آن‬
‫را‬
‫یک‬
‫در‬
‫نظر‬
‫گیریم‬‫می‬
.
‫نمایی‬
‫ای‬ ‫جمله‬ ‫چند‬
‫لگاریتمی‬
‫ثابت‬
22
‫نماد‬
«
O
»
:
✓
‫درست‬ ‫مثال‬
:
2n+1=O(n)
3n2+6=O(n2)
2n+6n-3=O(2n)
ˣ
‫نادرست‬ ‫مثال‬
:
2n3+1=O(n2)
3n +3n-2=O(2n)
23
‫کلی‬ ‫روابط‬
:
24
𝑂 1 < 𝑂 log 𝑛 < O n < O n log 𝑛 < O 𝑛2 < O 𝑛3 < ⋯ < O 2𝑛 < O 3𝑛 < ⋯ < O(n!)
‫شدنی‬ ‫رام‬ ‫مسائل‬ ‫نشدنی‬ ‫رام‬ ‫مسائل‬
‫تمرین‬
25
‫الگوریت‬ ‫اگر‬ ‫دهد‬ ‫می‬ ‫انجام‬ ‫ثانیه‬ ‫یک‬ ‫در‬ ‫را‬ ‫عمل‬ ‫میلیون‬ ‫یک‬ ‫کامپیوتری‬ ‫کنید‬ ‫فرض‬
‫مرتبه‬ ‫با‬ ‫می‬
n
‫مسئله‬ ‫اندازه‬ ‫با‬
50
‫؟‬ ‫کشید‬ ‫خواهد‬ ‫طول‬ ‫زمان‬ ‫مدت‬ ‫چه‬ ‫شود‬ ‫اجرا‬ ‫کامپیوتر‬ ‫این‬ ‫برروی‬
O(n)
(
‫الف‬
O(𝑛2)
(
‫ب‬
O(2𝑛)
(
‫ج‬
O(3𝑛
)
(
‫د‬
‫بزرگ‬ ‫امگای‬ ‫نماد‬
(
Ω
:)
‫نش‬ ‫کمتر‬ ‫حد‬ ‫این‬ ‫از‬ ‫الگوریتم‬ ‫اجرای‬ ‫زمان‬ ‫یعنی‬ ‫پایین‬ ‫کران‬ ‫بیشترین‬
‫ود‬
.
(
‫حالت‬ ‫بهترین‬
)
∃𝑛0, 𝑐 > 0 ∀𝑛 ≥ 𝑛0: 𝑓 𝑛 ≥ 𝑐𝑔 𝑛 𝑓 𝑛 = Ω 𝑔 𝑛
26
‫بزرگ‬ ‫تتای‬ ‫نماد‬
𝜽
∃𝒏𝟎, 𝒄𝟏, 𝒄𝟐 > 𝟎 ∀𝒏 ≥ 𝒏𝟎: 𝒄𝟏𝒈 𝒏 ≤ 𝒇 𝒏 ≤ 𝒄𝟐𝒈 𝒏 𝒇 𝒏 = 𝜽 𝒈 𝒏
27
‫ادامه‬
))
(
(
)
(
)
(
)
(
:
0
, 0
0 n
g
n
f
n
cg
n
f
n
n
c
n 
=






‫ریاضی‬ ‫تعریف‬
:
‫الگوريتمها‬ ‫تمام‬ ‫براي‬
‫ی‬
‫براساس‬ ‫كه‬ ‫كننده‬ ‫مرتب‬
‫ساز‬ ‫مرتب‬ ‫عمل‬ ‫مقايسه‬
‫ی‬
‫م‬ ‫انجام‬ ‫را‬
‫ی‬
‫مرتب‬ ‫دهند‬
‫ی‬‫ه‬
‫آ‬ ‫زمانی‬
‫نها‬
Ω(n log n)
‫م‬
‫ی‬
‫باشد‬
.
‫الگوريتمها‬ ‫تمام‬ ‫براي‬
‫ی‬
‫براساس‬ ‫كه‬ ‫كننده‬ ‫مرتب‬
‫ساز‬ ‫مرتب‬ ‫عمل‬ ‫مقايسه‬
‫ی‬
‫م‬ ‫انجام‬ ‫را‬
‫ی‬
‫مرتب‬ ‫دهند‬
‫ی‬‫ه‬
‫آ‬ ‫زمانی‬
‫نها‬
Ω(n log n)
‫م‬
‫ی‬
‫باشد‬
.
‫نکت‬
‫نکته‬
‫ه‬
‫ریاضی‬ ‫تعریف‬
:
))
(
(
)
(
)
(
)
(
)
(
0
,
, 2
1
0
2
1
0 n
g
n
f
n
g
c
n
f
n
g
c
n
n
c
c
n 
=







28
‫مجانبی‬ ‫نماد‬

‫بزرگ‬


:
‫مرتبه‬
‫زمانی‬
f(n)
‫برابر‬
g(n)
،‫است‬
‫که‬
‫به‬
‫صورت‬
f(n)= (g(n))
‫یا‬
f(n) 
(g(n))
‫نوشته‬
،‫شده‬
‫اگر‬
‫و‬
‫فقط‬
‫اگر‬
‫بتوان‬
‫ثابت‬
‫صحیح‬
n0
‫و‬
‫ثابت‬
‫مثبت‬
c
‫را‬
‫چنان‬
‫پیدا‬
‫کرد‬
‫که‬
‫داشته‬
‫باشیم‬
:
|f(n)|  c |g(n)| n  n0

‫مرتبه‬
‫زمانی‬

(
‫بزرگ‬
)
‫تعداد‬
‫اعمال‬
‫الزم‬
‫برای‬
‫اجرای‬
‫الگوریتم‬
‫را‬
‫از‬
‫پایین‬
‫محدود‬
‫می‬
‫کند‬
‫به‬
‫عبارت‬
‫دیگر‬
‫مرتبه‬

‫حد‬
‫پایین‬
‫مجانبی‬
‫تعداد‬
‫اعمال‬
‫الزم‬
‫برای‬
‫اجرای‬
‫الگوریتم‬
‫را‬
‫مشخص‬
‫می‬
‫کند‬
.
f(n)
c g(n)
n0
f(n)
n
29
‫مجانبی‬ ‫نماد‬

‫بزرگ‬


:
‫مرتبه‬
‫زمانی‬
f(n)
‫برابر‬
g(n)
،‫است‬
‫که‬
‫به‬
‫صورت‬
f(n)= (g(n))
‫یا‬
f(n) 
(g(n))
‫نوشته‬
،‫شده‬
‫اگر‬
‫و‬
‫فقط‬
‫اگر‬
‫بتوان‬
‫ثابت‬
‫صحیح‬
n0
‫و‬
‫ثابت‬
‫مثبت‬
c1
‫و‬
c2
‫را‬
‫چنان‬
‫پیدا‬
‫کرد‬
‫که‬
‫داشته‬
‫باشیم‬
:
c1 |g(n)|  |f(n)|  c2 |g(n)| n  n0

‫مرتبه‬
‫زمانی‬

‫تعداد‬
‫اعمال‬
‫الزم‬
‫برای‬
‫اجرای‬
‫الگوریتم‬
‫را‬
‫از‬
‫دو‬
‫طرف‬
‫باال‬
‫و‬
‫پایین‬
‫محدود‬
‫می‬
‫کند‬
.

‫اگر‬
‫حد‬
‫باال‬
(
O
)
‫با‬
‫حد‬
‫پایین‬
()
‫برای‬
‫یک‬
‫الگوریتم‬
‫برابر‬
،‫باشد‬
‫آن‬
‫حد‬
‫برابر‬

‫خواهد‬
‫بود‬
.

‫حد‬

‫دقیق‬
‫تر‬
‫از‬

‫و‬

‫است‬
‫و‬
‫مفهوم‬
‫تناسب‬
‫دارد‬
.
f(n)
c1 g(n)
n0
f(n)
n
c2 g(n)
30
O(g(n))
f(n)
cg(n)
f(n)
:
0
n
n
0
c
,
0
n =






‫نماد‬
O
( Big – O )
➢
‫بزرگ‬ ‫امگای‬ ‫نماد‬
(
Ω
)
➢
‫نماد‬
‫تتای‬
‫بزرگ‬
(
θ
)
‫ریاضی‬ ‫تعریف‬
:
))
(
(
)
(
)
(
)
(
)
(
0
,
, 2
1
0
2
1
0 n
g
n
f
n
g
c
n
f
n
g
c
n
n
c
c
n 
=







))
(
(
)
(
)
(
)
(
:
0
, 0
0 n
g
n
f
n
cg
n
f
n
n
c
n 
=






‫ریاضی‬ ‫تعریف‬
:
‫رياضي‬ ‫تعريف‬
:
31
‫مجانبی‬ ‫نماد‬
o
‫و‬

‫کوچک‬

f(n)=o(g(n))
‫مثبت‬ ‫و‬ ‫صحیح‬ ‫ثابت‬ ‫ازاء‬ ‫به‬ ‫اگر‬
n0
‫ازاء‬ ‫به‬ ‫و‬
‫هر‬
c
‫دلخواه‬ ‫و‬ ‫مثبت‬
‫باشیم‬ ‫داشته‬
:
f(n)|  c |g(n)| n  n0 c

f(n)= (g(n))
‫مثبت‬ ‫و‬ ‫صحیح‬ ‫ثابت‬ ‫ازاء‬ ‫به‬ ‫اگر‬
n0
‫ازاء‬ ‫به‬ ‫و‬
‫هر‬
c
‫دلخواه‬ ‫و‬ ‫مثبت‬
‫باشیم‬ ‫داشته‬
:
f(n)|  c |g(n)| n  n0 c

‫اگر‬
f(n)=o(g(n))
،‫باشد‬
f(n)
‫بهتری‬ ‫تابع‬
(
‫کوچکتری‬
)
‫از‬
g(n)
‫بود‬ ‫خواهد‬
.

‫اگر‬ ‫پس‬
f(n)=o(g(n))
‫در‬
‫این‬
‫صورت‬
f(n)  (g(n))
=

→
n
n
f
n
g
)
(
)
(
lim
32
k>0 g(n)=(f(n))
0 g(n)=o(f(n))
 f(n)=o(g(n))
‫مثال‬ ‫چند‬
...
f(n)=3n2+6n-4
f(n)=8n6+2nn+nn/2+3n
f(n)=2nn+3n-3n3
f(n)=n1.3+nlogn
f(n)=2n+1
→ O(n2)
→ O(nn/2)
→ O(3n)
→ O(n1.3)
→ f(n)=o(n3) ،f(n)= (logn)
33
‫مجانبی‬ ‫نمادهای‬ ‫ویژگیهای‬ ‫از‬ ‫برخی‬
•
‫اگر‬
f(n)=O(g(n))
‫آنگاه‬ ‫باشد‬
g(n)=(f(n))
‫بالعکس‬ ‫و‬
.
(
‫تقارنی‬ ‫ترانهاده‬ ‫خاصیت‬
)
•
‫اگر‬
f(n)=(g(n))
‫آنگاه‬ ‫باشد‬
g(n)=(f(n))
‫بالعکس‬ ‫و‬
.
(
‫تقارنی‬ ‫خاصیت‬
)
• f(n)+g(n)=O(max(f(n),g(n)))
34
‫الگوریتم‬ ‫زمانی‬ ‫مرتبة‬ ‫مفهوم‬

‫مرتبه‬
‫زمانی‬
‫الگوریتم‬
‫ها‬
T(n)
‫در‬
‫واقع‬
‫تناسبی‬
‫برای‬
‫تعداد‬
‫اعمال‬
‫تقریبی‬
‫الزم‬
‫برای‬
‫اجرای‬
‫آن‬
‫الگوریتم‬
‫می‬
‫باشد‬
.
ً‫ال‬‫مث‬

‫اگر‬
‫الگوریتمی‬
‫پیچیدگی‬
‫زمانیش‬
‫برابر‬
‫با‬
n
،‫باشد‬
‫آنگاه‬
‫تعداد‬
‫اعمال‬
‫الزم‬
‫برای‬
‫اجرای‬
‫الگوریتم‬
‫متناسب‬
‫است‬
‫با‬
‫اندازه‬
‫مسأله‬
‫یعنی‬
n
.

‫اگر‬
‫الگوریتمی‬
‫پیچیدگی‬
‫زمانیش‬
‫برابر‬
‫با‬
n2
،‫باشد‬
‫آنگاه‬
‫تعداد‬
‫اعمال‬
‫الزم‬
‫برای‬
‫اجرای‬
‫الگوریتم‬
‫متناسب‬
‫است‬
‫با‬
‫توان‬
‫دوم‬
‫اندازه‬
‫مسأله‬
‫یعنی‬
n2
.

‫اگر‬
‫الگوریتمی‬
‫پیچیدگی‬
‫زمانیش‬
‫برابر‬
‫با‬
2n
،‫باشد‬
‫آنگاه‬
‫تعداد‬
‫اعمال‬
‫الزم‬
‫برای‬
‫اجرای‬
‫الگوریتم‬
‫متناسب‬
‫است‬
‫با‬
‫اندازه‬
‫مسأله‬
2
.

،‫مثال‬
‫اگر‬
‫کامپیوتری‬
‫قادر‬
‫به‬
‫انجام‬
1،000،000
‫عمل‬
‫در‬
‫ثانیه‬
،‫باشد‬
‫آنگاه‬
‫مدت‬
‫زمان‬
‫انجام‬
‫مسأله‬
‫ای‬
‫به‬
‫اندازة‬
20
‫با‬
‫الگوریتمی‬
‫به‬
‫پیچیدگی‬
n
‫برابر‬
0.00002
‫ثانیه‬
‫خواهد‬
‫بود‬
:
(S)
5
-
10
*
2
=
20
*
6
-
10

‫اگر‬
‫پیچیدگی‬
‫زمانی‬
‫الگوریتم‬
‫برابر‬
2n
‫باشد‬
:
(S)
1
=
220
*
6
-
10
35
‫درباره‬ ‫نکاتی‬
‫ی‬
Order
:
✓
‫وقتی‬
‫گوییم‬‫می‬
‫ی‬‫مرتبه‬
‫زمانی‬
‫یک‬
‫الگوریتم‬
O(n)
‫است‬
‫یعنی‬
‫تعداد‬
‫تکرار‬
‫دستور‬
‫الگوریتم‬
‫ضریبی‬
‫از‬
n
‫است‬
.
✓
‫اگر‬
‫تعداد‬
‫لیست‬
‫ورودی‬
k
‫برابر‬
،‫شود‬
‫تعداد‬
‫تکرار‬
‫دستورات‬
‫و‬
‫زمان‬
‫اجرا‬
‫نیز‬
k
‫شود‬‫برابرمی‬
.
36
‫محاسبه‬ ‫به‬ ‫مربوط‬ ‫قضایای‬
Order
:
‫قضیه‬
1
-
‫یعنی‬ ،‫باشد‬ ‫مشخص‬ ‫اجرای‬ ‫های‬‫زمان‬ ‫با‬ ‫برنامه‬ ‫زیر‬ ‫دو‬ ‫شامل‬ ‫برنامه‬ ‫نمایید‬ ‫فرض‬
:
‫با‬ ‫است‬ ‫برابر‬ ‫برنامه‬ ‫کل‬ ‫اجرای‬ ‫زمان‬ ‫آنگاه‬
:
T(n)=T1(n)+T2(n)
O(n)=max{ O(f(n)) , O(g(n)) }
𝑇 𝑛
𝑇1 𝑛 = 𝑂 𝑓 𝑛
𝑇2 𝑛 = 𝑂 𝑔 𝑛
37
‫محاسبه‬ ‫به‬ ‫مربوط‬ ‫قضایای‬
:Order
(
‫ادامه‬
)
‫قضیه‬
2
-
‫اگر‬
‫زیر‬
‫ای‬‫برنامه‬
‫با‬
‫شرایط‬
T1(n)=O(f(n))
‫به‬
‫اندازه‬
‫ی‬
g(n)
‫بار‬
‫تکرار‬
‫شود‬
‫آنگاه‬
‫در‬
‫مورد‬
‫زمان‬
‫اجرای‬
‫کل‬
‫برنامه‬
‫خواهیم‬
‫داشت‬
:
𝑇 𝑛 = 𝑔 𝑛 ∗ 𝑇1(𝑛) = 𝑂 𝑔 𝑛 ∗ 𝑓 𝑛
38
‫محاسبه‬
‫حلقه‬ ‫اجراي‬ ‫زمان‬ ‫ي‬
‫تكرار‬ ‫هاي‬
𝑆𝑛 = 𝑡1 ×
𝑞𝑛
− 1
𝑞 − 1
𝑆𝑛 =
𝑛 × 𝑡1 + 𝑡𝑛
2
39
40
)
(
2
)
1
( 2
1
n
O
n
n
i
n
i
=
+
=

=
)
(
6
)
1
2
)(
1
( 3
1
2
n
O
n
n
n
i
n
i
=
+
+
=

=
)
(
...
1
1
1
1
+
+
=
=
+
+
=
 k
k
n
i
k
n
O
k
n
i

 = ))
(
(
))
(
( i
f
O
i
f
O
)
(
)
1
1
(
)
1
(
1 1
n
O
n
c
n
c
c
c
R
c
n
i
n
i
=

=
+
−

=

=
  
= =
40
41
))
(log(
1
...
2
1
1
1
1
1
n
n
i
n
i

=
+
+
+
=

=
0
1
1 )
( a
a
a
a n
n
k
k
k −
=
−

=
−
41
n
k
k
k
k
n
k
n
k
1
1
)
1
1
1
(
)
1
(
1 1
1
1
1
−
=
+
−
=
+


−
=
−
=
‫گیری‬ ‫می‬ ‫نظر‬ ‫در‬ ‫ثابت‬ ‫مقدار‬ ‫یک‬ ‫را‬ ‫حلقه‬ ‫دستور‬ ‫تنها‬ ‫اجرای‬ ‫زمان‬
‫م‬
‫مثال‬
‫است‬ ‫مطلوب‬
‫محاسبه‬
‫ی‬
‫اجرا‬ ‫زمان‬
‫ی‬
‫تكرار‬ ‫حلقه‬
For (i = 1 ; i <= n ; i++)
m = m + 6;
‫حل‬
)
(
)
1
1
(
)
1
(
1 1
n
O
n
c
n
c
c
c
R
c
n
i
n
i
=

=
+
−

=

=
  
= =
42
‫مثال‬
‫است‬ ‫مطلوب‬
‫محاسبه‬
‫ی‬
‫اجرا‬ ‫زمان‬
‫ی‬
‫تكرار‬ ‫حلقه‬
For(int i=1; i<=n; i++)
For(j=1; j<=n; j++)
m+=6;
‫حل‬
43
2 2
1 1 1 1 1
( ) ( 1 1) 1 ( 1 1) ( )
n n n n n
i j i i i
T n c c n cn cn cn n cn O n
= = = = =
= = − + = = = − + = =
   
‫دوم‬ ‫روش‬
44
For(int i=1; i<=n; i++)
For(j=1; j<=i; j++)
m+=6;
2
1 1 1 1 1
( 1)
( ) ( 1 1) ( )
2
n i n n n
i j i i i
n n
T n c c i ci c i c O n
= = = = =
+
= = − + = = = =
   
‫مثال‬
For(int i=1; i<=n; i++)
for(int j=1; j<=i; j++)
for(int k=1; k<=j; k++)
45
‫مثال‬
For(int i=1; i<=n; i++)
for(int j=1; j<=i*i; j++)
for(int k=1; k<=j*i*j; k++)
for(int l=1; l<=k*i*k; l++)
46
❑
‫يك‬
‫يا‬
‫چند‬
‫راه‬
‫حل‬
‫ساده‬
‫دارند‬
‫كه‬
‫بصورت‬
‫غیر‬
‫بازگشت‬
‫ی‬
‫قابل‬
‫اند‬‫حل‬
.
‫اين‬
‫حاالت‬
‫را‬
‫حالت‬
‫تو‬
،‫قف‬
‫حالت‬
‫پايه‬
‫و‬
‫يا‬
‫شرط‬
‫خاتمه‬
‫م‬
‫ی‬
‫نامند‬
.
❑
‫ها‬‫حالت‬
‫ی‬
‫ديگر‬
‫مسئله‬
‫م‬
‫ی‬
‫توانند‬
‫با‬
‫استفاده‬
‫از‬
‫خاصیت‬
‫پذير‬‫بازگشت‬
‫ی‬
‫به‬
‫مسائل‬
‫ی‬
‫تب‬
‫ديل‬
‫شوند‬
‫كه‬
‫به‬
‫حالت‬
‫توقف‬
‫نزدي‬
‫ک‬
‫تر‬
‫هستند‬
‫و‬
‫در‬
‫واقع‬
‫از‬
‫پیچیدگ‬
‫ی‬
‫مسئله‬
‫كاسته‬
‫شده‬
‫است‬
.
‫بازگشتي‬ ‫هاي‬‫الگوريتم‬
Recursive Algorithms)
)
47
‫کلی‬ ‫روابط‬
:
48
𝑂 1 < 𝑂 log 𝑛 < O n < O n log 𝑛 < O 𝑛2 < O 𝑛3 < ⋯ < O 2𝑛 < O 3𝑛 < ⋯ < O(n!)
‫شدنی‬ ‫رام‬ ‫مسائل‬ ‫نشدنی‬ ‫رام‬ ‫مسائل‬
‫مثال‬
:
‫مرتبه‬ ‫با‬ ‫الگوریتمی‬ ‫کامپیوتری‬
O(n3)
‫سایز‬ ‫برای‬ ‫را‬
n=104
‫مدت‬ ‫در‬ ‫را‬
60
‫کند‬‫می‬ ‫اجرا‬ ‫ثانیه‬
.
‫الف‬
)
‫دستورالعمل‬ ‫یک‬ ‫اجرای‬ ‫زمان‬ ‫تعیین‬ ‫مطلوبست‬
.
‫ب‬
)
‫با‬ ‫هایی‬ ‫الگوریتم‬ ‫اجرای‬ ‫زمان‬ ‫تعیین‬ ‫مطلوبست‬
Order
O(n)
،
O(n3)
،
O(n log n) O(2n)
،
O(3n)
‫سایز‬ ‫برای‬
n=210
.
𝑛 = 104 3
= 1012
→ 𝑡 = ൗ
60
1012 = 6 ∗ 10−11
210
≅ 103
𝑂 𝑛 → 210
∗ 6 ∗ 10−11
= 6 ∗ 10−8
𝑠
𝑂 𝑛3
→ 210 3
∗ 6 ∗ 10−11
≅ 109
∗ 6 ∗ 10−11
= 6 ∗ 10−2
𝑠
𝑂 𝑛 log 𝑛 → 210
∗ 10 ∗ 6 ∗ 10−11
≅ 6 ∗ 10−7
𝑠
𝑂 2𝑛 → 2210
∗ 𝑡 ≅ 2103
∗ 𝑡 = 210 100
∗ 6 ∗ 10−11
= 10300
∗ 6 ∗ 10−11
= 6 ∗ 10289
𝑠
𝑂 3𝑛 → 3210
∗ 𝑡 ≅ 3103
∗ 𝑡 = 6 ∗ 104 100
∗ 6 ∗ 10−11
= 6101
∗ 10389
𝑠
49
6 6 12 6 17
14
3 8
13
283
101 383
V*10 t /10 60 /10 *10 = 6 * 10 =t
O(n) 6*10
O(n ) 6*10
( log ) 6*10
(2 ) 6*10
(3 ) 6 *10
n
n
O n n
O
O
− −
−
−
−
→ →
→
→
→
→
→
‫نمایی‬ ‫های‬‫الگوریتم‬
(
‫نشدنی‬ ‫رام‬
)
‫ک‬ ‫زیاد‬ ‫بسیار‬ ‫هم‬ ‫را‬ ‫کامپیوتر‬ ‫سرعت‬ ‫اگر‬ ‫حتی‬
‫نیم‬
(
‫مثال‬
1000000
‫برابر‬
)
‫دهند‬‫نمی‬ ‫گیری‬‫چشم‬ ‫سرعت‬ ‫تغییر‬
.
‫ج‬
)
‫را‬ ‫کامپیوتر‬ ‫سرعت‬ ‫کنید‬ ‫فرض‬
106
‫کنیم‬ ‫برابر‬
.
‫کنید‬ ‫محاسبه‬ ‫را‬ ‫جدید‬ ‫های‬‫زمان‬ ‫حال‬
.
‫مثال‬
(
‫ادامه‬
:)
50
‫تمرین‬
:
51
‫فرض‬
‫کنید‬
‫کامپیوتری‬
‫یک‬
‫میلیون‬
‫عمل‬
‫را‬
‫در‬
‫یک‬
‫ثانیه‬
‫انجام‬
‫می‬
‫دهد‬
‫اگر‬
‫الگوریت‬
‫می‬
‫با‬
‫مرتبه‬
n
‫با‬
‫اندازه‬
‫مسئله‬
50
‫برروی‬
‫این‬
‫کامپیوتر‬
‫اجرا‬
‫شود‬
‫چه‬
‫مدت‬
‫زمان‬
‫طول‬
‫خواهد‬
‫کشید‬
‫؟‬
O(n)
(
‫الف‬
O(𝑛2
)
(
‫ب‬
O(2𝑛)
(
‫ج‬
O(3𝑛
)
(
‫د‬
‫بازگشتی‬ ‫توابع‬ ‫انواع‬
‫بازگشهت‬ ‫رابطهه‬ ‫اين‬ ‫كلي‬ ‫شكل‬
‫ی‬
‫بصهورت‬
T(n)+cT(n-1) = 0
‫م‬
‫ی‬
‫باشهدكه‬
c
‫يه‬
‫ک‬
‫ضهريب‬
‫است‬ ‫ثابت‬
.
‫بازگشت‬ ‫رابطه‬ ‫نوع‬ ‫اين‬
‫ی‬
‫جايگزين‬ ‫روش‬ ‫از‬
‫ی‬
‫است‬ ‫حل‬ ‫قابل‬
.
i)
-
T(n
(-C)
T(n)
3)
-
T(n
C
-
3))
-
T(n
(-C
C
T(n)
2)
-
T(n
C
2))
-
T(n
(-C
C
-
T(n)
1)
-
T(n
C
-
T(n)
i
3
2
2
=

=
=

=
=

=

i)
-
T(n
(-C)
T(n)
3)
-
T(n
C
-
3))
-
T(n
(-C
C
T(n)
2)
-
T(n
C
2))
-
T(n
(-C
C
-
T(n)
1)
-
T(n
C
-
T(n)
i
3
2
2
=

=
=

=
=

=

T(n-1)= -c T(n-2)
T(n-1)= -c T(n-2)
52
return(n∗fact(n-1))
‫حل‬
:
c₂ T(n-1)
T(n)=
c₁
T(n-1)+c₂ n>1
n=1
T(n)=T(n-1)+c₂
T(n-2)+c₂+c₂
=
T(n)
T(n)=T(n-2)+2c₂
T(n)=T(n-3)+ c₂+2c₂
T(n-3)+3c₂
=
⁞
T(n)=T(n-i)+ic₂
n-i=1 i=n-1
T(n) =T(n-(n-1)) + (n-1)c₂
T(n) = c₁+(n-1)c₂ = O(n)
‫بازگشتی‬ ‫توابع‬ ‫انواع‬
Int fact ( int n )
{
if (n = = 0|| n = = 1)
return 1;
else
return ( n ×𝑓𝑎𝑐𝑡(𝑛−1));
}
‫ی‬ ‫محاسبه‬
‫اجرای‬ ‫زمان‬
‫رابطه‬
‫بازگشتی‬ ‫ی‬
:n!
53
‫مثال‬
1
int fact(int n)
{
if (n<=1)
return n;
return n*fact(n-1);
}
54
‫مثال‬
1
int fact(int n)
{
if (n<=1)
return n;
return n*fact(n-1);
}
‫مانند‬ ،‫شود‬ ‫می‬ ‫انجام‬ ‫عمل‬ ‫ثابتی‬ ‫تعداد‬
C
‫تعداد‬ ‫به‬
T(n-1)+1
‫شود‬ ‫می‬ ‫انجام‬ ‫عمل‬ ‫بار‬
.
T(n)=
C n<=1
T(n-1)+1 n >1
55
‫اگر‬
‫تعداد‬
‫اعمال‬
‫الزم‬
‫برای‬
‫اجرای‬
‫الگوریتم‬
‫با‬
‫اندازه‬
‫مساله‬
n
‫را‬
T(n)
‫در‬
‫نظر‬
‫بگیریم‬
:
(
‫یعن‬
‫ی‬
‫فرض‬
‫کنیم‬
‫اجرای‬
Test(n)
،
T(n)
‫عمل‬
‫نیاز‬
‫دارد‬
)
‫مثال‬
1
T(n)=
C n<=1
T(n-1)+1 n >1
T(n)=T(n-1)+1
=T(n-2)+1+1
=T(n-3)+1+1+1
= ...
=T(n-i)+i
=T(n-(n-1))+n-1
=T(1)+n-1
= C+n-1 → O(n)
n-i=1 → i=n-1
‫جایگذاری‬ ‫روش‬
:
56
int Test(int n)
{
if (n==1)
return 1;
return Test(n/2)+Test(n/2);
}
‫مثال‬
2
،
57
int Test(int n)
{
if (n==1)
return 1;
return Test(n/2)+Test(n/2);
}
T(n)=
C n=1
2T(n/2)+1 n >1
58
‫مثال‬
2
،
‫اگر‬
‫تعداد‬
‫اعمال‬
‫الزم‬
‫برای‬
‫اجرای‬
‫الگوریتم‬
‫با‬
‫اندازه‬
‫مساله‬
n
‫را‬
T(n)
‫در‬
‫نظر‬
‫بگیریم‬
:
(
‫یعن‬
‫ی‬
‫فرض‬
‫کنیم‬
‫اجرای‬
Test(n)
،
T(n)
‫عمل‬
‫نیاز‬
‫دارد‬
)
T(n)=
C n=1
2T(n/2)+1 n >1
T(n)=2T(n/2)+1
= 2(2T(n/4)+1)+1=4T(n/4)+3
= 4(2T(n/8)+1)+3=8T(n/8)+7
=
8(2T(n/16)+1)+7=16T(n/16)+15
=...
= 2iT(n/2i)+2i-1
= 2lognT(n/2logn)+2logn-1
= 2lognT(1)+ 2logn -1
= n*C+n-1
= (C+1)n-1 → O(n)
n/2i =1 → i=logn
59
‫مثال‬
2
،
int Test(int n)
{
if (n==0)
return 1;
return Test(n-1)+Test(n-1);
}
60
‫مثال‬
3
،
int Test(int n)
{
if (n==0)
return 1;
return Test(n-1)+Test(n-1);
}
T(n)=
1 n=0
2T(n-1)+1 n >0
61
‫اگر‬
‫تعداد‬
‫اعمال‬
‫الزم‬
‫برای‬
‫اجرای‬
‫الگوریتم‬
‫با‬
‫اندازه‬
‫مساله‬
n
‫را‬
T(n)
‫در‬
‫نظر‬
‫بگیریم‬
:
(
‫یعن‬
‫ی‬
‫فرض‬
‫کنیم‬
‫اجرای‬
Test(n)
،
T(n)
‫عمل‬
‫نیاز‬
‫دارد‬
)
‫مثال‬
3
،
T(n)=
1 n=0
2T(n-1)+1 n >0
T(n)= 2T(n-1)+1
= 2(2T(n-2)+1)+1=4T(n-2)+3
= 4(2T(n-3)+1)+3=8T(n-3)+7
= ...
= 2iT(n-i)+2i-1
= 2nT(n-n)+2n-1
= 2nT(0)+2n-1
= 2n * 1+2n-1=2n+1-1 → O(2n)
n-i=0 →
i=n
62
‫مثال‬
3
،
n‫حلقه‬
‫مبدا‬ ‫کمکی‬ ‫مقصد‬
63
‫مثال‬
T(n)=
c₁ n=1
2T(n-1)+c₂ n >1
void hanoi (int n, int from, int to, int help)
{
if (n == 1)
{
cout << n <<":"<< from << “-->"<<to<<endl;
return;
}
else
{
hanoi ( n-1,from,help,to );
cout << n <<":"<< from << “-->"<<to<<endl;
hanoi( n-1, help, to, from );
}
}
64
65
‫مثال‬
(
‫ادامه‬
)
‫تابع‬ ‫اجرا‬ ‫براي‬ ‫الزم‬ ‫زمان‬
n , hanoi
‫ورودی‬ ‫تابع‬ ‫اجرا‬ ‫براي‬ ‫الزم‬ ‫زمان‬
n , hanoi
‫ورودی‬
‫تابع‬ ‫اجرا‬ ‫براي‬ ‫الزم‬ ‫زمان‬
n-1, hanoi
‫ورودی‬ ‫تابع‬ ‫اجرا‬ ‫براي‬ ‫الزم‬ ‫زمان‬
n-1, hanoi
‫ورودی‬
│ T(n) = 2 × T (n - 1) + C2
│ T(1) = C1
65
c₁ n=1
2T(n-1)+c₂ n >1
T(n)=
T(n)=
‫مثال‬
(
‫ادامه‬
)
T(n)=2T(n-1)+c₂
2(2T(n-2)+c₂)+c₂=2²(T(n-2))+2c₂+c₂=T(n)
T(n)=2²(2T(n-3)+c₂)+2c₂+c₂=2³T(n-3)+2²c₂+2c₂+c₂
2c₂+c₂
+...+
₂
c
²
T(n)=2ⁱ T(n-i)+2ⁱ⁻¹ c₂+2ⁱ⁻
66
‫مسئله‬ ‫اولیه‬ ‫شرايط‬ ‫به‬ ‫توجه‬ ‫با‬
(
‫خاتمه‬ ‫شرط‬ ‫يا‬ ‫توقف‬ ‫شرط‬
)
‫كه‬
T(1)=𝑪𝟏
‫باشد‬ ‫مي‬
،
‫بايد‬
T(n - i)
‫بهه‬ ‫را‬
T(1)
‫كنیم‬ ‫تبديهل‬
.
‫كنیم‬ ‫فرض‬ ‫كافیست‬ ‫منظهور‬ ‫اين‬ ‫بهراي‬
n - i = 1
‫كه‬
i = n-1
‫داشت‬ ‫خواهیم‬
:
‫مثال‬
𝑇 𝑛 = 2𝑛−1𝑇 1 + 2𝑛−2𝐶2 + 2𝑛−3𝐶2 + ⋯ + 2𝐶2 + 𝐶2
𝑇 𝑛 = 2𝑛−1𝐶1 + 2𝑛−1 − 1 𝐶2
67
T(n)=((𝐶1+𝐶2)/2) 2n -𝐶2 = 𝑂(2n)
‫تمرین‬
:
68
‫فرض‬
‫کنید‬
‫در‬
‫مسئله‬
‫برج‬
‫هانوی‬
‫می‬
‫خواهیم‬
‫مهره‬
‫ها‬
‫را‬
‫از‬
‫میله‬
‫مبدا‬
‫به‬
‫مقصد‬
‫منت‬
‫قل‬
‫کنیم‬
‫با‬
‫این‬
‫شرط‬
‫که‬
‫همه‬
‫ی‬
‫مهره‬
‫ها‬
‫حتما‬
‫باید‬
‫از‬
‫طريق‬
‫میله‬
‫ی‬
‫کمکی‬
‫انتقال‬
‫ي‬
،‫ابند‬
‫يعني‬
‫انتقال‬
‫مستقیم‬
‫بین‬
‫دو‬
‫میله‬
‫مبدا‬
‫و‬
‫مقصد‬
‫امكان‬
‫پذير‬
‫نیست‬
.
‫تابع‬
‫م‬
‫ذکور‬
‫را‬
‫بازنویسی‬
‫کنید‬
‫و‬
‫مرتبه‬
‫زمانی‬
‫آن‬
‫را‬
‫بدست‬
‫آورید؟‬
‫زمانی‬ ‫مرتبه‬ ‫اصلی‬ ‫قضیه‬
( ) ( / ) ( ), , 1
T n aT n b f n a b
= + 
log log
log log
1
log
0
0
( ) ( ) ( )
( ) ( log ( )) ( ) ( log ( ))
( ( )) ( ) ( )
a a
b b
a a
b b
a
b
k k
for some
for some
n if f n n
T n n n if f n n n
f n if f n n





 

−
+
+


 = 


= =


= 


‫باشد‬ ‫زیر‬ ‫صورت‬ ‫به‬ ‫بازگشتی‬ ‫رابطه‬ ‫یک‬ ‫اگر‬
:
‫ب‬ ‫خواهد‬ ‫برابر‬ ‫مستقیم‬ ‫طور‬ ‫به‬ ‫فوق‬ ‫بازگشتی‬ ‫رابطه‬ ‫زمانی‬ ‫مرتبه‬ ‫صورت‬ ‫این‬ ‫در‬
‫با‬ ‫ود‬
69
‫زمانی‬ ‫مرتبه‬ ‫اصلی‬ ‫قضیه‬ ‫از‬ ‫هایی‬‫مثال‬
T(n)=
C n=1
2T(n/2)+1 n >1
a=2, b=2
)
(
)
(
)
(
2
2
log
n
n
n
T 
 =
=
70
log log
log log
1
log
0
0
( ) ( ) ( )
( ) ( log ( )) ( ) ( log ( ))
( ( )) ( ) ( )
a a
b b
a a
b b
a
b
k k
for some
for some
n if f n n
T n n n if f n n n
f n if f n n





 

−
+
+


 = 


= =


= 


‫زمانی‬ ‫مرتبه‬ ‫اصلی‬ ‫قضیه‬ ‫از‬ ‫هایی‬‫مثال‬
3
8 ( / 2) log 1
( )
1 1
T n n n n n
T n
n
 + + 
= 


a=8 ،b=2
3
( ) ( log )
T n n n

=
71
log log
log log
1
log
0
0
( ) ( ) ( )
( ) ( log ( )) ( ) ( log ( ))
( ( )) ( ) ( )
a a
b b
a a
b b
a
b
k k
for some
for some
n if f n n
T n n n if f n n n
f n if f n n





 

−
+
+


 = 


= =


= 


‫زمانی‬ ‫مرتبه‬ ‫اصلی‬ ‫قضیه‬ ‫از‬ ‫هایی‬‫مثال‬
7
10 ( / 3) 5 3 1
( )
1 1
T n n n n
T n
n
 + + 
= 


a=10 ،b=3
)
(
)
( 7
n
n
T 
=
72
log log
log log
1
log
0
0
( ) ( ) ( )
( ) ( log ( )) ( ) ( log ( ))
( ( )) ( ) ( )
a a
b b
a a
b b
a
b
k k
for some
for some
n if f n n
T n n n if f n n n
f n if f n n





 

−
+
+


 = 


= =


= 


‫زمانی‬ ‫مرتبه‬ ‫اصلی‬ ‫قضیه‬ ‫از‬ ‫هایی‬‫مثال‬
73
1
)
3
2
(
)
( +
=
n
T
n
T
2
)
3
(
3
)
( n
n
T
n
T +
=
m
n
n
n
T
n
T 2
),
log(
)
(
2
)
( =
+
=
log log
log log
1
log
0
0
( ) ( ) ( )
( ) ( log ( )) ( ) ( log ( ))
( ( )) ( ) ( )
a a
b b
a a
b b
a
b
k k
for some
for some
n if f n n
T n n n if f n n n
f n if f n n





 

−
+
+


 = 


= =


= 


‫زمانی‬ ‫مرتبه‬ ‫اصلی‬ ‫قضیه‬ ‫از‬ ‫هایی‬‫مثال‬
74
))
(log(
)
(
1
)
3
2
(
)
( n
n
T
n
T
n
T 
=

+
=
)
(
)
(
)
3
(
3
)
( 2
2
n
n
T
n
n
T
n
T =

+
=
))
log(
log
(log
)
(
2
),
log(
)
(
2
)
( n
n
n
T
n
n
n
T
n
T m

=

=
+
=
2
2
2
),
log(
),
(
)
2
(
)
(
m
m
m
n
n
m
n
T
T
m
S =
=
=
=
=
))
log(
log
)
(log(
)
(
))
log(
(
)
(
)
2
(
2
)
(
n
n
n
T
m
m
m
S
m
m
S
m
S


=

=

+
=

log log
log log
1
log
0
0
( ) ( ) ( )
( ) ( log ( )) ( ) ( log ( ))
( ( )) ( ) ( )
a a
b b
a a
b b
a
b
k k
for some
for some
n if f n n
T n n n if f n n n
f n if f n n





 

−
+
+


 = 


= =


= 


‫بازگشتی‬ ‫روابط‬ ‫حل‬ ‫در‬ ‫متغیر‬ ‫تغییر‬ ‫از‬ ‫استفاده‬

‫شکلی‬ ‫به‬ ‫را‬ ‫بازگشتی‬ ‫رابطه‬ ‫مناسب‬ ‫متغیر‬ ‫تغییر‬ ‫یک‬ ‫با‬ ‫توان‬ ‫می‬ ‫اوقات‬ ‫گاهی‬
‫که‬ ‫مطلوب‬
‫نمود‬ ‫تبدیل‬ ،‫است‬ ‫حل‬ ‫قابل‬ ‫دیگر‬ ‫های‬‫روش‬ ‫با‬
.

،‫مثال‬

‫کرد‬ ‫فرض‬ ‫توان‬‫می‬
n=2k
( ) ( ) 1
T n T n
= +
( ) (log ) ( ) (log log )
S k k T n n
 
= → =
75
( ) ( / 2) 1
S k S k
= +
/2
(2 ) (2 ) 1 ( ) (2 )
k k k
T T S k T
= + → =
‫ت‬ ‫نام‬ ‫تغییر‬
‫ابع‬
‫تمرین‬

‫بیاورید‬ ‫بدست‬ ‫را‬ ‫زیر‬ ‫بازگشتی‬ ‫رابطه‬ ‫زمانی‬ ‫مرتبه‬
.
( ) ( )
2 3
( ) 4 ( ) log loglog
T n T n n n
= +
76
77
100
99
100
99
log log 1.0022 1.0022 1.0022
log
( ) 100 ( ) log( !)
99
log( !) ( log( )) ( ) 100 ( ) log( )
99
, ( ) ( ) log( ) ( )
( ) ( )
a
b
n
T n T n
n
n n n T n T cn n
n n n f n o n n o n
T n n


= +
=  = +
= = =  =
 =
78
8
9
log 0.95
( ) 8 ( ) log( )
9
( ) log( ) ( )
( ) ( ( )) ( log( ))
n
T n T n n
f n n n n n
T n f n n n

 
= +
= = 
 = =
79
2
2 2
( ) 4 ( ) 5 log( ) 6
2
( ) ( ) ( ) ( log( ))
n
T n T n n n n
f n n T n n n
 
= + + +
 =  =
‫درجه‬ ‫ناهمگن‬ ‫و‬ ‫همگن‬ ‫بازگشتی‬ ‫روابط‬
1
،
2
،
...

‫درجه‬ ‫همگن‬ ‫بازگشتی‬ ‫رابطه‬
k
‫آن‬ ‫در‬ ‫که‬ ‫باشد‬‫می‬ ‫زیر‬ ‫صورت‬ ‫به‬
k
‫و‬
‫ضرایب‬
a
‫ثابت‬ ‫مقادیر‬
‫هستند‬
:

‫درجه‬ ‫همگن‬ ‫بازگشتی‬ ‫رابطه‬ ‫مثال‬
2
:

‫پذیرد‬ ‫می‬ ‫صورت‬ ‫مشخصه‬ ‫معادله‬ ‫کمک‬ ‫به‬ ‫روابط‬ ‫گونه‬ ‫این‬ ‫کلی‬ ‫حل‬ ‫راه‬
.
1 2
( ) ( 1) ( 2) ... ( )
k
T n aT n a T n a T n k
= − + − + + −
80
1 2
( ) ( 1) ( 2)
(0) , (1)
T n aT n bT n
T t T t
= − + −
= =
‫درجه‬ ‫همگن‬ ‫بازگشتی‬ ‫روابط‬ ‫حل‬
2

‫فرض‬ ‫با‬
T(n)=xn
،
‫داشت‬ ‫خواهیم‬ ‫را‬ ‫زیر‬ ‫مشخصه‬ ‫معادله‬
:

‫های‬‫ریشه‬ ‫آوردن‬ ‫بدست‬ ‫و‬ ‫معادله‬ ‫این‬ ‫حل‬ ‫با‬
x1,x2
‫داشت‬ ‫خواهیم‬
:

‫که‬
c1
‫و‬
c2
‫ن‬ ‫پیدا‬ ‫را‬ ‫آنها‬ ‫اولیه‬ ‫مقادیر‬ ‫و‬ ‫اصلی‬ ‫رابطه‬ ‫از‬ ‫توان‬‫می‬ ‫که‬ ‫هستند‬ ‫هایی‬‫ثابت‬
‫مود‬
.
81
1 2
2
0
n n n
x ax bx
x ax b
− −
= +
− − =
1 1 2 2
( ) n n
T n c x c x
= +
1 2
( ) ( 1) ( 2)
(0) , (1)
T n aT n bT n
T t T t
= − + −
= =
‫مثال‬
:
‫فیبوناچی‬ ‫سری‬
int Fib(int n)
{
if (n<=1)
return n;
return Fib(n-1)+Fib(n-2);
}
82
( ) ( 1) ( 2)
(0) 0, (1) 1
0,1, 2, 3, 5, 8,13,...
f n f n f n
f f
= − + −
= =
( ) ( 1) ( 2) 1
(0) 0, (1) 1 1
T n T n T n n
T T n
= − + − 
= = 
‫مثال‬
:
‫فیبوناچی‬ ‫سری‬
83
( ) ( 1) ( 2) 1
(0) 0, (1) 1 1
T n T n T n n
T T n
= − + − 
= = 
2
1 0
x x
− − = →
1 2
1 5 1 5
( )
2 2
n n
T n c c
   
+ −
= +
   
   
   
1 5
( )
2
n
T n 
 
 
+
 
=  
 
 
 
 
1 2
1 5 1 5
,
2 2
x x
   
+ −
= =
   
   
   
‫درجه‬ ‫همگن‬ ‫بازگشتی‬ ‫روابط‬ ‫حل‬
2

‫فرض‬ ‫با‬
T(n)=xn
،
‫داشت‬ ‫خواهیم‬ ‫را‬ ‫زیر‬ ‫مشخصه‬ ‫معادله‬
:

‫فوق‬ ‫معادله‬ ‫اگر‬
‫مضاعف‬ ‫ریشه‬
‫داشت‬ ‫خواهیم‬ ،‫باشد‬ ‫داشته‬
:
84
1 2
2
0
n n n
x ax bx
x ax b
− −
= +
− − =
1 1 2 1
( ) n n
T n c x c nx
= +
1 2
( ) ( 1) ( 2)
(0) , (1)
T n aT n bT n
T t T t
= − + −
= =
‫بازگشتی‬ ‫روابط‬ ‫حل‬
‫ناهمگن‬

‫که‬
f(n)
‫باشد‬‫می‬ ‫دلخواه‬ ‫تابعی‬
.

‫گردد‬ ‫حل‬ ‫سپس‬ ‫و‬ ‫شده‬ ‫تبدیل‬ ‫همگن‬ ‫رابطه‬ ‫به‬ ‫رابطه‬ ‫این‬ ‫باید‬ ‫معموال‬
.

‫کتاب‬ ‫ضمیمه‬ ‫بخش‬ ‫به‬ ‫بیشتر‬ ‫تمرین‬ ‫و‬ ‫مطالعه‬ ‫برای‬
‫نیپولیتان‬
‫کنید‬ ‫مراجعه‬
.
85
1 2
( ) ( 1) ( 2 )
) ... ( (
)
k
T n aT n a T n a T n
k f
n
= − + − + + − +
‫اصلی‬ ‫قضیه‬ ‫اثبات‬
86
( ) ( / ) ( ), , 1
T n aT n b f n a b
= + 
2
2
2
3 2
3 2
3 2
log 1
0
( ) ( ) ( )
( ) ( ) ( )
( ) ( ) ( )
( ) ( ) ( ) ( )
( ) ( ) ( ) ( )
( ) ( )
n
b
k i
k i
i
n
T n aT f n
b
n
n
b
a aT f f n
b b
n n
a T af f n
b b
n n n
a aT f af f n
b b b
n n n
a T a f af f n
b b b
n n
a T a f
b b
−
=
= +
 
 
= + +
 
 
= + +
 
= + + +
 
 
= + + +
= + 
87
2
2
2
3 2
3 2
3 2
log 1 log 1
log
0 0
( ) ( ) ( )
( ) ( ) ( )
( ) ( ) ( )
( ) ( ) ( ) ( )
( ) ( ) ( ) ( )
( ) ( ) (1) ( )
1 l
n n
b b
n
b
k i i
k i i
i i
k
n
T n aT f n
b
n
n
b
a aT f f n
b b
n n
a T af f n
b b
n n n
a aT f af f n
b b b
n n n
a T a f af f n
b b b
n n n
a T a f a T a f
b b b
n
k
b
− −
= =
= +
 
 
= + +
 
 
= + +
 
= + + +
 
 
= + + +
= + = +
= → =
 
ogn
b
88
log 1 log 1
log log
0 0
log log
log log
log
log 1 log 1
0 0
log
log
( ) ( ) ( )
( ) (1) ( ) (1) ( )
(1) ( )
( ) ( ) ( )
( ) ( )
(
n n
b b
n a
b b
a a
b b
a a
b b
a
n n b
b b
a
b
i i
i i
i i
i i
i i
i i
n
T n aT f n
b
n n
T n a T a f n T a f
b b
n T n
if f n n f n cn
n n
a f a c
b b
a
c n
b



− −
= =
−
−
− −
= =
−
= +
 = + = +
= 
=    
  
= 
 
 
log 1 log
log
log
0
1 2
1
) ,
1
1
1
1
n n
b b
a
b
a a
b b
i
i
n
n n
A a
c n A
A b
a
a a a
a

 
−
−
− −
=
− −
−
=   =
−
−
= + + + +
−

‫اول‬ ‫حالت‬ ‫اثبات‬
89
log 1 log 1
log log
0 0
log log
log log
log
log 1 log 1
0 0
log
log
( ) ( ) ( )
( ) (1) ( ) (1) ( )
(1) ( )
( ) ( ) ( )
( ) ( )
(
n n
b b
n a
b b
a a
b b
a a
b b
a
n n b
b b
a
b
i i
i i
i i
i i
i i
i i
n
T n aT f n
b
n n
T n a T a f n T a f
b b
n T n
if f n n f n cn
n n
a f a c
b b
a
c n
b



− −
= =
−
−
− −
= =
−
= +
 = + = +
= 
=    
  
= 
 
 
log 1 log
log log log
0
log log
log log log
log log log log
1
) ( )
1
( ) ( ) ( )
( )
n n
b b
a a n
b b b
a
b
a a
b b
n n a
b b b
a n a a
b b b b
i
i
A
c n n A
A
a n n
A T n n
b b n
 

  
−
− −
−
=
− − −
−
=   =  
−
= = =  = 

90
log log
log 1 log 1
log log
0 0
log
log 1 log 1
log
0 0
( ) ( log ( )) ( ) log ( )
( ) (1) ( ) (1) ( )
( ) ( log ( )) ( ) ( ) log ( )
log ( )
a a
b b
n n
b b
n a
b b
a
n n b
b b
a
b
k k
i i
i i
i i
k i i k
i i i
i i
k
f n n n f n cn n
n n
T n a T a f n T a f
b b
n n n
if f n n n a f a c
b b b
c n n

− −
= =
− −
= =
=    
 = + = +
=    
=  
 
 
log 1
log
log
0
log log
1
log log
log 1
( )
log ( ) log log ( ) , 1
( ) ( log ( ))
n
b
a
b
a
b
a a
b b
a b
b b
a
b
i
i
k n k
b
k
a
b
a a
c n n c n n
b a
T n n n
−
=
+
+
=    =   = =
 =  

‫دوم‬ ‫حالت‬ ‫اثبات‬
✓
‫استقرا‬ ‫بر‬ ‫مبتنی‬
(
Induction
)
✓
‫حل‬ ‫و‬ ‫تقسیم‬
(
Divide and conquer
)
✓
‫پویا‬ ‫نویسی‬ ‫برنامه‬
(
Dynamic programming
)
✓
‫حریصانه‬
(
Greedy
)
‫جستجو‬ ‫های‬‫روش‬
:
✓
‫عقب‬ ‫به‬ ‫بازگشت‬
(
Back tracking
)
✓
‫تحدید‬ ‫و‬ ‫انشعاب‬
(
Branch and bound
)
‫الگوریتم‬ ‫طراحی‬ ‫های‬‫روش‬
:
91

Array in data structures and algorithm design