Introduction
Download
Report
Transcript Introduction
مهدی ایل بیگی
دانشگاه آزاد اسالمی دماوند
.1کتاب "اصول ساختمان داده ها" نوشته "سیمور لیپ شوتز" و ترجمه "مهندس ابراهیم
زاده قلزم”.
2. ”Fundamentals of Data Structures“ by Ellis Horowitz
and Sartaj Sahni.
.3ساختمان داده ها ،تننباوم آرون ام .ساختمان داده ها در .C
4. CLRS: Introduction to Algorithms (2nd Ed.) MIT Press.
” .5ساختمان داده ها“ ،حمید رضا مقسمی.
2
• آزمون میان ترم و پایان ترم 14 :نمره
• تمرین ها و پروژه ها 6 :نمره
• تاریخ امتحان میان ترم :؟
3
• پردازش داده ها ،مستلزم مراحل زير است:
.1ذخیره داده ها
.2بازيابي داده های ذخیره شده
.3پردازش بر روی داده ها
• داده ها ميي تواننيد بيه صيوري هيال م تلزيي سيازمان د ي شيوند .ميدل منطقي ييا رياضي ي
سازمان د داده ها به يك شكل خاص ،ساختمان داده نام دارد.
برنامه = الگوريتم ها +ساختمان داده ها
4
.1
.2
.3
.4
.5
.6
.7
.8
5
مقدمهای بر مرتبه اجرایی و توابع بازگشتی
آرایه
پشته و صف
لیست های پیوندی
درخت
درخت های ویژه
گراف
مرتب سازی
6
7
• اسامي دانشجويان دانشگاه ،در ليستي نگهدارل مي شود.
• عملیاي مورد نظر...
– دانشجوهال جديد به اين ليست اضافه مي شوند.
– دانشجويان فارغ التحصيل از اين ليست حذف مي شوند.
– برال آگا از سوابق دانشجويان ،بايد اين ليست را جستجو کرد.
• فرض کنيد:
– رکورد هر دانشجو با شماره دانشجويي او شناخته مي شود.
– اين شماره ،عددل 8رقمي است.
8
• روش اول :براي نگهداري اطالعات دانشجويان
– از آرايه ال به طول 1000عضو استزاده مي کنيم.
– برال افزودن دانشجول جدييد ،اوليین محيل خيار آراييه را پييداه کيرده و رکيورد او را بيت
مي کنيم.
– هنگييام حييذف نمييودن ،خانييه آرايييه مررييوو بييه رکييورد مييورد نظيير پیييدا نمييوده و آن را خييار
مي کنيم.
• براي پيدا کردن رکورد خاص:
– الزم است تک تک اعضال آرايه را بررس ي کنيم.
– در ليست هال بزرگ اين کار مقرون به صرفه نيست.
9
• روش دوم :براي نگهداري اطالعات دانشجويان
– از آرايه ال به طول 1000عضو استزاده مي کنيم.
– هنگ ييام ح ييذف و اض ييافه نم ييودن رکورده ييا ،ترتي ي آراي ييه را ب يير اس يياس ش ييماره دانش ييجويي
حزظ مي کنيم.
• الزم است عملياتي اضاف برال حزط ترتي انجام دهيم.
• براي پيدا کردن رکورد خاص ،الزم است تنها بخش ي از آرايه را جستجو کنيم(چرا؟)
– عم ييل ح ييذف و اض ييافه نم ييودن رکورده ييا م م ييوال در مق يياط خ يياص (مث ييل ش ييرو س ييال
تحصيل ) انجام مي گیرند اما عمل جستجو همواره مورد نياز است.
– استزاده از آرايه مرت کاراتر از روش اول است.
10
• تابع زير برال محاسبه توان نوشته شده است:
) long power (long x, long y
{
;long k = 1
)for (long n=1; n <= y; n++
;k = k * x
;return k
}
• اين تابع برال محاسبه 16 ، 416بار عمل ضرب انجام ميدهد.
11
• تابع زير نیز برال محاسبه توان نوشته شده است:
{ )long power (long x, long y
; long k = 1
{ )while (y > 1
};if (y % 2 == 0) {x = x * x; y = y / 2
};else {k = k * x; x = x * x; y = (y-1) / 2
}
;return k * x
}
• اين تابع برال محاسبه 8 ،416بار عمل ضرب يا تقسيم انجام ميدهد.
12
• بييا اسييتزاده از آرايييه مرتي (مثييال ،)1مييي تييوان کييارايي برنامييه مييديريت
اطالعاي را بهبود ب شيد.
• ب ييا نگه ييدارل نسيج ييه محاس ييباي پيش ييین (مث ييال ،)2م ييي ت ييوان از انج ييام
دوراره آن ها جلوگیرل و در زمان صرفه جويي کرد.
13
.1الگييوريتم بايييد بييدون ابهييام ،م ييین و قب ي باشييد ،بييه طييورل ييه هيير مرحلييه
روشن و واضح باشد.
.2الگييوريتمه ييا باي ييد بييه ق ييدرل س يياده باشييند ييه توس ييط ييام يوتر قاب يل اج يرا
باشند.
.3بايد خاتمه پذير باشند ،ي ني پس از ت دادل مراحل ،خاتمه يابند.
• ييارايي الگ ييوريتم براس يياس دو م ي ييار ان ييدازه گی ييرل م ييي ش ييود .يك ييي از آن ه ييا
بهييرهورل از فضييا و ديگييرل ييارايي زمييان اسييت .فضييا ،حافظييه ال اسييت يه
ب يرال ذخیييره داده هييا الزم اسييت و زمييان ،زمييان الزم ب يرال پييردازش داده هييا
است.
14
.1سرعت سخت افزار
.2نو کام ایلر
.3اندازه داده ورودی مسئله
.4پیچیدگی زمانی و فضایی الگوریتم
و...
15
• عوامييل مت ييددل در زمييان اج يرال الگييوريتم مييو ر هسييسند ،وري آنچييه ييه بييه عنييوان ييارايي الگييوريتم
مبرح است ،ت داد دف اي اجرال دستوراي ميباشد.
• دانشي ييمندان ي ييام يوتر ،نشي ييانه گي ييذارل هي ييا و اصي ييبالحاي زيي ييادل را ب ي يرال در ارتبي يياو بي ييین اني ييدازه
ورودل و زمان اجرا مبرح ردند .به عنوان مثيال ،اگير بيا دو برابير شيدن انيدازه ورودل ) ،(nزميان
اجرال الگوريتم نیز دوررابر شود،آن گاه زمان اجرال الگوريتم به طور خبي رشيد ميي نيد .بيه ايين
ترتي ،مي گوييم نرخ رشد ،مرتبه nاست.
• ازطرف ديگر ،اگير بيا دو برابير شيدن انيدازه ورودل ،زميان اجيرال الگيوريتم بهيار برابير شيود ،آن گياه
الگوريتم با نرخ توان دوم رشد مي ند .در اين مورد ميگوييم نرخ رشد آن ،مرتبه n2است.
• ) :T(nتاب برحس ( nت داد ورودل) است ه زمان الگوريتم را نشان ميدهد.
16
• نماد Oرا مي تيوان اختصيار وا ه هيال ( )Order of magnitudeدانسيت .ايين نمياد را نمياد
Oبزرگ يا Big-Oمي نامند.
• ت ريي :تيابع f1از مرتبيه ) O(f2اسيت ،اگير بيرال اعيداد بيزرگ ،nبزرگتير از عيددل مثيل ،n0
ابت cوجود داشته که در راببه زير صدق ند:
•
)for all n >= n0 , f1(n) <= c f2(n
c f2ران باالل تابع f1ناميده مي شود.
• مثال:
f1(n) = 2n2 + 3n + 7 , f2(n) = n2
)f2 ∈ O(f1
)f1 ∈ O(f2
17
)for all n >= 1 , f2(n) < f1(n
)for all n >= 6 , f1(n) < 3 f2(n
• تابع زیر از مرتبه
می باشد.
)O(n*m
• تابع زیر از مرتبه
)nمی باشد.
O(log
For i := 1 to n
For j :=1 to m
;x++
18
;x = 0
;i = n
)While (i > 1
{
;x--
;i /= 2
}
• تابع زیر از مرتبه
می باشد.
)O(1
;x=0
;i = n
)While (i > 1
{
;x--
;i %= 2
}
• تابع زیر از مرتبه
19
O(nباشد.
) 3می
For i := 1 to n
For j :=1 to m
For k :=1 to j
;x++
.می باشد2 n * log3 n)
O(log
a = n;
While (a > 1)
{
a /= 2;
b = n;
while (b > 1)
{
b /= 3;
x++;
}
}
• تابع زیر از مرتبه
O(log2 n * log3 n)
O(log3 n)
20
.باشد2می
O(n
)
• تابع زیر از مرتبه
. می باشدO(n2)
• تابع زیر از مرتبه
for (k = 0; k <= n-1; k++)
for (i = 0; i <= n-k; i++)
a[i][i+k] = k;
for(i = 1; i <= n; i++)
for (j = i+1; j <= n; j++)
S++;
21
.باشد
می+ log2 n))
O(n(m
For (i = 1; i <= n; i++)
{
for (j = 1; j <= m; j++)
O(m)
k = k + 1;
j = 1;
while (j < n)
{
O(log2 n)
k++;
j = 2 * j;
}
}
O(m + log2 n)
• تابع زیر از مرتبه
O(n(m + log2 n))
22
.باشد2می
O(n
)
• تابع زیر از مرتبه
S = 0;
for (i = 0 ; i < n; i++)
for (j = 0; j < n; j++)
for (k = 0; k < 3; k++)
S++;
:• ترتی بند مرتبه زمانی
• O(1) < O(log n) < O(n) < O(n log n) < O(nk) , k >=2
• O(nk) < O(2n) < O(an) < O(n!) < O(nn)
, a >= 2
23
.f1 ∈ O(f2) بیشتر باشد آنگاهf1 از تابعf2 • اگر مرتبه تابع
1. n! ∈ O(nn)
2. 2n2nn + n2 log n ∈ O(2nnn)
3. n2 log n ∈ O(n3)
4. n2 / log n ∈ O(n2)
5. n2 ∈ O(n3)
6. log n ∈ O(√n)
7. 1/n ∈ O(√n)
8. 1/n ∈ O(log n)
24
• تابع بازگشتی تاب ی است که بصوري مستقیم یا غیر مستقیم خودش را فراخوانی کند.
• مثال :تابع محاسبه فاکتوریل بصوري بازگشتی:
)int factorial(int n
{
;if (n <= 1) return 1
;)return n * factorial(n-1
}
• برای نوشتن هر تابع بازگشتی باید دو مورد را مشخص نمود:
.1فرمول فراخوانی مجدد تابع.
.2شرو توق فراخوانی ها و خاتمه تابع.
25
. بدست آوریدRec(6) • مقدار تابع زیر را با فراخوانی
int Rec(int n)
{
if (n == 1)
return(1);
else
return(Rec(n - 1) + Rec(n - 1));
}
26
. بدست آوریدRec(5,3) • مقدار تابع زیر را با فراخوانی
int Rec(int p, int q)
{
int R;
if (q <= 0)
return (1);
R = Rec(p, q/2);
R = R * R;
if (q%2 == 0)
return(R);
else
return(R * P);
}
27
• توابع بازگشتی برای حل مسائل زیر بنویسید.
.1محاسبه حاصل جمع اعداد صزر تا .n
.2محاسبه عباراي ab ،a / b ،a * bو b % aبصوري بازگشتی.
.3محاسبه جمله nام از سری فیبوناچی.
– س ييری فیبون يياچی ی ييک س ييری اس ييت ک ييه دو جمل ييه اول آن 1اس ييت و بقی ييه جمل ييه ه ييا براب يير ب ييا
مجمو دو جمله قبل هسسند.
…1, 1, 2, 3, 5, 8, 13, 21,
28
29