C(n/2+1:n,n/2+1:n)

Download Report

Transcript C(n/2+1:n,n/2+1:n)

‫اهداف‬
‫درس این جلسه‬
‫‪ (1‬بدست آوردن پیچیدگی محاسباتی برخی از توابع پیچیدگی بازگشتی‬
‫‪(1‬‬
‫بیان قضیه‌ای پرکاربرد در این حوزه‬
‫‪ (2‬تکمیل مهارت حل مساله با رویکرد تقسیم و حل‬
‫‪(1‬‬
‫‪(2‬‬
‫مرتب‌سازی سریع‬
‫ضرب ماتریس‌های استراسن‬
‫قضیه‪:‬‬
‫تابع پیچیدگی )‪ T(n‬که بصورت افزایش ی است و شرایط زیر را دارد را درنظر بگیرید‪:‬‬
‫که ‪ b ≥ 2‬و ‪ k ≥ 0‬ثابت‌های صحیحی هستند و ‪ c ،a‬و ‪ d‬ثابت‌هایی هستند که‬
‫‪ a > 0, c > 0‬و ‪ d ≥ 0‬آنگاه‪:‬‬
‫در قضیه گفته شده داشتیم‪:‬‬
‫همچنین چنانچه رابطه بازگشتی به دوصورت زیر تغییر کند‪:‬‬
‫در این صورت نتایج با “‪ "big O‬یا ‪ Ω‬به جای ‪ Θ‬تغییر خواهد کرد‪.‬‬
‫ب) مرتب‌سازی ادغامی )‪(Merge Sort‬‬
‫پیچیدگی زمانی در بدترین حالت‪:‬‬
‫ج) مرتب‌سازی سریع )‪ (Quick Sort‬یا‬
‫‪Partition Exchange Sort‬‬
‫فرض کنید آرایه زیر شامل لیستی از اعداد به صورت زیر باشد‪:‬‬
‫آرایه را به گونه‌ای پارتیشن‌بندی می‌کنیم که تمامی املان‌های که کوچکتر از املان محوری‬
‫سمت چپ آن و املان‌های بزرگتر از آن در سمت راستش قرار بگیرند‪:‬‬
‫هرکدام از زیرآرایه‌ها را مرتب می‌کنیم‪:‬‬
‫هستند در‬
(Quick Sort) ‫ج) مرتب‌سازی سریع‬
function [A,ppoint]=partition(A)
len=length(A);
pitem=A(1);
ppoint=1;
for i=2:len
if A(i)<pitem
ppoint=ppoint+1;
temp=A(ppoint);A(ppoint)=A(i);A(i)=temp;
end
end
temp=A(1);A(1)=A(ppoint);A(ppoint)=temp;
end
(Quick Sort) ‫ج) مرتب‌سازی سریع‬
function S=quickSort(A)
len=length(A);
if (len>1)
[A,ppoint]=partition(A);
S(1:ppoint-1)=quickSort(A(1:ppoint-1));
S(ppoint)=A(ppoint);
S(ppoint+1:len)=quickSort(A(ppoint+1:len));
else
S=A;
end
end
‫ج) مرتب‌سازی سریع )‪(Quick Sort‬‬
‫تحلیل پیچیدگی زمانی در بدترین حالت‪:‬‬
‫…‬
‫ج) مرتب‌سازی سریع )‪(Quick Sort‬‬
‫تحلیل پیچیدگی زمانی در حالت میانگین‪:‬‬
‫‪...‬‬
‫ج) مرتب‌سازی سریع )‪(Quick Sort‬‬
‫تحلیل پیچیدگی زمانی در حالت میانگین‪:‬‬
‫‪...‬‬
‫یکی از ویژگی‌های توابع لگاریتمی‪:‬‬
‫د) ضرب ماتریس‌های استراسن‬
‫) ‪(Strassen's Matrix Multiplication‬‬
‫فرض کنید که می‌خواهیم ماتریس ‪ C‬که حاصلضرب دو ماتریس ‪ A 2*2‬و ‪ B‬است را بدست آوریم‪.‬‬
‫استراسن فرمول‌هایی به صورت زیر ارائه کرده‌است که با بهره‌گیری از آنها می‌توان ماتریس ‪ C‬را محاسبه نمود‪.‬‬
‫‪Strassen determined that if we let‬‬
‫د) ضرب ماتریس‌های استراسن‬
‫‪ ‬این روش برای ماتریس‌های ‪ 2*2‬چندان جالب نیست‬
‫‪ ‬فرمول‌های استراسن به گونه‌ای هستند که می‌توانیم ماتریس‌های بزرگتر را به صورت افراز ‪ 4‬ماتریس‬
‫کوچکتر در نظر گرفت‬
‫د) ضرب ماتریس‌های استراسن‬
‫د) ضرب ماتریس‌های استراسن‬
‫د) ضرب ماتریس‌های استراسن‬
function C=sterasen(A,B)
M1=sterasen(A11+A22,B11+B22);
n=max(size(A));
M2=sterasen(A21+A22,B11);
if (n==2)
M3=sterasen(A11,B12-B22);
M4=sterasen(A22,B21-B11);
C=A*B;
M5=
else
M6
A11=A(1:n/2,1:n/2);
M7
A12=A(1:n/2,n/2+1:n);
C11=M1+M4-M5+M7;
A21=A(n/2+1:n,1:n/2);
C12
A22=A(n/2+1:n,n/2+1:n);
C21
B11=B(1:n/2,1:n/2);
C22
B12=B(1:n/2,n/2+1:n);
C(1:n/2,1:n/2)=C11;
C(1:n/2,n/2+1:n)C12;
B21=B(n/2+1:n,1:n/2);
C(n/2+1:n,1:n/2)=C21;
B22=B(n/2+1:n,n/2+1:n);
C(n/2+1:n,n/2+1:n)=C22;
end
end
‫د) ضرب ماتریس‌های استراسن‬
‫تحلیل پیچیدگی زمانی تعداد جمع‌ها و تفریق‌ها در حالت معمول‌‬
‫این روش برای ضرب دو ماتریس ‪ ،2×2‬به ‪ 7‬عمل ضرب و ‪ 18‬عمل جمع و تفریق نیاز دارد‬
‫پس از حل این رابطه بازگشتی به پیچیدگی زمانی در حالت معمول به صورت زیر خواهیم رسید‪.‬‬
‫پرسش‌های‬
‫درس این جلسه‬
‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫الگوریتم ‪ partitioning‬در مرتب‌سازی سریع‬
‫الگوریتم مرتب‌سازی سریع‬
‫تحلیل پیچیدگی زمانی الگوریتم مرتب‌سازی سریع در بدترین حالت‬
‫تحلیل پیچیدگی الگوریتم مرتب‌سازی سریع در حالت میانگین‬
‫الگوریتم ضری ماتریس استراسن‬
‫تحلیل پیچیدگی زمانی ضرب ماتریس استراسن در حالت معمول‌‬