SlideShare a Scribd company logo
1 of 38
Эрэмбэлэлт ба хайлтын
    энгийн аргууд
        Лекц №3   LOGO
Хичээлийн агуулга




Багш: Т.Гантөр
Түргэн эрэмбэлэх арга – Quick sort


 Элемэнтийн байрыг солих үйлдэл дээр үндэслэн
  эрэмбэлэлтийн аргыг мэдэгдэхүйц сайжруулан
  боловсронгуй болгож болно.
 Энэ сайжруулалт өнөө үеийн массивыг эрэмбэлэх
  хамгийн шилдэг арга хуваалттай солилцох
  эрэмбэлэлтийн арга болсон.
 Энэ аргыг 1962 онд Ч.А.Р.Хоар анх санал
  болгосон. Маш өндөр бүтээмжтэй арга болохынх
  нь хувьд түүнийг “түргэн эрэмбэлэлт” гэж    ч
  нэрлэдэг.


Багш: Т.Гантөр
Түргэн эрэмбэлэх арга – Quick sort
 Аргын үндсэн зарчим:
  1. Эрэмбэлэлт хийгдээгүй анхны массив
     дотроос ямар нэг элемэнтийг (x) сонгон
     авна. Түүнийгээ саад элемэнт гэж нэрлэнэ.
  2. Массивын элемэнтүүдийг х-ээс зүүн талд
     түүнээс бага буюу тэнцүү бүх элемэнт
     байрлаж байхаар, баруун талд нь түүнээс их
     массивын бүх элемэнт байрлаж байхаар тус
     тус сэлгэн байрлуулна.




Багш: Т.Гантөр
Түргэн эрэмбэлэх арга – Quick sort
 Аргын үндсэн зарчим:
   Дээрх 2 алхамыг хийсний дараа x элемэнт к-р
    байрлалд байрласан гэвэл А массив нь анхны
    массив A[k]- элемэнт (саад)-ээр тусгаарлагдсан
    эрэмбэлэгдээгүй хоѐр хэсэгт хуваагдана:
      (A[1], A[2],..., A[k-1]) / элемэнт бүр нь A[k]-аас
       бага /
      (A[k+1], A[k+2],..., A[n])/ элемэнт бүр нь
       A[k]тай тэнцүү буюу түүнээс их /хэлбэртэй
       болно.
   Тиймээс A[k] нь эрэмбэлэгдсэн массивт байх
    өөрийнхөө байрлалыг эзэлсэн байна.
Багш: Т.Гантөр
Түргэн эрэмбэлэх арга – Quick sort
 Аргын үндсэн зарчим:
  3. Эрэмбэлэгдээгүй хоѐр хэсэг тус бүрийн
     хувьд (1) ба (2) алхамуудыг давтан
     гүйцэтгэж, энэ процессоо нэг элемэнтээс
     тогтох массивын хэсэг үлдэх хүртэл буюу бүх
     массив эрэмбэлэгдэх хүртэл үргэлжлүүлнэ




Багш: Т.Гантөр
Түргэн эрэмбэлэх арга
QuickSort функц:
void QuickSort(int a[],int low,int high){
if(low<high){
    int pivot=partition(a,low,high);
    QuickSort(a,low,pivot-1);
    QuickSort(a,pivot+1,high);
}
}




Багш: Т.Гантөр
Түргэн эрэмбэлэх арга
QuickSort функц:
int partition(int a[],int low,int high){
    int pivot, p_pos,i,j;
    p_pos=low;
    pivot=a[p_pos];
    for(i=low+1;i<=high;i++){
         if(a[i]<pivot){
             p_pos++;
             swap(a,p_pos,i);
         }
    }
    swap(a,low,p_pos);
    return p_pos;
}
Багш: Т.Гантөр
Түргэн эрэмбэлэх арга – Quick Sort

  i                         0    1    2    3    4    5    6    7    8    9
утга                        50   66   6    74   89   10   23   24   73   2
                            50 66     6    74   89   10   23   24   73   2
  low=0, high=9, pivot=50




                            50 66     6    74   89   10   23   24   73   2
                            50   6    66   74   89   10   23   24   73   2
                            50   6    66   74   89   10   23   24   73   2
                            50   6    66   74   89   10   23   24   73   2
                            50   6    10   74   89   66   23   24   73   2
                            50   6    10   23   89   66   74   24   73   2
                            50   6    10   23   24   66   74   89   73   2

Багш: Т.Гантөр
Түргэн эрэмбэлэх арга – Quick Sort

  i                         0    1    2    3    4    5    6    7    8     9
утга                        50   66   6    74   89   10   23   24   73    2
                            50   6    10   23   24   66   74   89   73   2
  low=0, high=9, pivot=50




                            50   6    10   23   24   2    74   89   73   66
                            2    6    10   23   24   50   74   89   73   66




Багш: Т.Гантөр
Түргэн эрэмбэлэх арга – Quick Sort

  i                        0    1    2    3    4    5    6    7    8    9
утга                       50   66   6    74   89   10   23   24   73   2
                           2    6    10   23   24   50   74   89   73   66
  low=0, high=4, pivot=2




                           2    6    10   23   24   50   74   89   73   66
                           2    6    10   23   24   50   74   89   73   66
                           2    6    10   23   24   50   74   89   73   66
                           2    6    10   23   24   50   74   89   73   66




