الگوریتم ایجاد درخت دوردویی بهینه - نسخهی قابل چاپ |
الگوریتم ایجاد درخت دوردویی بهینه - jaroon - 21 مرداد ۱۳۸۹ ۰۷:۰۵ ب.ظ
سلاممن الگوریتم ایجاد درخت دوردویی بهینه که توی کتاب قدسی به دو روش بازگشتی و پویا گفته شده رو نمیفهمم.کسی میتونه توضیح بده؟ |
RE: درخت دودویی جستجوی بهینه - mahditorki - 14 شهریور ۱۳۸۹ ۱۱:۲۵ ب.ظ
درخت جستجوی دودویی بهینه به روش برنامه نویسی پویا: اگر n کلید متمایز k[1]<k[2]<..<k[n] موجود باشد و احتمال آنکه k[i] را جستجو کنیم p[i] باشد درخت جستجوی دودویی بهینه درختی است که در آن Sigma(C[i]*P[i]) که در آن i=1 to n است مینیمم شود. اگر A[i][j] همان مینیمم زمان جستجو برای BST با کلید های K[i] تا K[j] باشد و K[i]<=k[j] به ازای هر i,j داریم: A[i][i]=P[i] چون فقط K[i] موجود است و یک مقایسه لازم دارد پس A[i][i]=1*P[i]=p[i] لذا جواب ما a[1][n] است حال فرض کنید bst بهینه را یافته ایم و ریشه آن K[m] است بنا بر اصل بهینگی هر دو زیر درخت چپ و راست بهینه اند و داریم: A[1][n]=A[1][m-1]+P[1]+P[2]+...+P[m-1]+P[m]+A[m+1][n]+P[m+1]+...P[n]=A[1][m-1]+A[m+1][n]+ Sigma(P[t]) t=1 to n سبز: مینیمم زمان جستجو در زیر درخت چپ قرمز:هر یک از نود های زیر درخت چپ را بخواهیم جستجو کنیم بخاطر مقایسه با ریشه یک مقایسه اضافی دارد. مشکی:خود ریشه یک مقایسه نیاز دارد. آبی پر رنگ: مانند سبز در مورد زیر درخت راست. آبی کمرنگ:مانند قرمز لذا فرمول کلی برابر است با: A[1][n]= Min( A[i][m-1]+A[m+1][j]+ Sigma(P[t]) t=i to j) and i<j A[i][i]=P[i] البته این رابطه فقط مقدار مینیمم را می دهد برای بدست آوردن خود درخت باید ماتریس دیگری برای ذخیره ریشه زیر درخت از K[i] تا K[j] بکار ببریم. مرتبه الگوریتم ظاهرا O(n^3) است ر.ک کتاب طراحی الگوریتم پوران پژوهش صفحه ۱۵۸ تا ۱۶۰ |