Dsi lec3
- 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
Багш: Т.Гантөр