Documentos de Académico
Documentos de Profesional
Documentos de Cultura
زمان و حافظه.
نوشتن الگوریتم به زبان فارسی دو ایراد دارد:
-1نوشتن الگوریتم های پیچیده به این شیوه دشوار است.
;result = 0
for (i = 1; i <= n; i++)
;result = result + s[i]
;return result
}
مرتب سازی تعویضی:1-3 الگوریتم
}
}
1 -2اهمیت ساخت الگوریتم های کارآمد
کرد.
T(n) = n
تحلیل پیچیدگی زمانی برای حالت معمول برای الگوریتم(مرتب سازی تعویضی)
است:
)θ(lg n) < θ (n) < θ (n lg n) < θ (n²) < θ (n³) < θ (2 ⁿ
2-4-1آشنایی بیشتر با مرتبه الگوریتم ها
)!aⁿ Є o (n
که در آن k > j > 2و b > a > 1است .اگر تابع پیچیدگی
) g (nدر دسته 0ا0یوا0قع 0در طرفچپدسته 0ی ح0اوی)ƒ (n
باشد ،در آن صور0ت:
W ( h , m) = h + m - 1
تحلیل پیچیدگی زمانی دربدترین حالت برای الگوریتم (2-2مرتب سازی ادغامی)
T(n) = n - 1
تحلیل پیچیدگی زمانی در بدترین حالت برای الگوریتم (2-6مرتب سازی سریع)
W (n) = n (n – 1) / 2 Є θ (n²)
تحلیل پیچیدگی زمانی در حالت میانگین برای الگوریتم (2-6مرتب سازی سریع)
چندانی ندارد.
استراسن:2-8 الگوریتم
² به ازای n > 1که nتوانی از 2است+(T (n) = 7T(n/2)n/2( 18
T(1)=1
)T ( n ) Є θ ( n ^ 2.81
ضرب اعداد صحیح بزرگ:2-9الگوریتم
) W ( n ) Є θ ( n²
2 ضرب اعداد صحیح بزرگ:2-10 الگوریتم
مسئله :چاپ رئوس واسطه روی کوتاه ترین مسیر از راسی به راس دیگر در یک گراف
موزون.
)void path ( index q , r
{
) { if (P [q] [r] != 0
) ];path (q , P [q] [r
];cout << “v” << P [q] [r
) ;path (P [q] [r] , r
}
}
3-3برنامه نویسی پویا و مسائل بهینه سازی
عمل اصلی :می توان دستورات اجرا شده برای هر مقدار kرا عمل اصلی
در نظر بگیریم .مقایسه ای را که برای آزمون حداقل انجام می شود ،به
عنوان عمل اصلی در نظر می گیریم.
اندازه ورودی ، n :تعداد ماتریس ها که باید ضرب شوند.
مسئله :تعیین یک درخت جست وجوی بهینه برای مجموعه ای از کلید ها،
هر یک با احتمالی مشخص.
, void optsearchtree ( int n
;][const float p
,float & minavg
)][][index R
{
; index i , j , k , diagonal
;float A [1..n + 1] [0..n]
{ for ( i = 1 ; i ≤ n ; i ++)
A [i] [i -1] = 0
;A [i] [i] = p [i]
; R [i] [i] = i
;R [i] [ i – 1 ] = 0
}
; A[ n + 1 ] [n] = 0
; R[ n + 1 ] [n] = 0
for (diagonal = 1;diagonal ≤ n – 1; diagonal++)
{ for ( i = 1; i ≤ n – diagonal ; i ++)
; j = i + diagonal
A[i][j] = minimum(A[i][k-1]+A[k+1][j])+∑pm
for (k = 1 ; k ≤ n - 2 ; k ++)
عمل اصلی :زمان در هر دو حلقه ی اول و آخر ،در مقایسه با زمان در
حلقه میانی چشمگیر نیست ،زیرا حلقه میانی حاوی سطوح گوناگون
تودر تویی است .دستورات اجرا شده برای هر مقدار v jرا می توان
عمل اصلی در نظر گرفت.
اندازه ورودی ، n :تعداد رئوس موجود در گراف.
) T (n) = n 2ⁿ Є θ ( n 2ⁿ
فصل چهارم:
فرض کنید طراح شهری می خواهد چند شهر معین را با
استفاده می کند.
عمل اصلی :در حلقه repeatدو حلقه وجود دارد که هر یک () n – 1
بار تکرار می شود .اجرای دستورات داخل هر یک از آن ها را می توان
به عنوان یک بار اجرای عمل اصل در نظر گرفت.
اندازه ورودی ، n :تعداد رئوس.
)W ( m, n ) Є θ( m lg m
( θ ( n²lg n ) W ( m, n ) Є θ = ) n² lg n²
قضیه 4-2
این الگوریتم مشابه الگوریتم پریم برای مسئله درخت پوشای
کمینه است.
الگوریتم دیکسترا:4-3الگوریتم
{ repeat ( n – 1 times )
; ∞ = min
for ( i = 2 ; i ≤ n ; i ++)
{ if ( 0 <= length [i] < min )
; min = length [i]
; vnear = i
}
e = edge from vertix indexed by touch [vnear]
;to vertex indexed by vnear
;add e to F
for ( i = 2 ; i ≤ n; i ++)
مسئله :تعیین زمان بندی با سود کل بیشینه ،با این فرض که هر کاری
دارای سود است و فقط وقتی قابل حصول است که آن کار در مهلت
مقررش انجام شود.
عمل اصلی :باید برای مرتب سازی کارها ،مقایسه هایی انجام پذیرد و
هنگامی که Kبا ( Jپس از افزوده شدن کار iام ) مساوی قرار داده
می شود،به مقایسه های بیشتری نیاز داریم و هنگامی که امکان پذیر
بودن Kچک می شود ،به مقا یسه های بیشتری نیاز است .عمل اصلی
مقایسه است.
راهبرد عقبگرد
از تکنیک عقبگرد برای حل مسائلی استفاده می شود که در
درخت است.
الگوریتم عقبگرد همانند جست و جوی عمقی است ،با این
)( int estimate
{
; node v
;int m, mprod , numnodes
;v = root of state space tree
;numnodes = 1
;m = 1
;mprod = 1
{ while ( m != 0)
; t = number of children of v
;mprod - mprod * m
;numnodes = numnodes + mprod * t
;m = number of promising children of v
if ( m != 0)
v = randomly selected promising
; child of v
}
;return numnodes
}
(الگوریتم5-1 بر آورد مونت کارلو برای الگوریتم:5-3 الگوریتم
) وزیرnعقبگرد برای مسئله
پشتی قرار دهد و اگر وزن کل قطعات قرار داده شده در
آن کوله پشتی از یک عدد صحیح مثبت Wفراتر رود،
کوله پشتی پاره می شود.
الگوریتم عقبگرد برای مسئله کوله پشتی صفر و یک:5-7 الگوریتم
می کند.
الگوریتم عقبگرد معموال کارایی بیشتری نسبت به الگوریتم
اگر آن حد بهتر از مقدار بهترین حلی که تاکنون یافته شده ،
نباشد ،گره غیر امید بخش است .در غیر این صورت ،امید
بخش است.
عالوه براستفاده از حد ،می توان حدود گره های امید بخش
حد می گویند.
پیاده سازی این روش ،شکل اصالح شده ی ساده ای از
شبکه باور Uاستانداردی برای نشان دادن روابط احتمالی ،
استفاده ازفضای
الگوریتم مقایسه کلید انتساب رکورد ها اضافی
T (n) = n² / 2 W (n) = 3 n²/ 2
تعویضی A (n) = 3 n²/ 2 درجا
W(n) = n² / 2 W (n) = n² / 2
درجی A (n) = n² / 4 A (n) = n² / 4 درجا
T (n) = n² / 2 T (n)= 3n
انتخابی درجا
مرتب سازی انتخابی:7-2 الگوریتم
T ( n) = 2n lg n
بهبود بخشیدن به مرتب سازی ادغامی
دارد.
تعلق دارد.
یعU نگاهی دوباره به مرتب سازی سر5-7
شوند.
heapیک درخت دودویی اساس کامل است به طوری که:
مرتب باشند.
مقادیر نگهداری شده درهر گره بزرگ تر یا مساوی مقادیر
ارجحیت دارد.
┐ d ≥ ┌ lg m
قضیه 7-2
┐ d = ┌ lg m
لم :7-10به ازای همه ی مقادیر m ≥ 1داریم :
⌡mimEPL(M) ≥ m Į lg m
قضیه 7-4
کلیدها مرتب سازی کند ،به طور میانگین باید حداقل این
تعداد مقایسه ها را انجام دهد:
پایان