SlideShare a Scribd company logo
1 of 4
Алгоритмын хугацааны хүндрэлийг (time complexity) багасгах боломж
Ж.Дашдэмбэрэл
МУБИС-ийн КМТС-ийн Программчлалийн тэнхэм
Үндэслэл. Мэдээлэл зүйн олимпиадад,
уралдаан тэмцээнд оролцогчдын ихэнх нь
амжилт үзүүлэхгүй байх хэд хэдэн шалтгаан
байна. Энэ нь
1. Алгоритмын програмчлалын онолын мэдлэг
аргуудыг сайтар эзэмшээгүй. Графын онол,
сонгодог алгоритмууд, өгөгдлийн бүтэц г.м
2. Програмчлалын хэлний нэмэлт боломж,
класс, сан, өгөгдлийн төрөл функцүүдийг
бодлого бодоход ашиглахгүй байна
3. ЕБДС-ийн математикийн онолын мэдлэгийг
алгоритмд хэрэглэх талаар учир дутагдалтай
яаж хэрэглэх арга технологи эзэмшээгүй байна
4. Програмчлалын хэлний мэдлэг эзэмшихдээ
тухайн ойлголтод тохирсон бодлого жишээг л
эзэмшдэг. Эдгээрийг энэ бодлогын үр дүнг
олох цорын ганц алгоритм гэсэн ойлголт авдаг.
Иймд өгөгдлийн хэмжээ ихсэх үед яаж шийдэх
вэ гэдэг асуудал орхигдсоноос заасан
хугацаанд тухайн алгоритм биелэхгүйд хүрдэг.
Ингээд суралцагчид зөв бодсон боловч
(ялангуяа JudgeOnline дээр) бодлогын үр дүн
гардаггүйгээс шантарч эхэлдэг байна.
Зорилго. Бодлогыг бодохдоо өөрсдийн
математикийн мэдлэг, чадвар дээрээ
тулгуурлан бодлогын алгоритмыг хялбарчлах
арга зарим аргуудыг хялбар жишээгээр
үзүүлэх
Мөн 50 гаруй бодлогын ердийн аргаар (brute
force гэж нэрлэдэг) бодсон бодлогын хугацааг
математик хувиргалт хийж олсон хугацаатай
харьцуулж үр дүнг тооцох
Алгоритмыг тодорхой төгсгөлөг алхамын
дараа биелэж дуусдаг төгсгөлөг, алхам бүр
нэгэн утгатай тодорхой, оролтын өгөдлийг
зөв боловсруулан баталгаатай зөв үр дүн
гаргаж байхаар оролт гаралттай, хурдан
биелдэг үр ашигтай (efficient) байх ёстой.
Алгоритмыг суралцагчдад эзэмшүүлэхдээ үр
ашигтай байх чанарыг онцгой анхаарах
хэрэгтэй. Энэ чанар нь хоёр үндсэн
шалгууртай байна. Тухайн алгоритмыг
ашиглан бичсэн програм компьютерт хэр
хурдан хугацаанд биелэхийг илэрхийлэх
хугацааны шалгуур (time complexity), оролтын
янз бүрийн хугацаанд хамгийн ихдээ ямар
хэмжээний санах ой шаардахыг илэрхийлэх
санах ойн (space complexity) шинжилгээний
шалгууруудыг биелүүлсэн тохиолдолд
алгоритм үр ашигтай байна. Эдгээр
шалгууруудыг хамтад нь алгоритмын
тооцооны хүндрэл (computational complexity)
гэнэ.
Орчин үеийн компьютерийн хүчин чадал
хэдийгээр их болсон ч дунджаар 1 секундад 25
сая үйлдэл хийх боломжтой гэж үзвэл аливаа
алгоритмын давталтын тоо үүнээс хэтрэхгүй
байх шаардлагатай.
Алгоритмын биелэх хугацааг дээд хязгаараар
нь тооцох O(f(n)) - Big-O, доод хязгаараар нь
тооцох Ω(f(n)) -Big-Omega, O ба Θ -тэй
төстэй Ω (f(n))-Big-Theta, яг дээгүүрээ
зааглагдсан o(f(n))-Little-o зэрэг тэмдэглэгээ,
төрлүүд байна.
Ерөнхийд нь тухайн алгоритм биелэж дуусах
хүртлээ оролтын өгөгдлийн тоо (n)-оос
хамааран хичнээн давталт хийж байгааг
алгоритмын хүндрэл гэж үзээд болох ба
O(f(n)) гэж тэмдэглэдэг.
Жишээ нь алгоритм n ширхэг давталт хийгээд
биелэж байвал O(n) гэж тэмдэглээд шугаман
хүндрэлтэй алгоритм гэж нэрлэдэг билээ.
f(n) функцийн хэлбэрээс хамааруулан тухайн
алгоритмын хүндрэлийг нэрлэдэг.
O(nlogn) болон түүнээс бага зэргийн
хүндрэлтэй алгоритмаар бодогддог бодлогыг
хялбар (tractable) P ангийн, хялбар биш бол NP
(untractable) ангийн бодлого гэж ангилдаг.
Тухайлбал O(n!) бол биелэх боломжгүй юм.
Иймээс бодлогын зарим алгоритмыг шинжилж
хялбар алгоритм руу шилжүүлэх, эсвэл эрэмбэ
МУБИС-ийн КМТС-ийн Эрдэм шинжилгээний
бага хурлын илтгэлүүдийн эмхэтгэл (2012 он)
бууруулах зарим математик аргуудын талаар
тодорхой жишээн дээр авч үзье.
Өргөн хэрэглэгддэг хүндрэлүүд
1. Шугаман аргаар шийдэх
Жишээ. N хүртэлх 3 эсвэл 5-д хуваагддаг
тоонуудыг ол.
sum=0
for i=1 to n
if (i mod 3==0) or (i mod 5)=0
then sum=sum+i
output sum
Хугацаа: O(n)
учир
Function Div(n)
p=t/n
return n*(p*(p+1))/2
Output Div(3)+Div(5)-Div(15)
Хугацаа: O(n) → O(1)
Ямар нэг зүй тогтолтой тоонуудын хувьд
эхний гишүүдийн олсон зүй тогтол дээр
тулгуурлан ерөнхий томъёо гишүүний томъёо
гарган авч (O(1) хугацаанд биелнэ), индукцээр
батлаж ашиглах
Бодлого 3. Натурал тооны квадратуудын
нийлбэр ба нийлбэрийн квадратын ялгаврыг
ол.
FOR i=1 to n
S1=s1+i;
S2=s2+i*i;
Output s1*s1-s2
Хугацаа: O(n)
Бодолт. (1+2+3+…+n)2
-(12
+22
+…+n2
)
олохын тулд
томъёонуудыг ашиглавал бодлогын шийд S1-S2
болно.
Хугацаа: O(n) → O(1)
Тоон дарааллын элементүүдийг олох ерөнхий
аргыг олсон бол энэ аргаар олсон дарааллын
гишүүд дээр дахин анализ хийх зүй тогтолыг
ажиглах
Фибоничийн тооны n-р гишүүнийг ол.
Рекурсив функц ашиглан
Function Fib(n)
if n = 0 then return 0
if n = 1 then return 1
return fib(n−1)+fib(n−2)
гэж олдог. Энэ нь алгоритмын рекурсив функц
гэдэг ойлголтыг эзэмшихэд авч үздэг чухал
жишээ боловч NP алгоритм юм. n=100 үед
O(n) = O(n − 1) + O(n − 2) + 3 ≈ 1.6n
болох ба
n=200 үед O(200) ≥ 2139
болох юм.
Хугацаа: O(2n
)
2
Тэгвэл 1 1 2 3 5 8 13 21 34 55 89 144 ...
дараалалын 4 дэх тоо бүр нь нийлбэр тэгш
байна гэдгээс
F(n) = F(n-1) + F(n-2)= F(n-2)+F(n-3)+F(n-2)=
=2 F(n-2) + F(n-3)= 2(F(n-3)+F(n-4))+F(n-3))=
=3F(n-3) + 2 F(n-4)= 3 F(n-3) + F(n-4) + F(n-5)
гэж хувиргавал F(n) = 4 F(n-3) + F(n-6) болно.
A[1]=1 A[2]=1 A[3]=2
A[4]=3 A[5]=5 A[6]=8
for i=7 to n step 3
A[i]= 4*A[i-3]+A[i-6]
output A[n]
Хугацаа O(2n
) → O(n/3)
Олох утгуудын заримыг бусад утгаас нь
хамааруулж олоход тэнцэтгэл биш ашиглан
хязгаар олох буюу хязгаар тогтоох.
Жишээ . нь зөв бутархай бол хүртвэр нь q–
ээс хэтрэхгүй хуваарьтай бүх бутархайн хувьд
зүүн талаасаа хэд дүгээрт орших вэ.
Бүх бутархайг олоход хугацаа O((n+1)/2*n2
)
Бодолт.
Эдгээр нь натурал тоонууд учир тэнцэтгэлийн
баруун гар талын ихэсгэе.
Тэгвэл бидний олох бутархайн хүртвэр нь
байна.
for q = n; q > 2; step-1
p = (a * q - 1) / b;
if p * s > r * q
s = q; r = p;
endif
output q;
Хугацаа O((n+1)*n2
→ O(n)
Өөр өөр зүй тогтолтой тоонуудын огтлолцлыг
олохдоо орлуулга хийх, шийдийг олох
Бодлого 5 (73). N –ээс хэтрэхгүй хуваарьтай
хичнээн зөв бутархай байх вэ.
Бодолт. Дараах томъёогоор олж болно.
Мёбиусийн функц
Хугацаа - O(N)
Бодлого 6 (45). Тоон дарааллуудын ерөнхий
гишүүний томъёо өгөгдсөн бол ижилхэн
гишүүдийг ол. Олонлогийг огтлолцлыг ол
Triangle Tn=t (t+1)/2
1, 3, 6, 10, 15, …
Pentagonal Pn=p(3p-1)/2
1, 5, 12, 22, 35, …
Hexagonal Hn=h(2h-1)
1, 6, 15, 28, 45, …
Жишээ. T285 = P165 = H143 = 40755
For t=1 to n
For p=1 to n
For h=1 to n
k = t * (t + 1) div 2
IF k=p*(3p-1) div 2 and k == h *
(2*h-1) then
output k
Хугацаа O( n3
)
Бодолт. Бодлогын нөхцөл биелэх бүх
боломжит утгуудыг шалгавал хугацаа O(n3
)
болно.
Tn ба Hn –ийн хамаарлыг эхлээд тогтоое.
For k=1 to n
h=k*(2*k-1)
p=(1+sqrt(1+24*k))/6
if p=int(p) then output k
бүхэл шийд болж байна
Хугацаа O( n3
) O(n)-ээс хэтрэхгүй болно.
Практик судалгаа. Ингээд төрөл бүрийн
шинж чанартай тоо, дараалал, нийлбэрүүдийг
олох зэрэг 50 гаруй бодлогын ердийн аргаар
(brute force гэж нэрлэдэг) бодсон бодлогын
хугацааг математик хувиргалт хийж олсон
хугацаатай харьцуулж гаргалаа. Эдгээр
бодлогуудын хувьд дундажаар 25 дахин бага
хугацаа орсон байна.
.Дүгнэлт
3
Алгоритмын анхан шатны мэдлэг олгоход
хэрэглэдэг зарим жишээ бол зөвхөн тухайн
шинэ мэдлэг олгоход зориулсан шийдэл
гэдгийг анхаарч өөр хялбар алгоритм бий
гэдгийг суралцагчдад ойлгуулах бага ч гэсэн
санаа авах хэрэгтэй гэж үзэж байна.
Мөн алгоритмын үр ашигтай байх (efficient)
чанарыг онцгой анхаарч тэдэнд биелэх
хугацааг байнга тооцдог, хэрвээ биелэх
боломжгүй алгоритм болж байвал шинжилгээ
хийж зарим утгуудыг математик хувиргалтаар
олох буюу зүй тогтол, хязгаарыг тогтоох
боломж байгаа эсэхийг судлан үзэж
шийдвэрлэж brute force төрлийн стандарт
алгоритмуудыг байнга сайжруулж байх чадвар,
дадал эзэмшүүлэх шаардлага тавигдаж байна.
Алгоритмыг суралцагчдад
эзэмшүүлэхдээ алгоритмын үр ашигтай байх
(efficient) чанарыг онцгой анхаарч тэдэнд
биелэх хугацааг байнга тооцдог, хэрвээ NP
төрлийн алгоритм болж байвал шинжилгээ
хийж зарим утгуудыг математик хувиргалтаар
олох буюу зүй тогтол, хязгаарыг тогтоох
боломж байгаа эсэхийг судлан үзэж
шийдвэрлэж brute force төрлийн стандарт
алгоритмуудыг байнга сайжруулж байх
чадвар, дадал эзэмшүүлэх шаардлага тавигдаж
байна.
Ашигласан материал
4

More Related Content

What's hot

Algoritm
AlgoritmAlgoritm
Algoritmshulam
 
U.cs101 алгоритм программчлал-1(1)
U.cs101   алгоритм программчлал-1(1)U.cs101   алгоритм программчлал-1(1)
U.cs101 алгоритм программчлал-1(1)Badral Khurelbaatar
 
алгоритм үндсэн ойлголт
алгоритм үндсэн ойлголталгоритм үндсэн ойлголт
алгоритм үндсэн ойлголтЖавзмаа Ж
 
U.cs101 алгоритм программчлал-3
U.cs101   алгоритм программчлал-3U.cs101   алгоритм программчлал-3
U.cs101 алгоритм программчлал-3Badral Khurelbaatar
 
U.cs101 алгоритм программчлал-2
U.cs101   алгоритм программчлал-2U.cs101   алгоритм программчлал-2
U.cs101 алгоритм программчлал-2Badral Khurelbaatar
 
алгоритм
алгоритмалгоритм
алгоритмNarantungaa
 
U.cs101 алгоритм программчлал-14
U.cs101   алгоритм программчлал-14U.cs101   алгоритм программчлал-14
U.cs101 алгоритм программчлал-14Badral Khurelbaatar
 
U.cs101 алгоритм программчлал-12
U.cs101   алгоритм программчлал-12U.cs101   алгоритм программчлал-12
U.cs101 алгоритм программчлал-12Badral Khurelbaatar
 
математик анализ лекц№10
математик анализ лекц№10математик анализ лекц№10
математик анализ лекц№10narangerelodon
 
U.cs101 алгоритм программчлал-10
U.cs101   алгоритм программчлал-10U.cs101   алгоритм программчлал-10
U.cs101 алгоритм программчлал-10Badral Khurelbaatar
 
алгоритм
алгоритмалгоритм
алгоритмbaterden
 
Эх функц ба тодорхой биш интеграл
Эх функц ба тодорхой биш интегралЭх функц ба тодорхой биш интеграл
Эх функц ба тодорхой биш интегралBattur
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргуудBayalagmaa Davaanyam
 
Интегралчлах үндсэн аргууд
Интегралчлах үндсэн аргуудИнтегралчлах үндсэн аргууд
Интегралчлах үндсэн аргуудBattur
 
U.cs101 алгоритм программчлал-7
U.cs101   алгоритм программчлал-7U.cs101   алгоритм программчлал-7
U.cs101 алгоритм программчлал-7Badral Khurelbaatar
 
U.cs101 алгоритм программчлал-15
U.cs101   алгоритм программчлал-15U.cs101   алгоритм программчлал-15
U.cs101 алгоритм программчлал-15Badral Khurelbaatar
 

What's hot (20)

Algoritm
AlgoritmAlgoritm
Algoritm
 
U.cs101 алгоритм программчлал-1(1)
U.cs101   алгоритм программчлал-1(1)U.cs101   алгоритм программчлал-1(1)
U.cs101 алгоритм программчлал-1(1)
 
алгоритм үндсэн ойлголт
алгоритм үндсэн ойлголталгоритм үндсэн ойлголт
алгоритм үндсэн ойлголт
 
5 algorithm
5 algorithm5 algorithm
5 algorithm
 
U.cs101 алгоритм программчлал-3
U.cs101   алгоритм программчлал-3U.cs101   алгоритм программчлал-3
U.cs101 алгоритм программчлал-3
 
U.cs101 алгоритм программчлал-2
U.cs101   алгоритм программчлал-2U.cs101   алгоритм программчлал-2
U.cs101 алгоритм программчлал-2
 
алгоритм
алгоритмалгоритм
алгоритм
 
U.cs101 алгоритм программчлал-14
U.cs101   алгоритм программчлал-14U.cs101   алгоритм программчлал-14
U.cs101 алгоритм программчлал-14
 
U.cs101 алгоритм программчлал-12
U.cs101   алгоритм программчлал-12U.cs101   алгоритм программчлал-12
U.cs101 алгоритм программчлал-12
 
6 shugaman
6 shugaman6 shugaman
6 shugaman
 
Salaalsan algoritm
Salaalsan algoritmSalaalsan algoritm
Salaalsan algoritm
 
математик анализ лекц№10
математик анализ лекц№10математик анализ лекц№10
математик анализ лекц№10
 
U.cs101 алгоритм программчлал-10
U.cs101   алгоритм программчлал-10U.cs101   алгоритм программчлал-10
U.cs101 алгоритм программчлал-10
 
алгоритм
алгоритмалгоритм
алгоритм
 
Эх функц ба тодорхой биш интеграл
Эх функц ба тодорхой биш интегралЭх функц ба тодорхой биш интеграл
Эх функц ба тодорхой биш интеграл
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд
 
Интегралчлах үндсэн аргууд
Интегралчлах үндсэн аргуудИнтегралчлах үндсэн аргууд
Интегралчлах үндсэн аргууд
 
алгоритм 10 р анги
алгоритм 10 р ангиалгоритм 10 р анги
алгоритм 10 р анги
 
U.cs101 алгоритм программчлал-7
U.cs101   алгоритм программчлал-7U.cs101   алгоритм программчлал-7
U.cs101 алгоритм программчлал-7
 
U.cs101 алгоритм программчлал-15
U.cs101   алгоритм программчлал-15U.cs101   алгоритм программчлал-15
U.cs101 алгоритм программчлал-15
 

Similar to Print

фермагийн бага теором
фермагийн бага теоромфермагийн бага теором
фермагийн бага теоромХ. Долгоржав
 
зарим арифметик функцүүд
зарим арифметик функцүүдзарим арифметик функцүүд
зарим арифметик функцүүдЧ. Алтка
 
Латинаас крилл рүү хөрвүүлэгч
Латинаас крилл рүү хөрвүүлэгчЛатинаас крилл рүү хөрвүүлэгч
Латинаас крилл рүү хөрвүүлэгчAltangerel Bilguun
 
Dsi lec1
Dsi lec1Dsi lec1
Dsi lec1ggmo86
 
MATH1B-2020-2021-lecture-5.pdf
MATH1B-2020-2021-lecture-5.pdfMATH1B-2020-2021-lecture-5.pdf
MATH1B-2020-2021-lecture-5.pdflorawest1
 
Координатын дугуй
Координатын дугуйКоординатын дугуй
Координатын дугуйAmka Anar
 

Similar to Print (9)

Өгөгдлийн бүтэц 1
Өгөгдлийн бүтэц 1Өгөгдлийн бүтэц 1
Өгөгдлийн бүтэц 1
 
фермагийн бага теором
фермагийн бага теоромфермагийн бага теором
фермагийн бага теором
 
Bvleg 6 recursion
Bvleg 6 recursionBvleg 6 recursion
Bvleg 6 recursion
 
зарим арифметик функцүүд
зарим арифметик функцүүдзарим арифметик функцүүд
зарим арифметик функцүүд
 
Латинаас крилл рүү хөрвүүлэгч
Латинаас крилл рүү хөрвүүлэгчЛатинаас крилл рүү хөрвүүлэгч
Латинаас крилл рүү хөрвүүлэгч
 
Mt102 lekts3
Mt102 lekts3Mt102 lekts3
Mt102 lekts3
 
Dsi lec1
Dsi lec1Dsi lec1
Dsi lec1
 
MATH1B-2020-2021-lecture-5.pdf
MATH1B-2020-2021-lecture-5.pdfMATH1B-2020-2021-lecture-5.pdf
MATH1B-2020-2021-lecture-5.pdf
 
Координатын дугуй
Координатын дугуйКоординатын дугуй
Координатын дугуй
 

Print

  • 1. Алгоритмын хугацааны хүндрэлийг (time complexity) багасгах боломж Ж.Дашдэмбэрэл МУБИС-ийн КМТС-ийн Программчлалийн тэнхэм Үндэслэл. Мэдээлэл зүйн олимпиадад, уралдаан тэмцээнд оролцогчдын ихэнх нь амжилт үзүүлэхгүй байх хэд хэдэн шалтгаан байна. Энэ нь 1. Алгоритмын програмчлалын онолын мэдлэг аргуудыг сайтар эзэмшээгүй. Графын онол, сонгодог алгоритмууд, өгөгдлийн бүтэц г.м 2. Програмчлалын хэлний нэмэлт боломж, класс, сан, өгөгдлийн төрөл функцүүдийг бодлого бодоход ашиглахгүй байна 3. ЕБДС-ийн математикийн онолын мэдлэгийг алгоритмд хэрэглэх талаар учир дутагдалтай яаж хэрэглэх арга технологи эзэмшээгүй байна 4. Програмчлалын хэлний мэдлэг эзэмшихдээ тухайн ойлголтод тохирсон бодлого жишээг л эзэмшдэг. Эдгээрийг энэ бодлогын үр дүнг олох цорын ганц алгоритм гэсэн ойлголт авдаг. Иймд өгөгдлийн хэмжээ ихсэх үед яаж шийдэх вэ гэдэг асуудал орхигдсоноос заасан хугацаанд тухайн алгоритм биелэхгүйд хүрдэг. Ингээд суралцагчид зөв бодсон боловч (ялангуяа JudgeOnline дээр) бодлогын үр дүн гардаггүйгээс шантарч эхэлдэг байна. Зорилго. Бодлогыг бодохдоо өөрсдийн математикийн мэдлэг, чадвар дээрээ тулгуурлан бодлогын алгоритмыг хялбарчлах арга зарим аргуудыг хялбар жишээгээр үзүүлэх Мөн 50 гаруй бодлогын ердийн аргаар (brute force гэж нэрлэдэг) бодсон бодлогын хугацааг математик хувиргалт хийж олсон хугацаатай харьцуулж үр дүнг тооцох Алгоритмыг тодорхой төгсгөлөг алхамын дараа биелэж дуусдаг төгсгөлөг, алхам бүр нэгэн утгатай тодорхой, оролтын өгөдлийг зөв боловсруулан баталгаатай зөв үр дүн гаргаж байхаар оролт гаралттай, хурдан биелдэг үр ашигтай (efficient) байх ёстой. Алгоритмыг суралцагчдад эзэмшүүлэхдээ үр ашигтай байх чанарыг онцгой анхаарах хэрэгтэй. Энэ чанар нь хоёр үндсэн шалгууртай байна. Тухайн алгоритмыг ашиглан бичсэн програм компьютерт хэр хурдан хугацаанд биелэхийг илэрхийлэх хугацааны шалгуур (time complexity), оролтын янз бүрийн хугацаанд хамгийн ихдээ ямар хэмжээний санах ой шаардахыг илэрхийлэх санах ойн (space complexity) шинжилгээний шалгууруудыг биелүүлсэн тохиолдолд алгоритм үр ашигтай байна. Эдгээр шалгууруудыг хамтад нь алгоритмын тооцооны хүндрэл (computational complexity) гэнэ. Орчин үеийн компьютерийн хүчин чадал хэдийгээр их болсон ч дунджаар 1 секундад 25 сая үйлдэл хийх боломжтой гэж үзвэл аливаа алгоритмын давталтын тоо үүнээс хэтрэхгүй байх шаардлагатай. Алгоритмын биелэх хугацааг дээд хязгаараар нь тооцох O(f(n)) - Big-O, доод хязгаараар нь тооцох Ω(f(n)) -Big-Omega, O ба Θ -тэй төстэй Ω (f(n))-Big-Theta, яг дээгүүрээ зааглагдсан o(f(n))-Little-o зэрэг тэмдэглэгээ, төрлүүд байна. Ерөнхийд нь тухайн алгоритм биелэж дуусах хүртлээ оролтын өгөгдлийн тоо (n)-оос хамааран хичнээн давталт хийж байгааг алгоритмын хүндрэл гэж үзээд болох ба O(f(n)) гэж тэмдэглэдэг. Жишээ нь алгоритм n ширхэг давталт хийгээд биелэж байвал O(n) гэж тэмдэглээд шугаман хүндрэлтэй алгоритм гэж нэрлэдэг билээ. f(n) функцийн хэлбэрээс хамааруулан тухайн алгоритмын хүндрэлийг нэрлэдэг. O(nlogn) болон түүнээс бага зэргийн хүндрэлтэй алгоритмаар бодогддог бодлогыг хялбар (tractable) P ангийн, хялбар биш бол NP (untractable) ангийн бодлого гэж ангилдаг. Тухайлбал O(n!) бол биелэх боломжгүй юм. Иймээс бодлогын зарим алгоритмыг шинжилж хялбар алгоритм руу шилжүүлэх, эсвэл эрэмбэ МУБИС-ийн КМТС-ийн Эрдэм шинжилгээний бага хурлын илтгэлүүдийн эмхэтгэл (2012 он)
  • 2. бууруулах зарим математик аргуудын талаар тодорхой жишээн дээр авч үзье. Өргөн хэрэглэгддэг хүндрэлүүд 1. Шугаман аргаар шийдэх Жишээ. N хүртэлх 3 эсвэл 5-д хуваагддаг тоонуудыг ол. sum=0 for i=1 to n if (i mod 3==0) or (i mod 5)=0 then sum=sum+i output sum Хугацаа: O(n) учир Function Div(n) p=t/n return n*(p*(p+1))/2 Output Div(3)+Div(5)-Div(15) Хугацаа: O(n) → O(1) Ямар нэг зүй тогтолтой тоонуудын хувьд эхний гишүүдийн олсон зүй тогтол дээр тулгуурлан ерөнхий томъёо гишүүний томъёо гарган авч (O(1) хугацаанд биелнэ), индукцээр батлаж ашиглах Бодлого 3. Натурал тооны квадратуудын нийлбэр ба нийлбэрийн квадратын ялгаврыг ол. FOR i=1 to n S1=s1+i; S2=s2+i*i; Output s1*s1-s2 Хугацаа: O(n) Бодолт. (1+2+3+…+n)2 -(12 +22 +…+n2 ) олохын тулд томъёонуудыг ашиглавал бодлогын шийд S1-S2 болно. Хугацаа: O(n) → O(1) Тоон дарааллын элементүүдийг олох ерөнхий аргыг олсон бол энэ аргаар олсон дарааллын гишүүд дээр дахин анализ хийх зүй тогтолыг ажиглах Фибоничийн тооны n-р гишүүнийг ол. Рекурсив функц ашиглан Function Fib(n) if n = 0 then return 0 if n = 1 then return 1 return fib(n−1)+fib(n−2) гэж олдог. Энэ нь алгоритмын рекурсив функц гэдэг ойлголтыг эзэмшихэд авч үздэг чухал жишээ боловч NP алгоритм юм. n=100 үед O(n) = O(n − 1) + O(n − 2) + 3 ≈ 1.6n болох ба n=200 үед O(200) ≥ 2139 болох юм. Хугацаа: O(2n ) 2
  • 3. Тэгвэл 1 1 2 3 5 8 13 21 34 55 89 144 ... дараалалын 4 дэх тоо бүр нь нийлбэр тэгш байна гэдгээс F(n) = F(n-1) + F(n-2)= F(n-2)+F(n-3)+F(n-2)= =2 F(n-2) + F(n-3)= 2(F(n-3)+F(n-4))+F(n-3))= =3F(n-3) + 2 F(n-4)= 3 F(n-3) + F(n-4) + F(n-5) гэж хувиргавал F(n) = 4 F(n-3) + F(n-6) болно. A[1]=1 A[2]=1 A[3]=2 A[4]=3 A[5]=5 A[6]=8 for i=7 to n step 3 A[i]= 4*A[i-3]+A[i-6] output A[n] Хугацаа O(2n ) → O(n/3) Олох утгуудын заримыг бусад утгаас нь хамааруулж олоход тэнцэтгэл биш ашиглан хязгаар олох буюу хязгаар тогтоох. Жишээ . нь зөв бутархай бол хүртвэр нь q– ээс хэтрэхгүй хуваарьтай бүх бутархайн хувьд зүүн талаасаа хэд дүгээрт орших вэ. Бүх бутархайг олоход хугацаа O((n+1)/2*n2 ) Бодолт. Эдгээр нь натурал тоонууд учир тэнцэтгэлийн баруун гар талын ихэсгэе. Тэгвэл бидний олох бутархайн хүртвэр нь байна. for q = n; q > 2; step-1 p = (a * q - 1) / b; if p * s > r * q s = q; r = p; endif output q; Хугацаа O((n+1)*n2 → O(n) Өөр өөр зүй тогтолтой тоонуудын огтлолцлыг олохдоо орлуулга хийх, шийдийг олох Бодлого 5 (73). N –ээс хэтрэхгүй хуваарьтай хичнээн зөв бутархай байх вэ. Бодолт. Дараах томъёогоор олж болно. Мёбиусийн функц Хугацаа - O(N) Бодлого 6 (45). Тоон дарааллуудын ерөнхий гишүүний томъёо өгөгдсөн бол ижилхэн гишүүдийг ол. Олонлогийг огтлолцлыг ол Triangle Tn=t (t+1)/2 1, 3, 6, 10, 15, … Pentagonal Pn=p(3p-1)/2 1, 5, 12, 22, 35, … Hexagonal Hn=h(2h-1) 1, 6, 15, 28, 45, … Жишээ. T285 = P165 = H143 = 40755 For t=1 to n For p=1 to n For h=1 to n k = t * (t + 1) div 2 IF k=p*(3p-1) div 2 and k == h * (2*h-1) then output k Хугацаа O( n3 ) Бодолт. Бодлогын нөхцөл биелэх бүх боломжит утгуудыг шалгавал хугацаа O(n3 ) болно. Tn ба Hn –ийн хамаарлыг эхлээд тогтоое. For k=1 to n h=k*(2*k-1) p=(1+sqrt(1+24*k))/6 if p=int(p) then output k бүхэл шийд болж байна Хугацаа O( n3 ) O(n)-ээс хэтрэхгүй болно. Практик судалгаа. Ингээд төрөл бүрийн шинж чанартай тоо, дараалал, нийлбэрүүдийг олох зэрэг 50 гаруй бодлогын ердийн аргаар (brute force гэж нэрлэдэг) бодсон бодлогын хугацааг математик хувиргалт хийж олсон хугацаатай харьцуулж гаргалаа. Эдгээр бодлогуудын хувьд дундажаар 25 дахин бага хугацаа орсон байна. .Дүгнэлт 3
  • 4. Алгоритмын анхан шатны мэдлэг олгоход хэрэглэдэг зарим жишээ бол зөвхөн тухайн шинэ мэдлэг олгоход зориулсан шийдэл гэдгийг анхаарч өөр хялбар алгоритм бий гэдгийг суралцагчдад ойлгуулах бага ч гэсэн санаа авах хэрэгтэй гэж үзэж байна. Мөн алгоритмын үр ашигтай байх (efficient) чанарыг онцгой анхаарч тэдэнд биелэх хугацааг байнга тооцдог, хэрвээ биелэх боломжгүй алгоритм болж байвал шинжилгээ хийж зарим утгуудыг математик хувиргалтаар олох буюу зүй тогтол, хязгаарыг тогтоох боломж байгаа эсэхийг судлан үзэж шийдвэрлэж brute force төрлийн стандарт алгоритмуудыг байнга сайжруулж байх чадвар, дадал эзэмшүүлэх шаардлага тавигдаж байна. Алгоритмыг суралцагчдад эзэмшүүлэхдээ алгоритмын үр ашигтай байх (efficient) чанарыг онцгой анхаарч тэдэнд биелэх хугацааг байнга тооцдог, хэрвээ NP төрлийн алгоритм болж байвал шинжилгээ хийж зарим утгуудыг математик хувиргалтаар олох буюу зүй тогтол, хязгаарыг тогтоох боломж байгаа эсэхийг судлан үзэж шийдвэрлэж brute force төрлийн стандарт алгоритмуудыг байнга сайжруулж байх чадвар, дадал эзэмшүүлэх шаардлага тавигдаж байна. Ашигласан материал 4