LOGOЛекц №1
Алгоритмын шинжилгээ
Хичээлийн агуулга
Алгоритмын шинжилгээ
 Аливаа алгоритмыг ямар нэг програмчлалын
хэлэнд нэвтрүүлэлгүйгээр түүний ажиллах
хугацааг тодорхойлоход алгоритмын
шинжилгээний гол зорилго оршино.
 Алгоритмыг шинжлэх гол хоёр шинжүүр нь:
 Алгоритмд шаардагдах зай
 Алгоритмд шаардагдах хугацаа
Алгоритмын шинжилгээ
Алгоритмд шаардагдах зай нь
тухайн алгоритм ажиллах үед
шаардагдах санах төхөөрөмжүүдийн
хэмжээгээр тодорхойлогдоно.
Алгоритмд шаардагдах хугацаа нь
алгоритмд гүйцэтгэгдэх үйлдлийн
тоогоор тодорхойлогдоно.
Алгоритмын шинжилгээ
 Аливаа асуудлуудыг шийдвэрлэх олон арга байдаг.
Алгоритмын шинжилгээ
 Дээрх зураг дээр таныг Joe’s Diner руу аваачих
хоёр зам байна.
 Энэ хоёр зам ижил биш ч, зорилгын хувьд
хоёулаа зөв.
 Хэрвээ тодорхой шаардлага хангасан замыг
хүсвэл аль нэг шийдэл нь бусдаасаа илүү дээр
байж магадгүй.
 Жишээ шаардлагууд:
• Joe’s Diner руу хамгийн хурдан очих зам нь аль вэ?
• Joe’s Diner руу очих хамгийн эвтэйхэн зам нь аль вэ?
• Аль замаар нь явах дуртай вэ?
Алгоритмын шинжилгээ
 Ижилхэн үйлдэл гүйцэтгэх хоёр алгоритмоос
сонголт хийхдээ програмын тухайн хэсгийн
шаардлагаас хамааран сонгодог
 Хэрвээ тодорхой шаардлага байхгүй бол тухайн
програм зохиогчийн өөрийнх нь хэв загвар дээр
үндэслэж болно.
Алгоритмын шинжилгээ
 Алгоритмуудаас сонголт хийх нь ихэвчлэн үр
ашгийн асуудалруу шилждэг.
 Аль алгоритмын тооцоолох хугацаа нь хамгийн
бага байна вэ?
 Аль алгоритм нь хамгийн бага хөдөлмөрөөр
ажиллах вэ?
Алгоритмын шинжилгээ
 Алгоритмыг шинжлэх шинжүүр
1. Алгоритмын код хэр энгийн, хялбар байх
2. Ажиллах хугацаа хамгийн бага байх
 Алгоритмыг шинжлэх үзүүлэлт
1. Биелүүлэх команд болон алхмын тоо
2. Өгөгдлийн хэмжээ
 Өгөгдлийн хэмжээнээс хамааран алгоритмын
ажиллах хугацааг тодорхойлохдоо Big-O
тэмдэглэгээ буюу ач холбогдолын асуудал гэж
нэрлэгддэг математик тэмдэглэгээг ашиглан
илэрхийлнэ.
Алгоритмын шинжилгээ – Big-O тэмдэглэгээ
 Big-O тэмдэглэгээ арга нь аливаа асуудлын
хэмжээнээс хамааран хамгийн хурдан өсдөг
функцын томъёогоор тооцоолох хугацааг
илэрхийлдэг.
 Ө.х. Тогтмол коэфциентыг орхин, оролтын
өгөгдлийн хэмжээний хувьд алгоритмын
ажиллах хугацааг хамгийн муу тохиолдолд
тодорхойлно.
Алгоритмын шинжилгээ - Big-O тэмдэглэгээ
Жишээ:
 f(N) = N4 + 100N2 + 10N + 50 функцийн хувьд Big-O
тэмдэглэгээ нь O(N4) болно.
 Учир нь N-ийн хүрэлцээтэй хамгийн их утга нь N4
байна. Тиймээс 100N2 , 10N , 50 утгууд нь
тооцоолох хугацаанд нөлөөлж чадахгүй.
 N гэдэг нь тухайн асуудлын өгөгдлийн хэмжээ
