ݺߣ

ݺߣShare a Scribd company logo
Өгөгдсөн нэг     хэмжээст
массиваас хоёр   хэмжээст
массив үүсгэх
Бодлого

n натурол тоо, а[1], а[2], ... ,а[n] бодит тоо өгөгдөв. i<j
үед B[i][j] гэсэн элементийг
B[i][j] =a[i]+a[i+1]+…+a[j] гэсэн томъёогоор
тодорхойлон B[n][n] хоёр хэмжээст массив үүсгэх
алгоритмыг зохиомжлон шинжилгээ хий.




Тайлбар: В массивын бусад элементүүдийг
тодорхойгүй гэж үз.
Алгоритмын зохиомж

Бодох аргачлал
B[i][j] элементийг олох өгөгдсөн томъёог ашиглаж мөр
мөрөөр (мөрийг i гэж үзвэл 1-р мөрөөс n мөр хүртэл буюу
1-c n хүртэл гүйнэ) давталтыг гүйцэтгэх үедээ баганын
дагуу (баганын дугаарыг j гэж үзвэл i+1-с n хүртэл гүйнэ)
давтан B[i][j] элементүүдийг олно.
Алгоритмын зохиомж

Бодох алгоритм

input n ∈ NI, a[1], a[2],…,a[n] ∈ IR
output B[n][n] хоёр хэмжээст массив
for i=1 to n do
  for j=i+1 to n do
   {
    a[i]-ээс a[j] хүртэлх элементийг хооронд нь нэм
    B[i][j]-д нийлбэрийн оноо
   }
  endfor
endfor
Алгоритмыг нэвтрүүлэх(implementation)



a) Хоёр дах давталтыг эхлэхэд S хувьсагчийн утгад 0
   оноож for k=i to j do S=S+a[k] гэж нийлбэрийг олох уг
   олсон нийлбэрийг B[i][j]=S гэж авах

b) Эхний давталт эхлэхэд B[i][i+1]=a[i]+a[i+1] утга
   оноогоод хоёр дахь давталтын давтах тоог бага зэрэг
   өөрчлөөд(j=i+2-с эхлэх) B[i][j]=B[i][j-1]+a[j] гэж
   элементийг олох

Цаашид а) нэвтрүүлэлтийн хувьд шинжилгээг хийе.

Тайлбар: нэвтрүүлэлт гэдэг нь хийгдэх алхамуудыг хэрхэн
   гүйцэтгэхийг тодорхой болгох
Алгоритмын шинжилгээ


Оролтын хэмжээ
Энэ алгоритмын биелэлт юунаас хамаарах вэ? гэвэл
массивын хэмжээ болох n тооноос хамаарах нь тодорхой
байна. Хэрэв n бага бол уг алгоритм цөөн давталт хийгээд
үр дүнг гаргах бол n-н утга их болох тусам олон үйлдэл
хийх нь тодорхой байна.

Иймд алгоритмын биелэлт n –с хамаарах нь.
Алгоритмын шинжилгээ


Алгоритмын үндсэн үйлдэл
Алгоритмын үндсэн үйлдэл гэдэг нь тухайн алгоритмын
хамгийн олон давтагдаж байгаа аль нэг үйлдэл. Хамгийн
олон давтагдах үйлдэл хэд хэд байсан ч бид аль нэгийг нь
сонгоход алгоритмын шинжилгээнд ноцтой сөрөг нөлөө
үзүүлэхгүй. Бидний зохиомжилсон алгоритмын хувьд a[i]-c
a[j] хүртлэх нийлбэрийг олох үед “+” үйлдэл хамгийн олон
удаа хийгдэнэ.

Иймд бид энэ “+” үйлдлийг үндсэн үйлдлээрээ сонгоё.
Алгоритмын шинжилгээ

Оролтын хэмжээ n-с хамаарч үндсэн үйлдэл хэдэн удаа
биелэхийг тооцоолъё. n-с хамааран “+” үндсэн үйлдэл
хийгдэх тоог T(n) гэж тэмдэглэе.

T(n)-г тооцоолохын тулд n=4,5,6,… үед тооцоог хийгээд
ерөнхий тохиолдлын томъёог гаргая.
Алгоритмын шинжилгээ

n=4 үед доорх зургаас нэмэх үйлдлийг тоог харвал
1+2+3+1+2+1=10 ширхэг ө.х T(4)=10. Жишээ нь нэг дугаар
мөрний гурав дугаар баганад a[1]+a[2]+a[3] томъёогоор
B[1][3]-ийг олох тул 2 удаа нэмэх үйлдэл хийгдэх нь. Энд i
ба j давталт хэдэн элементийн утгыг тооцохыг илэрхийлж
байна. Бидний авсан жишээгээр 6 элементийг олж байна.
    1         2               3                   4
          a[1]+a[2]    a[1]+a[2]+a[3]   a[1]+a[2]+a[3]+a[4]