Багш: Т.Гантөр
Түргэн эрэмбэлэх арга – Quick Sort

  i                        0    1    2    3    4    5    6    7    8    9
утга                       50   66   6    74   89   10   23   24   73   2
                           2    6    10   23   24   50   74   89   73   66
  low=1, high=4, pivot=6




                           2    6    10   23   24   50   74   89   73   66
                           2    6    10   23   24   50   74   89   73   66
                           2    6    10   23   24   50   74   89   73   66




Багш: Т.Гантөр
Түргэн эрэмбэлэх арга – Quick Sort

  i                         0    1    2    3    4    5    6    7    8    9
утга                        50   66   6    74   89   10   23   24   73   2
                            2    6    10   23   24   50   74   89   73   66
  low=2, high=4, pivot=10




                            2    6    10   23   24   50   74   89   73   66
                            2    6    10   23   24   50   74   89   73   66




Багш: Т.Гантөр
Түргэн эрэмбэлэх арга – Quick Sort

  i                         0    1    2    3    4    5    6    7    8    9
утга                        50   66   6    74   89   10   23   24   73   2
                            2    6    10   23   24   50   74   89   73   66
  low=3, high=4, pivot=23




                            2    6    10   23   24   50   74   89   73   66




Багш: Т.Гантөр
Түргэн эрэмбэлэх арга – Quick Sort

  i                         0    1    2    3    4    5    6    7    8    9
утга                        50   66   6    74   89   10   23   24   73   2
                            2    6    10   23   24   50   74   89   73   66
  low=4, high=4, pivot=24




Багш: Т.Гантөр
Түргэн эрэмбэлэх арга – Quick Sort

  i                         0    1    2    3    4    5    6    7    8    9
утга                        50   66   6    74   89   10   23   24   73   2
                            2    6    10   23   24   50   74   89   73   66
  low=5, high=9, pivot=50




                            2    6    10   23   24   50   74   89   73   66
                            2    6    10   23   24   50   74   89   73   66
                            2    6    10   23   24   50   74   89   73   66
                            2    6    10   23   24   50   74   89   73   66




Багш: Т.Гантөр
Түргэн эрэмбэлэх арга – Quick Sort

  i                         0    1    2    3    4    5    6    7    8    9
утга                        50   66   6    74   89   10   23   24   73   2
                            2    6    10   23   24   50   74   89   73   66
  low=6, high=9, pivot=74




                            2    6    10   23   24   50   74   89   73   66
                            2    6    10   23   24   50   74   89   73   66
                            2    6    10   23   24   50   74   73   89   66
                            2    6    10   23   24   50   74 73     66   89
                            2    6    10   23   24   50   66   73   74   89




Багш: Т.Гантөр
Хайлтын тухай


 Хайлт нь тодорхой нэг (хэсэг) мэдээллийг өмнө
  үүсгэн хадгалсан их хэмжээний мэдээллийн
  сангаас олох үйлдэл юм.
 Ерөнхий тохиолдолд мэдээлэл нь олон тооны
  бичлэгүүдээс тогтох ба бичлэг бүр хайх түлхүүр
  талбартай байдаг.
 Ихэнх тохиолдолд хайлтын гол зорилго нь хайх
  түлхүүрээс гадна түүнд харгалзах бичлэгийг
  олоход оршдог.


Багш: Т.Гантөр
Хайлтын тухай
 Жишээ:
   Англи хэлний электрон толиос үг хайхдаа бид
    тэр үгний орчуулга болон тайлбарыг олох
    зорилготой байдаг.
   Энэ мэдээллийн системд үг нь "түлхүүр"
    болох бөгөөд тухайн үгний тайлбар болон
    орчуулга нь "бичлэг" болдог.




Багш: Т.Гантөр
Хайлтын тухай
 Хайлт     хийхэд     давхардсан     түлхүүртэй
  бичлэгүүдийг хэрхэн боловсруулалт хийх нь
  тухайн    хэрэглээнээс    хамаардаг.    Үүнийг
  зохицуулах аргууд:
1. Бичлэгүүдийг агуулах үндсэн өгөгдлийн бүтэц
   нь зөвхөн ялгаатай түлхүүрүүд бүхий бичлэгийг
   агуулна. Харин бичлэг бүр ижил түлхүүртэй
   бичлэгүүдийг заах нэмэлт холбоос агуулж
   болно. Энэ тохиолдолд зөвхөн нэг удаагийн
   хайлтаар өгөгдсөн түлхүүр бүxий бүх бичлэгийг
   олж авдаг.


Багш: Т.Гантөр
Хайлтын тухай
2. Давхардсан түлхүүртэй бичлэгүүдийг үндсэн
   өгөгдлийн бүтцэд тэр чигээр нь үлдээж харин
   хайлтаар эхэлж олдсон нэг бичлэгийг авдаг.
   Энэ аргыг давхардсан түлхүүртэй бичлэгүүдийн
   аль нь сонгогдох нь чухал биш хэрэглээнд
   ашигладаг.