Алгоритмын шинжилгээ - Big-O тэмдэглэгээ
Ерөнхий Big-O тэмдэглэгээнүүд:
O(1) буюу хязгаартай хугацаа.
 Тухайн ажлын үр дүн нь тухайн асуудлын
хэмжээнээс хамаарахгүйгээр тогтмолоор
тодорхойлогддог.
Жишээ:
 N элемэнттэй массивын i-р элемэнтэд утга
олгоход O(1) байна. Учир нь массивын
элемэнтэд түүний индексээр нь шууд хандаж
болдог.
Алгоритмын шинжилгээ - Big-O тэмдэглэгээ
Ерөнхий Big-O тэмдэглэгээнүүд:
O(log2N) буюу логарифм хугацаа.
 Тухайн ажлын үр дүн нь тухайн асуудлын
хэмжээний логарифмаас хамаарна.
Жишээ:
 Эрэмбэлэгдсэн элемэнттэй жагсаалтаас
хоёртын хайлтын аргыг ашиглан нэг элемэнт
хайх алгоритм нь O(log2N) байна. ).
Алгоритмын шинжилгээ - Big-O тэмдэглэгээ
Ерөнхий Big-O тэмдэглэгээнүүд:
O(N) буюу шугаман хугацаа.
 Тухайн ажлын үр дүн нь ойролцоогоор тухайн
асуудлын тогтмол үе бүхий хэмжээгээр
тодорхойлогдоно.
Жишээ:
 N элемэнттэй жагсаалтын бүх элемэнтүүдийг
хэвлэхэд O(N) байна
 Эрэмбэлэгдээгүй элемэнттэй жагсаалтаас нэг
элемэнт хайхад O(N) байна.
 Учир нь элемэнт бүрт дараалан хандана.
Алгоритмын шинжилгээ - Big-O тэмдэглэгээ
Ерөнхий Big-O тэмдэглэгээнүүд:
O(N log2N ) буюу N log2N хугацаа.
 Энэ төрлийн алгоритм нь стандартаараа
логарифм алгоритмыг N удаа хэрэгжүүлснээр
тодорхойлогдоно.
Жишээ:
 QuickSort, MergeSort, HeapSort гэх мэтийн
хамгийн сайн эрэмбэлэлтийн алгоритмууд нь
O(N log2N) хугацаанд эрэмблэгдээгүй
жагсаалтыг эрэмбэлэгдсэн жагсаалт болгоно.
Алгоритмын шинжилгээ - Big-O тэмдэглэгээ
Ерөнхий Big-O тэмдэглэгээнүүд:
O(N2) буюу квадрат хугацаа.
 Энэ төрлийн алгоритм нь стандартаараа
шугаман алгоритмыг N удаа хэрэгжүүлснээр
тодорхойлогдоно.
Жишээ:
 Хялбар эрэмбэлэлтийн алгоритмууд нь O(N2)
байна.
Алгоритмын шинжилгээ - Big-O тэмдэглэгээ
Ерөнхий Big-O тэмдэглэгээнүүд:
O(N3) буюу куб хугацаа.
Жишээ:
 Бүхэл тоон элемэнттэй 3 хэмжээст хүснэгтийг
элемэнтүүдийг нэмэхэд O(N3) хугацаа
шаардагдана.
O(2N) буюу экспоненциаль хугацаа.
Жишээ:
 Ийм алгоритмууд нь өндөр өртөгтөй байдаг.
Алгоритмын шинжилгээ - Big-O тэмдэглэгээ
Өсөлтийн үзүүлэлтийн харьцуулалт:
N log2N N log2N N2
N3
2N
1 0 1 1 1 2
2 1 2 4 8 4
4 2 8 16 64 16
8 3 24 64 512 256
16 4 64 256 4,096 65,536
32 5 160 1,024 32,768 4,294,967,296
64 6 384 4,096 262,114
супер компьютерийн
чадлаар нэг сар орчим
128 7 896 16,384 2,097,152 ойролцоогоор 6 сая
жил
256 8 2,048 65,536 16,777,21
6
асуух хэрэггүй!!!