1
        ‘+’ 1 ширхэг    ‘+’ 2 ширхэг        ‘+’ 3 ширхэг
                         a[2]+ a[3]       a[2]+a[3]+a[4]
2
                       ‘+’—1 ширхэг         ‘+’ 2 ширхэг
                                             a[3]+ a[4]
3
                                            ‘+’ 1 ширхэг
4
Алгоритмын шинжилгээ

    n=5 үед доорх зургаас нэмэх үйлдлийг тоог харвал
    1+2+3+4+1+2+3+1+2+1=20 ширхэг байна. Иймд T(5)=20.
    Нийт 10 элементийн утгыг олж байна.
    1         2               3                   4                       5
          a[1]+a[2]    a[1]+a[2]+a[3]   a[1]+a[2]+a[3]+a[4]   a[1]+a[2]+a[3]+a[4]+a[5]
1
        ‘+’ 1 ширхэг    ‘+’ 2 ширхэг        ‘+’ 3 ширхэг            ‘+’ 4 ширхэг
                         a[2]+ a[3]       a[2]+a[3]+a[4]        a[2]+a[3]+a[4]+a[5]
2
                       ‘+’—1 ширхэг         ‘+’ 2 ширхэг            ‘+’ 3 ширхэг
                                             a[3]+ a[4]            a[3]+ a[4]+a[5]
3
                                            ‘+’ 1 ширхэг            ‘+’ 2 ширхэг
                                                                     a[4]+ a[5]
4
                                                                    ‘+’ 1 ширхэг
5
Алгоритмын шинжилгээ
    n=n үед доорх зургаас нэмэх үйлдлийг тоолбол
    1-р мөрөнд 1+2+3+ . . . +n-1=(n-1)n/2 ‘+’ үйлдэл, n-1 элемент
    2-р мөрөнд 1+2+3+ . . . +n-2=(n-2)(n-1)/2 ‘+’ үйлдэл, n-2 элемент
    гэх мэтээр
    n-1 дүгээр мөрөнд 1 ширхэг ‘+’ үйлдэл хийж, 1 элемент олно.
    1        2               3                  4               5     ...       n
          a[1]+a[2]    a[1]+a[2]+a[3]   a[1]+a[2]+a[3]+a[4]           ...
1       ‘+’ 1 ширхэг    ‘+’ 2 ширхэг        ‘+’ 3 ширхэг      ‘+’ 4         ‘+’ n-1

                         a[2]+ a[3]       a[2]+a[3]+a[4]              ...
2                      ‘+’—1 ширхэг        ‘+’ 2 ширхэг       ‘+’ 3         ‘+’ n-2

                                            a[3]+ a[4]                ...
3                                          ‘+’ 1 ширхэг       ‘+’ 2         ‘+’ n-3

4                                                             ‘+’ 1   ...
5                                                                     ...
…            .               .                   .
                                                                 .     .      ‘+’ 1
Алгоритмын шинжилгээ


n-с хамааран “+” үндсэн үйлдэл хийгдэх тоо T(n)-г тооцвол



                      n-1

n үед (n-1)+(n-2)+. . .+2+1=n(n-1)/2 ширхэг элементийн утгыг
олж байна.
Алгоритмын шинжилгээ

Одоо T(n)-г O-р дээрээс нь зааглахдаа бүх
нэмэгдэхүүнийг ихэсгэн n(n-1)/2 утгаар солъё

    ≤
Эндээс T(n)-ийн О –г олвол T(n) ∈O(n3)
Дүгнэлт


Бодлогын алгоритмын “зохиомж шинжилгээ” хийх нь дараах
алхамтай байна.
1.Бодлогын өгүүлбэр буюу бодлогын тавил
2.Алгоритмын зохиомж
   • Бодлогыг бодох бүдүүвч арга
   • Бодох аргын алгоритм
3.Алгоритмын нэвтрүүлэлтийг сонгох
4.Алгоритмын шинжилгээ
   • Оролтын хэмжээг тодорхойлох
   • Үндсэн үйлдлийг сонгох
   • Оролтын хэмжээнээс үндсэн үйлдэл хамаарах T(n)
       функцийг байгуулах
   • T(n) функцийн О үнэлгээг хийх
Дүгнэлт


“Өгөгдсөн нэг хэмжээст массиваас хоёр хэмжээст массив
үүсгэх” бодлогыг бодсон дээрх арга нь О(n3) хугацааны
хүндрэлтэй байна.