3. Түлхүүрээс гадна бусад бичлэгт утга i
   давтагдахгүй талбарыг тодорхойлж болно. Энэ
   үед хайлтыг түлхүүр болон(давтагдахгүй)
   талбарын утгаар хийх болно.



Багш: Т.Гантөр
Шугаман хайлтын арга– Linear Search


 Энэ арга нь хайлтын хамгийн энгийн арга юм.
 Зөвхөн хайж буй элемэнтийн утга мэдэгдэх
  бөгөөд түүний тухай болон хайлт явуулах
  өгөгдлийн олонлогийн талаар ямар нэг нэмэлт
  мэдээлэл байхгүй үед энэ аргыг ашиглана.




Багш: Т.Гантөр
Шугаман хайлтын арга
LinearSearch функц:
int LinearSearch (int a[],int x,int n) {
    for (int i = 0; i < n; i++)
         if (a[i] == x) return i;
    return -1;
}




Багш: Т.Гантөр
Шугаман хайлтын арга– Linear Search
Хайх утга:
 23
 23
Хайлт явуулах олонлог:
    i            0    1    2   3    4    5    6    7    8    9
  утга           50   66   6   74   89   10   23   24   73   2




Багш: Т.Гантөр
Шугаман хайлтын арга– Linear Search
Хайх утга:
 23
Хайлт явуулах олонлог:
    i            0    1    2   3    4    5    6    7    8    9
  утга           50   66   6   74   89   10   23   24   73   2
             23




Багш: Т.Гантөр
Шугаман хайлтын арга– Linear Search
Хайх утга:
 23
Хайлт явуулах олонлог:
    i            0    1    2   3    4    5    6    7    8    9
  утга           50   66   6   74   89   10   23   24   73   2
                      23




Багш: Т.Гантөр
Шугаман хайлтын арга– Linear Search
Хайх утга:
 23
Хайлт явуулах олонлог:
    i            0    1    2    3    4    5    6    7    8    9
  утга           50   66   6    74   89   10   23   24   73   2
                           23




Багш: Т.Гантөр
Шугаман хайлтын арга– Linear Search
Хайх утга:
 23
Хайлт явуулах олонлог:
    i            0    1    2   3    4    5    6    7    8    9
  утга           50   66   6   74   89   10   23   24   73   2
                               23




Багш: Т.Гантөр
Шугаман хайлтын арга– Linear Search
Хайх утга:
 23
Хайлт явуулах олонлог:
    i            0    1    2   3    4    5    6    7    8    9
  утга           50   66   6   74   89   10   23   24   73   2
                                    23




Багш: Т.Гантөр
Шугаман хайлтын арга– Linear Search
Хайх утга:
 23
Хайлт явуулах олонлог:
    i            0    1    2   3    4    5    6    7    8    9
  утга           50   66   6   74   89   10   23   24   73   2
                                         23


                           Элемэнт олдлоо
Буцаах утга:
 6

Багш: Т.Гантөр
Хоёртын хайлтын арга– Binary Search
 Шугаман хайлттай харьцуулбал илүү үр дүнтэй
  аргын нэг бол хоѐртын хайлт буюу таллан
  хуваах арга юм.
 Энэ арга нь өгөгдлийг хоѐр хэсэгт хуваан хайх
  элемэнт аль хэсэгт байгааг тодорхойлдог.
 Энэ аргыг ашиглахад өгөгдөл эрэмбэлэгдэн байх
  ѐстой.




Багш: Т.Гантөр
Хоёртын хайлтын арга– Binary Search
 Аргын үндсэн санаа:
1. Хайх элемэнт буюу Х тоо массивын дундаж
   элемэнт мөн үү гэдгийг шалгах явдал юм.
   Хэрэв энэ нь үнэн бол бодлогын шийд олдлоо
   гэсэн үг.
2. Тийм биш бол 2 тохиолдол байна.




Багш: Т.Гантөр
Хоёртын хайлтын арга– Binary Search
     a. Х нь дундаж элемэнт буюу голын элемэнтээс
        бага бол уг массив эрэмбэлэгдсэн гэдгийг
        тооцоод голын элемэнтээс баруун тийш
        байрлах бүх элемэнтүүдийг хяналтаас хасах
        ба энэ аргыг массивын голын элемэнтээс
        зүүн гар талд орших хэсэгт хэрэглэх
     b. Х нь дундаж элемэнт буюу голын элемэнтээс
        их бол уг массив эрэмбэлэгдсэн гэдгийг
        тооцоод голын элемэнтээс зүүн тийш
        байрлах бүх элемэнтүүдийг хяналтаас хасах
        ба энэ аргыг массивын голын элемэнтээс
        баруун гар талд орших хэсэгт хэрэглэх

Багш: Т.Гантөр
Хоёртын хайлтын арга
BinarySearch функц:
int BinarySearch(int a[],int n,int x){
    int mid, low=0, high=n;
    while(low<=high){
         mid=(low+high)/2;
         if(x==a[mid]) return mid;
         if(x>a[mid]) low=mid+1;
         else high=mid-1;
    }
    return -1;
}



Багш: Т.Гантөр
Хоёртын хайлтын арга– Binary Search
Хайх утга:
 23
 23
