HW1_Solution.pdf

‫به نام خدا‬
‫حل تمرینات سری اول درس ساختمان داده ها‬
‫‪ )1‬الف‪ -‬نادرست با انتخاب ))‪ g(n)=1 , f(n)=2, f(n)=O(g(n‬داریم ‪ log 2 𝑔(𝑛) = 0‬که این مقدار یک حد باال برای‬
‫)𝑛(𝑓 ‪ log 2‬نمی باشد‬
‫‪ )1‬ب‪ -‬نادرست با انتخاب )‪ f(n)=2n, f(n)=O(g(n‬و ‪ g(n)=n‬داریم 𝑛‪ 2𝑓(𝑛) = 4‬و همچنین 𝑛‪ 2𝑔(𝑛) = 2‬که )𝑛(𝑔‪ 2‬یک‬
‫حد مجانبی باال برای )𝑛(𝑓‪ 2‬نمی باشد‬
‫‪ )1‬ج‪ -‬درست می باشد به ازای هر ‪ 𝑛 ≥ 𝑛0‬همواره این رابطه برقرار است‪ .‬و داریم‬
‫‪ )2‬الف‪ -‬تابع‬
‫‪ )2‬ب‪ -‬تابع‬
‫به صورت چند جمله ای محدود نمی باشد زیرا‬
‫به صورت چندجمله ای محدود می باشد زیرا‬
‫‪ )3‬الف– شبه کد مربوطه به صورت زیر می باشد‬
‫‪ )3‬ب ‪ -‬حد باال‪ :‬همانطور که از شبه کد باال مشخص است خط ‪ 1‬و ‪ 2‬الگوریتم در کل از مرتبه ‪ 𝑛2‬می باشد و خط ‪ 3‬که مربوط به‬
‫انتقال بین آرایه ها در فاصله بین دو اندیس می باشد نیز به صورت )‪ O(j-i+1‬می باشد که این نیز از مرتبه )‪ O(n‬می باشد که در کل‬
‫می شود از مرتبه ) ‪O(𝑛3‬‬
‫حد پایین‪ :‬اگر زمان اجرا را برای حالتی که ‪ i‬کوچکتر مساوی ‪ n/4‬و همچنین ‪ j‬بزرگتر مساوی ‪ 3n/4‬باشد در نظر بگیریم در‬
‫مرحله اول و دوم هرکدام ‪ n/4‬اجرا داریم که می شود‬
‫‪𝑛2‬‬
‫‪16‬‬
‫اما در قسمت سوم الگوریتم که قسمت موثر در تحلیل حد پایین می باشد‬
‫چون داریم ‪ j-i+1 ≥ 3n/4-n/4+1 > n/2‬پس اضافه کردن مقادیر آرایه بین ]‪ A[i‬و ]‪ A[j‬به ‪ n/2‬عملیات نیاز دارد که در کل می‬
‫شود‬
‫‪𝑛2‬‬
‫‪16‬‬
‫𝑛‬
‫‪𝑛3‬‬
‫* ‪ 2‬که برابر با ‪ 32‬که از مرتبه ) ‪) 𝛺(𝑛3‬می باشد‪.‬‬
‫‪)3‬ج‪ -‬ابتدا به آرایه ‪ B‬یک سری مقادیر پیش فرض می دهیم که بر روی قطر اصلی ماتریس واقع می شوند سپس بر اساس این نقاط‬
‫بقیه مقادیر ربه صورت سطری ابدست می آوریم مانند شبه کد زیر که همانطور که مشخص می باشد زمان اجرای آن از مرتبه‬
‫) ‪ 𝑂(𝑛2‬می باشد‪.‬‬
‫‪ )4‬الف‪-‬‬
‫‪ )4‬ب‪-‬‬
‫‪)5‬الف – جواب این قسمت چون ترتیبی می باشد به صورت ‪ 2n+3n+4n+….+ (k-1)n‬است که برابر با )‪ Ɵ(𝑘 2 n‬می باشد‪.‬‬
‫‪)5‬ب‪ -‬هر بار دوتا دوتا لیست ها را درهم ادغام می کنیم و این کار به صورت بازگشتی انجام می دهیم به صورت زیر‬
‫𝑘‬
‫𝑘‬
‫𝑘‬
‫‪𝑘−1‬‬
‫‪2𝑛 + 4𝑛 + 8𝑛 + ⋯ +‬‬
‫𝑛𝑘‬
‫‪2‬‬
‫‪4‬‬
‫‪8‬‬
‫𝑘‬
‫که چون طول رابطه باال در کل ‪ logk‬می باشد پس مرتبه زمانی اجرای الگوریتم به صورت )‪ O(knlogk‬می باشد‪.‬‬
‫رابطه بازگشتی به صورت ‪ T(nk)=T((k/2)n)+nk‬می باشد‬