Нэвтрүүлэлтийн b) аргын хувьд шинжилгээг хийх, өөр илүү
сайн алгоритм байгаа эсэхийг судлах.

More Related Content

алгоритм шинжилгээ зохиомж

  • 1. Өгөгдсөн нэг хэмжээст массиваас хоёр хэмжээст массив үүсгэх
  • 2. Бодлого n натурол тоо, а[1], а[2], ... ,а[n] бодит тоо өгөгдөв. i<j үед B[i][j] гэсэн элементийг B[i][j] =a[i]+a[i+1]+…+a[j] гэсэн томъёогоор тодорхойлон B[n][n] хоёр хэмжээст массив үүсгэх алгоритмыг зохиомжлон шинжилгээ хий. Тайлбар: В массивын бусад элементүүдийг тодорхойгүй гэж үз.
  • 3. Алгоритмын зохиомж Бодох аргачлал B[i][j] элементийг олох өгөгдсөн томъёог ашиглаж мөр мөрөөр (мөрийг i гэж үзвэл 1-р мөрөөс n мөр хүртэл буюу 1-c n хүртэл гүйнэ) давталтыг гүйцэтгэх үедээ баганын дагуу (баганын дугаарыг j гэж үзвэл i+1-с n хүртэл гүйнэ) давтан B[i][j] элементүүдийг олно.
  • 4. Алгоритмын зохиомж Бодох алгоритм input n ∈ NI, a[1], a[2],…,a[n] ∈ IR output B[n][n] хоёр хэмжээст массив for i=1 to n do for j=i+1 to n do { a[i]-ээс a[j] хүртэлх элементийг хооронд нь нэм B[i][j]-д нийлбэрийн оноо } endfor endfor
  • 5. Алгоритмыг нэвтрүүлэх(implementation) a) Хоёр дах давталтыг эхлэхэд S хувьсагчийн утгад 0 оноож for k=i to j do S=S+a[k] гэж нийлбэрийг олох уг олсон нийлбэрийг B[i][j]=S гэж авах b) Эхний давталт эхлэхэд B[i][i+1]=a[i]+a[i+1] утга оноогоод хоёр дахь давталтын давтах тоог бага зэрэг өөрчлөөд(j=i+2-с эхлэх) B[i][j]=B[i][j-1]+a[j] гэж элементийг олох Цаашид а) нэвтрүүлэлтийн хувьд шинжилгээг хийе. Тайлбар: нэвтрүүлэлт гэдэг нь хийгдэх алхамуудыг хэрхэн гүйцэтгэхийг тодорхой болгох
  • 6. Алгоритмын шинжилгээ Оролтын хэмжээ Энэ алгоритмын биелэлт юунаас хамаарах вэ? гэвэл массивын хэмжээ болох n тооноос хамаарах нь тодорхой байна. Хэрэв n бага бол уг алгоритм цөөн давталт хийгээд үр дүнг гаргах бол n-н утга их болох тусам олон үйлдэл хийх нь тодорхой байна. Иймд алгоритмын биелэлт n –с хамаарах нь.
  • 7. Алгоритмын шинжилгээ Алгоритмын үндсэн үйлдэл Алгоритмын үндсэн үйлдэл гэдэг нь тухайн алгоритмын хамгийн олон давтагдаж байгаа аль нэг үйлдэл. Хамгийн олон давтагдах үйлдэл хэд хэд байсан ч бид аль нэгийг нь сонгоход алгоритмын шинжилгээнд ноцтой сөрөг нөлөө үзүүлэхгүй. Бидний зохиомжилсон алгоритмын хувьд a[i]-c a[j] хүртлэх нийлбэрийг олох үед “+” үйлдэл хамгийн олон удаа хийгдэнэ. Иймд бид энэ “+” үйлдлийг үндсэн үйлдлээрээ сонгоё.
  • 8. Алгоритмын шинжилгээ Оролтын хэмжээ n-с хамаарч үндсэн үйлдэл хэдэн удаа биелэхийг тооцоолъё. n-с хамааран “+” үндсэн үйлдэл хийгдэх тоог T(n) гэж тэмдэглэе. T(n)-г тооцоолохын тулд n=4,5,6,… үед тооцоог хийгээд ерөнхий тохиолдлын томъёог гаргая.
  • 9. Алгоритмын шинжилгээ n=4 үед доорх зургаас нэмэх үйлдлийг тоог харвал 1+2+3+1+2+1=10 ширхэг ө.х T(4)=10. Жишээ нь нэг дугаар мөрний гурав дугаар баганад a[1]+a[2]+a[3] томъёогоор B[1][3]-ийг олох тул 2 удаа нэмэх үйлдэл хийгдэх нь. Энд i ба j давталт хэдэн элементийн утгыг тооцохыг илэрхийлж байна. Бидний авсан жишээгээр 6 элементийг олж байна. 1 2 3 4 a[1]+a[2] a[1]+a[2]+a[3] a[1]+a[2]+a[3]+a[4] 1 ‘+’ 1 ширхэг ‘+’ 2 ширхэг ‘+’ 3 ширхэг a[2]+ a[3] a[2]+a[3]+a[4] 2 ‘+’—1 ширхэг ‘+’ 2 ширхэг a[3]+ a[4] 3 ‘+’ 1 ширхэг 4
  • 10. Алгоритмын шинжилгээ n=5 үед доорх зургаас нэмэх үйлдлийг тоог харвал 1+2+3+4+1+2+3+1+2+1=20 ширхэг байна. Иймд T(5)=20. Нийт 10 элементийн утгыг олж байна. 1 2 3 4 5 a[1]+a[2] a[1]+a[2]+a[3] a[1]+a[2]+a[3]+a[4] a[1]+a[2]+a[3]+a[4]+a[5] 1 ‘+’ 1 ширхэг ‘+’ 2 ширхэг ‘+’ 3 ширхэг ‘+’ 4 ширхэг a[2]+ a[3] a[2]+a[3]+a[4] a[2]+a[3]+a[4]+a[5] 2 ‘+’—1 ширхэг ‘+’ 2 ширхэг ‘+’ 3 ширхэг a[3]+ a[4] a[3]+ a[4]+a[5] 3 ‘+’ 1 ширхэг ‘+’ 2 ширхэг a[4]+ a[5] 4 ‘+’ 1 ширхэг 5
  • 11. Алгоритмын шинжилгээ n=n үед доорх зургаас нэмэх үйлдлийг тоолбол 1-р мөрөнд 1+2+3+ . . . +n-1=(n-1)n/2 ‘+’ үйлдэл, n-1 элемент 2-р мөрөнд 1+2+3+ . . . +n-2=(n-2)(n-1)/2 ‘+’ үйлдэл, n-2 элемент гэх мэтээр n-1 дүгээр мөрөнд 1 ширхэг ‘+’ үйлдэл хийж, 1 элемент олно. 1 2 3 4 5 ... n a[1]+a[2] a[1]+a[2]+a[3] a[1]+a[2]+a[3]+a[4] ... 1 ‘+’ 1 ширхэг ‘+’ 2 ширхэг ‘+’ 3 ширхэг ‘+’ 4 ‘+’ n-1 a[2]+ a[3] a[2]+a[3]+a[4] ... 2 ‘+’—1 ширхэг ‘+’ 2 ширхэг ‘+’ 3 ‘+’ n-2 a[3]+ a[4] ... 3 ‘+’ 1 ширхэг ‘+’ 2 ‘+’ n-3 4 ‘+’ 1 ... 5 ... … . . . . . ‘+’ 1
  • 12. Алгоритмын шинжилгээ n-с хамааран “+” үндсэн үйлдэл хийгдэх тоо T(n)-г тооцвол n-1 n үед (n-1)+(n-2)+. . .+2+1=n(n-1)/2 ширхэг элементийн утгыг олж байна.
  • 13. Алгоритмын шинжилгээ Одоо T(n)-г O-р дээрээс нь зааглахдаа бүх нэмэгдэхүүнийг ихэсгэн n(n-1)/2 утгаар солъё ≤ Эндээс T(n)-ийн О –г олвол T(n) ∈O(n3)
  • 14. Дүгнэлт Бодлогын алгоритмын “зохиомж шинжилгээ” хийх нь дараах алхамтай байна. 1.Бодлогын өгүүлбэр буюу бодлогын тавил 2.Алгоритмын зохиомж • Бодлогыг бодох бүдүүвч арга • Бодох аргын алгоритм 3.Алгоритмын нэвтрүүлэлтийг сонгох 4.Алгоритмын шинжилгээ • Оролтын хэмжээг тодорхойлох • Үндсэн үйлдлийг сонгох • Оролтын хэмжээнээс үндсэн үйлдэл хамаарах T(n) функцийг байгуулах • T(n) функцийн О үнэлгээг хийх
  • 15. Дүгнэлт “Өгөгдсөн нэг хэмжээст массиваас хоёр хэмжээст массив үүсгэх” бодлогыг бодсон дээрх арга нь О(n3) хугацааны хүндрэлтэй байна. Нэвтрүүлэлтийн b) аргын хувьд шинжилгээг хийх, өөр илүү сайн алгоритм байгаа эсэхийг судлах.