Хайлт явуулах олонлог:
    i            0   1   2    3    4    5    6    7    8    9
  утга           2   6   10   23   24   50   66   73   74   89




Багш: Т.Гантөр
Хоёртын хайлтын арга– Binary Search
Хайх утга:
 23
 23
Хайлт явуулах олонлог:
    i            0   1   2    3    4    5    6    7    8    9
  утга           2   6   10   23   24   50   66   73   74   89




Багш: Т.Гантөр
Хоёртын хайлтын арга– Binary Search
Хайх утга:
 23
 23
Хайлт явуулах олонлог:
    i            0   1    2   3    4    5    6    7    8    9
  утга           2   6   10   23   24   50   66   73   74   89




Багш: Т.Гантөр
Хоёртын хайлтын арга– Binary Search
Хайх утга:
 23
 23
Хайлт явуулах олонлог:
    i            0   1   2     3   4    5    6    7    8    9
  утга           2   6   10   23   24   50   66   73   74   89




                         Элемэнт олдлоо
Буцаах утга:
 3

Багш: Т.Гантөр

More Related Content

What's hot

Эрэмбэлэлт хайлтын аргууд
Эрэмбэлэлт хайлтын аргуудЭрэмбэлэлт хайлтын аргууд
Эрэмбэлэлт хайлтын аргуудBayalagmaa Davaanyam
 
Unshih hewleh uildel хичээл 3
Unshih hewleh uildel хичээл 3Unshih hewleh uildel хичээл 3
Unshih hewleh uildel хичээл 3Urantuya Purevtseren
 
Шугаман алгоритмын бодлогууд
Шугаман алгоритмын бодлогуудШугаман алгоритмын бодлогууд
Шугаман алгоритмын бодлогуудБаярсайхан Л
 
Bair zuraglal
Bair zuraglalBair zuraglal
Bair zuraglaldogo_03
 
Lec2 c++helnii undeslel
Lec2 c++helnii undeslelLec2 c++helnii undeslel
Lec2 c++helnii undeslelTuruu Tsogt
 
бие даалт № 1 borland c++
бие даалт № 1 borland c++бие даалт № 1 borland c++
бие даалт № 1 borland c++2011bonus
 
механик боловсруулалтын технологи
механик боловсруулалтын технологи механик боловсруулалтын технологи
механик боловсруулалтын технологи hulan batsuuri
 
Математикийн хичээл 10-р анги
Математикийн хичээл 10-р ангиМатематикийн хичээл 10-р анги
Математикийн хичээл 10-р ангиNandintsetseg Yadamsuren
 
алгоритм
алгоритмалгоритм
алгоритмNarantungaa
 
хүний нөөцийн төлөвлөлтийн орчны шинжилгээ
хүний нөөцийн төлөвлөлтийн орчны шинжилгээ хүний нөөцийн төлөвлөлтийн орчны шинжилгээ
хүний нөөцийн төлөвлөлтийн орчны шинжилгээ Гончигжавын Болдбаатар
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргуудBayalagmaa Davaanyam
 

What's hot (20)

Лекц 9(Заагч)
Лекц 9(Заагч)Лекц 9(Заагч)
Лекц 9(Заагч)
 
Эрэмбэлэлт хайлтын аргууд
Эрэмбэлэлт хайлтын аргуудЭрэмбэлэлт хайлтын аргууд
Эрэмбэлэлт хайлтын аргууд
 
Unshih hewleh uildel хичээл 3
Unshih hewleh uildel хичээл 3Unshih hewleh uildel хичээл 3
Unshih hewleh uildel хичээл 3
 
C
CC
C
 
Шугаман алгоритмын бодлогууд
Шугаман алгоритмын бодлогуудШугаман алгоритмын бодлогууд
Шугаман алгоритмын бодлогууд
 
Bair zuraglal
Bair zuraglalBair zuraglal
Bair zuraglal
 
бодлого C++
бодлого C++бодлого C++
бодлого C++
 
Pp Lect2 1
Pp Lect2 1Pp Lect2 1
Pp Lect2 1
 
Lec2 c++helnii undeslel
Lec2 c++helnii undeslelLec2 c++helnii undeslel
Lec2 c++helnii undeslel
 
бие даалт № 1 borland c++
бие даалт № 1 borland c++бие даалт № 1 borland c++
бие даалт № 1 borland c++
 
Өгөгдлийн бүтэц 10
Өгөгдлийн бүтэц 10Өгөгдлийн бүтэц 10
Өгөгдлийн бүтэц 10
 
уламжлал
 уламжлал уламжлал
уламжлал
 
механик боловсруулалтын технологи
механик боловсруулалтын технологи механик боловсруулалтын технологи
механик боловсруулалтын технологи
 
Математикийн хичээл 10-р анги
Математикийн хичээл 10-р ангиМатематикийн хичээл 10-р анги
Математикийн хичээл 10-р анги
 
алгоритм
алгоритмалгоритм
алгоритм
 
Rdbms 300 test
Rdbms 300 testRdbms 300 test
Rdbms 300 test
 