Өгөгдлийн бүтэц 1

  • 1.
  • 2.
  • 3.
    Алгоритмын шинжилгээ  Аливааалгоритмыг ямар нэг програмчлалын хэлэнд нэвтрүүлэлгүйгээр түүний ажиллах хугацааг тодорхойлоход алгоритмын шинжилгээний гол зорилго оршино.  Алгоритмыг шинжлэх гол хоёр шинжүүр нь:  Алгоритмд шаардагдах зай  Алгоритмд шаардагдах хугацаа
  • 4.
    Алгоритмын шинжилгээ Алгоритмд шаардагдахзай нь тухайн алгоритм ажиллах үед шаардагдах санах төхөөрөмжүүдийн хэмжээгээр тодорхойлогдоно. Алгоритмд шаардагдах хугацаа нь алгоритмд гүйцэтгэгдэх үйлдлийн тоогоор тодорхойлогдоно.
  • 5.
    Алгоритмын шинжилгээ  Аливааасуудлуудыг шийдвэрлэх олон арга байдаг.
  • 6.
    Алгоритмын шинжилгээ  Дээрхзураг дээр таныг Joe’s Diner руу аваачих хоёр зам байна.  Энэ хоёр зам ижил биш ч, зорилгын хувьд хоёулаа зөв.  Хэрвээ тодорхой шаардлага хангасан замыг хүсвэл аль нэг шийдэл нь бусдаасаа илүү дээр байж магадгүй.  Жишээ шаардлагууд: • Joe’s Diner руу хамгийн хурдан очих зам нь аль вэ? • Joe’s Diner руу очих хамгийн эвтэйхэн зам нь аль вэ? • Аль замаар нь явах дуртай вэ?
  • 7.
    Алгоритмын шинжилгээ  Ижилхэнүйлдэл гүйцэтгэх хоёр алгоритмоос сонголт хийхдээ програмын тухайн хэсгийн шаардлагаас хамааран сонгодог  Хэрвээ тодорхой шаардлага байхгүй бол тухайн програм зохиогчийн өөрийнх нь хэв загвар дээр үндэслэж болно.
  • 8.
    Алгоритмын шинжилгээ  Алгоритмуудаассонголт хийх нь ихэвчлэн үр ашгийн асуудалруу шилждэг.  Аль алгоритмын тооцоолох хугацаа нь хамгийн бага байна вэ?  Аль алгоритм нь хамгийн бага хөдөлмөрөөр ажиллах вэ?
  • 9.
    Алгоритмын шинжилгээ  Алгоритмыгшинжлэх шинжүүр 1. Алгоритмын код хэр энгийн, хялбар байх 2. Ажиллах хугацаа хамгийн бага байх  Алгоритмыг шинжлэх үзүүлэлт 1. Биелүүлэх команд болон алхмын тоо 2. Өгөгдлийн хэмжээ  Өгөгдлийн хэмжээнээс хамааран алгоритмын ажиллах хугацааг тодорхойлохдоо Big-O тэмдэглэгээ буюу ач холбогдолын асуудал гэж нэрлэгддэг математик тэмдэглэгээг ашиглан илэрхийлнэ.
  • 10.
    Алгоритмын шинжилгээ –Big-O тэмдэглэгээ  Big-O тэмдэглэгээ арга нь аливаа асуудлын хэмжээнээс хамааран хамгийн хурдан өсдөг функцын томъёогоор тооцоолох хугацааг илэрхийлдэг.  Ө.х. Тогтмол коэфциентыг орхин, оролтын өгөгдлийн хэмжээний хувьд алгоритмын ажиллах хугацааг хамгийн муу тохиолдолд тодорхойлно.
  • 11.
    Алгоритмын шинжилгээ -Big-O тэмдэглэгээ Жишээ:  f(N) = N4 + 100N2 + 10N + 50 функцийн хувьд Big-O тэмдэглэгээ нь O(N4) болно.  Учир нь N-ийн хүрэлцээтэй хамгийн их утга нь N4 байна. Тиймээс 100N2 , 10N , 50 утгууд нь тооцоолох хугацаанд нөлөөлж чадахгүй.  N гэдэг нь тухайн асуудлын өгөгдлийн хэмжээ
  • 12.
    Алгоритмын шинжилгээ -Big-O тэмдэглэгээ Ерөнхий Big-O тэмдэглэгээнүүд: O(1) буюу хязгаартай хугацаа.  Тухайн ажлын үр дүн нь тухайн асуудлын хэмжээнээс хамаарахгүйгээр тогтмолоор тодорхойлогддог. Жишээ:  N элемэнттэй массивын i-р элемэнтэд утга олгоход O(1) байна. Учир нь массивын элемэнтэд түүний индексээр нь шууд хандаж болдог.
  • 13.
    Алгоритмын шинжилгээ -Big-O тэмдэглэгээ Ерөнхий Big-O тэмдэглэгээнүүд: O(log2N) буюу логарифм хугацаа.  Тухайн ажлын үр дүн нь тухайн асуудлын хэмжээний логарифмаас хамаарна. Жишээ:  Эрэмбэлэгдсэн элемэнттэй жагсаалтаас хоёртын хайлтын аргыг ашиглан нэг элемэнт хайх алгоритм нь O(log2N) байна. ).
  • 14.
    Алгоритмын шинжилгээ -Big-O тэмдэглэгээ Ерөнхий Big-O тэмдэглэгээнүүд: O(N) буюу шугаман хугацаа.  Тухайн ажлын үр дүн нь ойролцоогоор тухайн асуудлын тогтмол үе бүхий хэмжээгээр тодорхойлогдоно. Жишээ:  N элемэнттэй жагсаалтын бүх элемэнтүүдийг хэвлэхэд O(N) байна  Эрэмбэлэгдээгүй элемэнттэй жагсаалтаас нэг элемэнт хайхад O(N) байна.  Учир нь элемэнт бүрт дараалан хандана.
  • 15.
    Алгоритмын шинжилгээ -Big-O тэмдэглэгээ Ерөнхий Big-O тэмдэглэгээнүүд: O(N log2N ) буюу N log2N хугацаа.  Энэ төрлийн алгоритм нь стандартаараа логарифм алгоритмыг N удаа хэрэгжүүлснээр тодорхойлогдоно. Жишээ:  QuickSort, MergeSort, HeapSort гэх мэтийн хамгийн сайн эрэмбэлэлтийн алгоритмууд нь O(N log2N) хугацаанд эрэмблэгдээгүй жагсаалтыг эрэмбэлэгдсэн жагсаалт болгоно.
  • 16.
    Алгоритмын шинжилгээ -Big-O тэмдэглэгээ Ерөнхий Big-O тэмдэглэгээнүүд: O(N2) буюу квадрат хугацаа.  Энэ төрлийн алгоритм нь стандартаараа шугаман алгоритмыг N удаа хэрэгжүүлснээр тодорхойлогдоно. Жишээ:  Хялбар эрэмбэлэлтийн алгоритмууд нь O(N2) байна.
  • 17.
    Алгоритмын шинжилгээ -Big-O тэмдэглэгээ Ерөнхий Big-O тэмдэглэгээнүүд: O(N3) буюу куб хугацаа. Жишээ:  Бүхэл тоон элемэнттэй 3 хэмжээст хүснэгтийг элемэнтүүдийг нэмэхэд O(N3) хугацаа шаардагдана. O(2N) буюу экспоненциаль хугацаа. Жишээ:  Ийм алгоритмууд нь өндөр өртөгтөй байдаг.
  • 18.
    Алгоритмын шинжилгээ -Big-O тэмдэглэгээ Өсөлтийн үзүүлэлтийн харьцуулалт: N log2N N log2N N2 N3 2N 1 0 1 1 1 2 2 1 2 4 8 4 4 2 8 16 64 16 8 3 24 64 512 256 16 4 64 256 4,096 65,536 32 5 160 1,024 32,768 4,294,967,296 64 6 384 4,096 262,114 супер компьютерийн чадлаар нэг сар орчим 128 7 896 16,384 2,097,152 ойролцоогоор 6 сая жил 256 8 2,048 65,536 16,777,21 6 асуух хэрэггүй!!!