хүний нөөцийн төлөвлөлтийн орчны шинжилгээ
хүний нөөцийн төлөвлөлтийн орчны шинжилгээ хүний нөөцийн төлөвлөлтийн орчны шинжилгээ
хүний нөөцийн төлөвлөлтийн орчны шинжилгээ
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд
 
Programchlaliin c hel
Programchlaliin c helProgramchlaliin c hel
Programchlaliin c hel
 
C++ vndsen oilgolt хичээл 1
C++ vndsen oilgolt хичээл 1C++ vndsen oilgolt хичээл 1
C++ vndsen oilgolt хичээл 1
 

Viewers also liked

Dsi lec8-copy
Dsi lec8-copyDsi lec8-copy
Dsi lec8-copyggmo86
 
Dsi lec6,7
Dsi lec6,7Dsi lec6,7
Dsi lec6,7ggmo86
 
Dsi lec12
Dsi lec12Dsi lec12
Dsi lec12ggmo86
 
Dsi lec13
Dsi lec13Dsi lec13
Dsi lec13ggmo86
 
Dsi lec11
Dsi lec11Dsi lec11
Dsi lec11ggmo86
 
Dsi lec14
Dsi lec14Dsi lec14
Dsi lec14ggmo86
 
Dsi lec9-copy
Dsi lec9-copyDsi lec9-copy
Dsi lec9-copyggmo86
 
Dsi lec1
Dsi lec1Dsi lec1
Dsi lec1ggmo86
 
Dsi lec10
Dsi lec10Dsi lec10
Dsi lec10ggmo86
 
U.cs101 алгоритм программчлал-10
U.cs101   алгоритм программчлал-10U.cs101   алгоритм программчлал-10
U.cs101 алгоритм программчлал-10Badral Khurelbaatar
 
U.cs101 алгоритм программчлал-12
U.cs101   алгоритм программчлал-12U.cs101   алгоритм программчлал-12
U.cs101 алгоритм программчлал-12Badral Khurelbaatar
 
U.cs101 алгоритм программчлал-3
U.cs101   алгоритм программчлал-3U.cs101   алгоритм программчлал-3
U.cs101 алгоритм программчлал-3Badral Khurelbaatar
 
Sodko111
Sodko111Sodko111
Sodko111sodko27
 
Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэцMuuluu
 
U.cs101 алгоритм программчлал-5 zasvar badral(1)
U.cs101   алгоритм программчлал-5 zasvar badral(1)U.cs101   алгоритм программчлал-5 zasvar badral(1)
U.cs101 алгоритм программчлал-5 zasvar badral(1)Badral Khurelbaatar
 
Gosexem asuult 09
Gosexem asuult 09Gosexem asuult 09
Gosexem asuult 09dorjoooo
 

Viewers also liked (20)

Dsi lec8-copy
Dsi lec8-copyDsi lec8-copy
Dsi lec8-copy
 
Dsi lec6,7
Dsi lec6,7Dsi lec6,7
Dsi lec6,7
 
Dsi lec12
Dsi lec12Dsi lec12
Dsi lec12
 
Dsi lec13
Dsi lec13Dsi lec13
Dsi lec13
 
Dsi lec11
Dsi lec11Dsi lec11
Dsi lec11
 
Dsi lec14
Dsi lec14Dsi lec14
Dsi lec14
 
Dsi lec9-copy
Dsi lec9-copyDsi lec9-copy
Dsi lec9-copy
 
Dsi lec1
Dsi lec1Dsi lec1
Dsi lec1
 
Dsi lec10
Dsi lec10Dsi lec10
Dsi lec10
 
PL Lecture3
PL Lecture3PL Lecture3
PL Lecture3
 
U.cs101 алгоритм программчлал-10
U.cs101   алгоритм программчлал-10U.cs101   алгоритм программчлал-10
U.cs101 алгоритм программчлал-10
 
U.cs101 алгоритм программчлал-12
U.cs101   алгоритм программчлал-12U.cs101   алгоритм программчлал-12
U.cs101 алгоритм программчлал-12
 
U.cs101 алгоритм программчлал-3
U.cs101   алгоритм программчлал-3U.cs101   алгоритм программчлал-3
U.cs101 алгоритм программчлал-3
 
Blog ds-tod
Blog ds-todBlog ds-tod
Blog ds-tod
 
Sodko111
Sodko111Sodko111
Sodko111
 
Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэц
 
Java laboratoriin udirdamj 2
 Java laboratoriin udirdamj 2 Java laboratoriin udirdamj 2
Java laboratoriin udirdamj 2
 
U.cs101 алгоритм программчлал-5 zasvar badral(1)
U.cs101   алгоритм программчлал-5 zasvar badral(1)U.cs101   алгоритм программчлал-5 zasvar badral(1)
U.cs101 алгоритм программчлал-5 zasvar badral(1)
 
Gosexem asuult 09
Gosexem asuult 09Gosexem asuult 09
Gosexem asuult 09
 
C cons
C consC cons
C cons
 

Dsi lec3

  • 1. Эрэмбэлэлт ба хайлтын энгийн аргууд Лекц №3 LOGO
  • 3. Түргэн эрэмбэлэх арга – Quick sort  Элемэнтийн байрыг солих үйлдэл дээр үндэслэн эрэмбэлэлтийн аргыг мэдэгдэхүйц сайжруулан боловсронгуй болгож болно.  Энэ сайжруулалт өнөө үеийн массивыг эрэмбэлэх хамгийн шилдэг арга хуваалттай солилцох эрэмбэлэлтийн арга болсон.  Энэ аргыг 1962 онд Ч.А.Р.Хоар анх санал болгосон. Маш өндөр бүтээмжтэй арга болохынх нь хувьд түүнийг “түргэн эрэмбэлэлт” гэж ч нэрлэдэг. Багш: Т.Гантөр
  • 4. Түргэн эрэмбэлэх арга – Quick sort  Аргын үндсэн зарчим: 1. Эрэмбэлэлт хийгдээгүй анхны массив дотроос ямар нэг элемэнтийг (x) сонгон авна. Түүнийгээ саад элемэнт гэж нэрлэнэ. 2. Массивын элемэнтүүдийг х-ээс зүүн талд түүнээс бага буюу тэнцүү бүх элемэнт байрлаж байхаар, баруун талд нь түүнээс их массивын бүх элемэнт байрлаж байхаар тус тус сэлгэн байрлуулна. Багш: Т.Гантөр
  • 5. Түргэн эрэмбэлэх арга – Quick sort  Аргын үндсэн зарчим:  Дээрх 2 алхамыг хийсний дараа x элемэнт к-р байрлалд байрласан гэвэл А массив нь анхны массив A[k]- элемэнт (саад)-ээр тусгаарлагдсан эрэмбэлэгдээгүй хоѐр хэсэгт хуваагдана:  (A[1], A[2],..., A[k-1]) / элемэнт бүр нь A[k]-аас бага /  (A[k+1], A[k+2],..., A[n])/ элемэнт бүр нь A[k]тай тэнцүү буюу түүнээс их /хэлбэртэй болно.  Тиймээс A[k] нь эрэмбэлэгдсэн массивт байх өөрийнхөө байрлалыг эзэлсэн байна. Багш: Т.Гантөр
  • 6. Түргэн эрэмбэлэх арга – Quick sort  Аргын үндсэн зарчим: 3. Эрэмбэлэгдээгүй хоѐр хэсэг тус бүрийн хувьд (1) ба (2) алхамуудыг давтан гүйцэтгэж, энэ процессоо нэг элемэнтээс тогтох массивын хэсэг үлдэх хүртэл буюу бүх массив эрэмбэлэгдэх хүртэл үргэлжлүүлнэ Багш: Т.Гантөр
  • 7. Түргэн эрэмбэлэх арга QuickSort функц: void QuickSort(int a[],int low,int high){ if(low<high){ int pivot=partition(a,low,high); QuickSort(a,low,pivot-1); QuickSort(a,pivot+1,high); } } Багш: Т.Гантөр
  • 8. Түргэн эрэмбэлэх арга QuickSort функц: int partition(int a[],int low,int high){ int pivot, p_pos,i,j; p_pos=low; pivot=a[p_pos]; for(i=low+1;i<=high;i++){ if(a[i]<pivot){ p_pos++; swap(a,p_pos,i); } } swap(a,low,p_pos); return p_pos; } Багш: Т.Гантөр
  • 9. Түргэн эрэмбэлэх арга – Quick Sort i 0 1 2 3 4 5 6 7 8 9 утга 50 66 6 74 89 10 23 24 73 2 50 66 6 74 89 10 23 24 73 2 low=0, high=9, pivot=50 50 66 6 74 89 10 23 24 73 2 50 6 66 74 89 10 23 24 73 2 50 6 66 74 89 10 23 24 73 2 50 6 66 74 89 10 23 24 73 2 50 6 10 74 89 66 23 24 73 2 50 6 10 23 89 66 74 24 73 2 50 6 10 23 24 66 74 89 73 2 Багш: Т.Гантөр
  • 10. Түргэн эрэмбэлэх арга – Quick Sort i 0 1 2 3 4 5 6 7 8 9 утга 50 66 6 74 89 10 23 24 73 2 50 6 10 23 24 66 74 89 73 2 low=0, high=9, pivot=50 50 6 10 23 24 2 74 89 73 66 2 6 10 23 24 50 74 89 73 66 Багш: Т.Гантөр
  • 11. Түргэн эрэмбэлэх арга – Quick Sort i 0 1 2 3 4 5 6 7 8 9 утга 50 66 6 74 89 10 23 24 73 2 2 6 10 23 24 50 74 89 73 66 low=0, high=4, pivot=2 2 6 10 23 24 50 74 89 73 66 2 6 10 23 24 50 74 89 73 66 2 6 10 23 24 50 74 89 73 66 2 6 10 23 24 50 74 89 73 66 Багш: Т.Гантөр
  • 12. Түргэн эрэмбэлэх арга – Quick Sort i 0 1 2 3 4 5 6 7 8 9 утга 50 66 6 74 89 10 23 24 73 2 2 6 10 23 24 50 74 89 73 66 low=1, high=4, pivot=6 2 6 10 23 24 50 74 89 73 66 2 6 10 23 24 50 74 89 73 66 2 6 10 23 24 50 74 89 73 66 Багш: Т.Гантөр
  • 13. Түргэн эрэмбэлэх арга – Quick Sort i 0 1 2 3 4 5 6 7 8 9 утга 50 66 6 74 89 10 23 24 73 2 2 6 10 23 24 50 74 89 73 66 low=2, high=4, pivot=10 2 6 10 23 24 50 74 89 73 66 2 6 10 23 24 50 74 89 73 66 Багш: Т.Гантөр
  • 14. Түргэн эрэмбэлэх арга – Quick Sort i 0 1 2 3 4 5 6 7 8 9 утга 50 66 6 74 89 10 23 24 73 2 2 6 10 23 24 50 74 89 73 66 low=3, high=4, pivot=23 2 6 10 23 24 50 74 89 73 66 Багш: Т.Гантөр
  • 15. Түргэн эрэмбэлэх арга – Quick Sort i 0 1 2 3 4 5 6 7 8 9 утга 50 66 6 74 89 10 23 24 73 2 2 6 10 23 24 50 74 89 73 66 low=4, high=4, pivot=24 Багш: Т.Гантөр
  • 16. Түргэн эрэмбэлэх арга – Quick Sort i 0 1 2 3 4 5 6 7 8 9 утга 50 66 6 74 89 10 23 24 73 2 2 6 10 23 24 50 74 89 73 66 low=5, high=9, pivot=50 2 6 10 23 24 50 74 89 73 66 2 6 10 23 24 50 74 89 73 66 2 6 10 23 24 50 74 89 73 66 2 6 10 23 24 50 74 89 73 66 Багш: Т.Гантөр
  • 17. Түргэн эрэмбэлэх арга – Quick Sort i 0 1 2 3 4 5 6 7 8 9 утга 50 66 6 74 89 10 23 24 73 2 2 6 10 23 24 50 74 89 73 66 low=6, high=9, pivot=74 2 6 10 23 24 50 74 89 73 66 2 6 10 23 24 50 74 89 73 66 2 6 10 23 24 50 74 73 89 66 2 6 10 23 24 50 74 73 66 89 2 6 10 23 24 50 66 73 74 89 Багш: Т.Гантөр
  • 18. Хайлтын тухай  Хайлт нь тодорхой нэг (хэсэг) мэдээллийг өмнө үүсгэн хадгалсан их хэмжээний мэдээллийн сангаас олох үйлдэл юм.  Ерөнхий тохиолдолд мэдээлэл нь олон тооны бичлэгүүдээс тогтох ба бичлэг бүр хайх түлхүүр талбартай байдаг.  Ихэнх тохиолдолд хайлтын гол зорилго нь хайх түлхүүрээс гадна түүнд харгалзах бичлэгийг олоход оршдог. Багш: Т.Гантөр
  • 19. Хайлтын тухай  Жишээ:  Англи хэлний электрон толиос үг хайхдаа бид тэр үгний орчуулга болон тайлбарыг олох зорилготой байдаг.  Энэ мэдээллийн системд үг нь "түлхүүр" болох бөгөөд тухайн үгний тайлбар болон орчуулга нь "бичлэг" болдог. Багш: Т.Гантөр
  • 20. Хайлтын тухай  Хайлт хийхэд давхардсан түлхүүртэй бичлэгүүдийг хэрхэн боловсруулалт хийх нь тухайн хэрэглээнээс хамаардаг. Үүнийг зохицуулах аргууд: 1. Бичлэгүүдийг агуулах үндсэн өгөгдлийн бүтэц нь зөвхөн ялгаатай түлхүүрүүд бүхий бичлэгийг агуулна. Харин бичлэг бүр ижил түлхүүртэй бичлэгүүдийг заах нэмэлт холбоос агуулж болно. Энэ тохиолдолд зөвхөн нэг удаагийн хайлтаар өгөгдсөн түлхүүр бүxий бүх бичлэгийг олж авдаг. Багш: Т.Гантөр
  • 21. Хайлтын тухай 2. Давхардсан түлхүүртэй бичлэгүүдийг үндсэн өгөгдлийн бүтцэд тэр чигээр нь үлдээж харин хайлтаар эхэлж олдсон нэг бичлэгийг авдаг. Энэ аргыг давхардсан түлхүүртэй бичлэгүүдийн аль нь сонгогдох нь чухал биш хэрэглээнд ашигладаг. 3. Түлхүүрээс гадна бусад бичлэгт утга i давтагдахгүй талбарыг тодорхойлж болно. Энэ үед хайлтыг түлхүүр болон(давтагдахгүй) талбарын утгаар хийх болно. Багш: Т.Гантөр
  • 22. Шугаман хайлтын арга– Linear Search  Энэ арга нь хайлтын хамгийн энгийн арга юм.  Зөвхөн хайж буй элемэнтийн утга мэдэгдэх бөгөөд түүний тухай болон хайлт явуулах өгөгдлийн олонлогийн талаар ямар нэг нэмэлт мэдээлэл байхгүй үед энэ аргыг ашиглана. Багш: Т.Гантөр
  • 23. Шугаман хайлтын арга LinearSearch функц: int LinearSearch (int a[],int x,int n) { for (int i = 0; i < n; i++) if (a[i] == x) return i; return -1; } Багш: Т.Гантөр
  • 24. Шугаман хайлтын арга– Linear Search Хайх утга: 23 23 Хайлт явуулах олонлог: i 0 1 2 3 4 5 6 7 8 9 утга 50 66 6 74 89 10 23 24 73 2 Багш: Т.Гантөр
  • 25. Шугаман хайлтын арга– Linear Search Хайх утга: 23 Хайлт явуулах олонлог: i 0 1 2 3 4 5 6 7 8 9 утга 50 66 6 74 89 10 23 24 73 2 23 Багш: Т.Гантөр
  • 26. Шугаман хайлтын арга– Linear Search Хайх утга: 23 Хайлт явуулах олонлог: i 0 1 2 3 4 5 6 7 8 9 утга 50 66 6 74 89 10 23 24 73 2 23 Багш: Т.Гантөр
  • 27. Шугаман хайлтын арга– Linear Search Хайх утга: 23 Хайлт явуулах олонлог: i 0 1 2 3 4 5 6 7 8 9 утга 50 66 6 74 89 10 23 24 73 2 23 Багш: Т.Гантөр
  • 28. Шугаман хайлтын арга– Linear Search Хайх утга: 23 Хайлт явуулах олонлог: i 0 1 2 3 4 5 6 7 8 9 утга 50 66 6 74 89 10 23 24 73 2 23 Багш: Т.Гантөр
  • 29. Шугаман хайлтын арга– Linear Search Хайх утга: 23 Хайлт явуулах олонлог: i 0 1 2 3 4 5 6 7 8 9 утга 50 66 6 74 89 10 23 24 73 2 23 Багш: Т.Гантөр
  • 30. Шугаман хайлтын арга– Linear Search Хайх утга: 23 Хайлт явуулах олонлог: i 0 1 2 3 4 5 6 7 8 9 утга 50 66 6 74 89 10 23 24 73 2 23 Элемэнт олдлоо Буцаах утга: 6 Багш: Т.Гантөр
  • 31. Хоёртын хайлтын арга– Binary Search  Шугаман хайлттай харьцуулбал илүү үр дүнтэй аргын нэг бол хоѐртын хайлт буюу таллан хуваах арга юм.  Энэ арга нь өгөгдлийг хоѐр хэсэгт хуваан хайх элемэнт аль хэсэгт байгааг тодорхойлдог.  Энэ аргыг ашиглахад өгөгдөл эрэмбэлэгдэн байх ѐстой. Багш: Т.Гантөр
  • 32. Хоёртын хайлтын арга– Binary Search  Аргын үндсэн санаа: 1. Хайх элемэнт буюу Х тоо массивын дундаж элемэнт мөн үү гэдгийг шалгах явдал юм. Хэрэв энэ нь үнэн бол бодлогын шийд олдлоо гэсэн үг. 2. Тийм биш бол 2 тохиолдол байна. Багш: Т.Гантөр
  • 33. Хоёртын хайлтын арга– Binary Search a. Х нь дундаж элемэнт буюу голын элемэнтээс бага бол уг массив эрэмбэлэгдсэн гэдгийг тооцоод голын элемэнтээс баруун тийш байрлах бүх элемэнтүүдийг хяналтаас хасах ба энэ аргыг массивын голын элемэнтээс зүүн гар талд орших хэсэгт хэрэглэх b. Х нь дундаж элемэнт буюу голын элемэнтээс их бол уг массив эрэмбэлэгдсэн гэдгийг тооцоод голын элемэнтээс зүүн тийш байрлах бүх элемэнтүүдийг хяналтаас хасах ба энэ аргыг массивын голын элемэнтээс баруун гар талд орших хэсэгт хэрэглэх Багш: Т.Гантөр
  • 34. Хоёртын хайлтын арга BinarySearch функц: int BinarySearch(int a[],int n,int x){ int mid, low=0, high=n; while(low<=high){ mid=(low+high)/2; if(x==a[mid]) return mid; if(x>a[mid]) low=mid+1; else high=mid-1; } return -1; } Багш: Т.Гантөр
  • 35. Хоёртын хайлтын арга– Binary Search Хайх утга: 23 23 Хайлт явуулах олонлог: i 0 1 2 3 4 5 6 7 8 9 утга 2 6 10 23 24 50 66 73 74 89 Багш: Т.Гантөр
  • 36. Хоёртын хайлтын арга– Binary Search Хайх утга: 23 23 Хайлт явуулах олонлог: i 0 1 2 3 4 5 6 7 8 9 утга 2 6 10 23 24 50 66 73 74 89 Багш: Т.Гантөр
  • 37. Хоёртын хайлтын арга– Binary Search Хайх утга: 23 23 Хайлт явуулах олонлог: i 0 1 2 3 4 5 6 7 8 9 утга 2 6 10 23 24 50 66 73 74 89 Багш: Т.Гантөр
  • 38. Хоёртын хайлтын арга– Binary Search Хайх утга: 23 23 Хайлт явуулах олонлог: i 0 1 2 3 4 5 6 7 8 9 утга 2 6 10 23 24 50 66 73 74 89 Элемэнт олдлоо Буцаах утга: 3 Багш: Т.Гантөр