Académique Documents
Professionnel Documents
Culture Documents
Е-НЭЭЛТТЭЙ ИНСТИТУТ
Алгоритм ба програмчлал
Лекц - 12
www.emust.edu.mn
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Агуулга:
01 Хайлтын алгоритмууд
01
02
02 Шугаман хайлт
03 Хоёртын хайлт
04 Алгасах хайлт
05 Интерполяцийн Хайлт
Энэ арга нь хайлтын хамгийн энгийн арга юм. Зөвхөн хайж буй
элементийн утга мэдэгдэх бөгөөд олон хайлт явуулах өгөгдлийн
олонлогийн талаар ямар нэг мэдээлэл байхгүй үед энэ аргыг
ашиглана.
Энэ аргын үндсэн санаа нь хүснэгтийн элементүүдийг эхнээс нь эхлэн
өгсөн утгатай дэс дараалан жишиж өгсөн утгатай тэнцүү элементийн
дугаарыг олох явдал юм.
Массивын элементүүдийг дэс дараалан нэг, нэгээр авч харьцуулан
хайж байгаа элементтэй тэнцүү элемент олдох хүртэл, эсвэл бүх
элементүүдтэй харьцуулсан ч олдохгүй болох хүртэл хийгдэх хайлтыг
шугаман буюу дэс дараалсан хайлт гэнэ
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8
утга
30 60 6 54 89 23 38 55 1
23
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8
утга
30 60 6 54 89 23 38 55 1
23
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8
утга
30 60 6 54 89 23 38 55 1
23
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8
утга
30 60 6 54 89 23 38 55 1
23
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8
утга
30 60 6 54 89 23 38 55 1
23
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8
утга
30 60 6 54 89 23 38 55 1
Элемент олдлоо. 23
Буцаах утга: 5
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8 9
утга
1 2 10 23 24 50 66 73 74 89
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8 9
утга
1 2 10 23 24 50 66 73 74 89
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8 9
утга
1 2 10 23 24 50 66 73 74 89
23
Хайлт явуулах олонлог:
i 0 1 2 3 4 5 6 7 8 9
утга
1 2 10 23 24 50 66 73 74 89
Элемент олдлоо.
Буцаах утга: 3
https://codescracker.com/cpp/program/cpp-program-binary-search.htm
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Хоёртын хайлт /Binary search/
cout<<"Haih toog oruul:";
cin>>search;
first = 0;
last = n-1;
middle = (first+last)/2;
while (first <= last)
{
if(arr[middle] < search) {
first = middle + 1; }
else if(arr[middle] == search) {
cout<<search<<" bairshil olloo "<<middle+1<<endl;
break; }
else {
https://www.beginnersbook.in/jump-search-algorithm/
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Алгасах хайлт /Jump search/
int main()
{
int arr[] = {0,1,5,8,10,14,17,19,24,32,39,59,60,64,86,98};
int x;
cout<<"Enter number to be search: ";
cin>>x;
int n = sizeof(arr) / sizeof(arr[0]);
int index = jumpSearch(arr, x, n);
cout << "\nNumber " << x << " is at index " << index;
return 0;
}
Гарах үр дүн:
Enter number to be search: 39
Number 39 is at index 10 https://www.beginnersbook.in/jump-search-algorithm/
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Интерполяцийн Хайлт /Interpolation Search/
Интерполяцийн Хайлт нь тохиолдлуудад хоёртын хайлтыг сайжруулсан
бөгөөд ялгаатай нь массив дахь утгууд нь жигд тархсан байдаг.
Интерполяцын хайлт нь хайж олох түлхүүр утгын дагуу өөр өөр байршилд
очиж болно.
https://www.geeksforgeeks.org/interpolation-search/
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Интерполяцийн Хайлт /Interpolation Search/
Туршилт хийх байрлалыг олохын тулд дараах алхамаар хайна.
https://www.geeksforgeeks.org/interpolation-search/
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Интерполяцийн Хайлт /Interpolation Search/
Интерполяцийн Хайлт хийх байрлалыг олохын тулд дараах томьёог
ашиглана.
Үүнд:
https://www.geeksforgeeks.org/interpolation-search/
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Интерполяцийн Хайлт /Interpolation Search/
#include <iostream>
using namespace std;
int interpolationSearch(int arr[], int n, int x)
{
int lo = 0, hi = (n - 1);
while (lo <= hi && x >= arr[lo] && x <= arr[hi]) {
int pos = lo + (((double)(hi-lo) /
(arr[hi]-arr[lo]))*(x - arr[lo]));
if (arr[pos] == x) return pos;
if (arr[pos] < x) lo = pos + 1;
else
hi = pos - 1; }
return -1;
} https://www.geeksforgeeks.org/interpolation-search/
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Интерполяцийн Хайлт /Interpolation Search/
int main()
{
int arr[] = {10, 12, 13, 16, 18, 19, 20, 21, 22, 23,24, 33, 35, 42,
47};
int n = sizeof(arr)/sizeof(arr[0]);
int x = 18;
int index = interpolationSearch(arr, n, x);
if (index != -1)
cout<<"Element found at index "<<index;
else
cout<<"Element not found.";
return 0;
} https://www.geeksforgeeks.org/interpolation-search/
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Интерполяцийн Хайлт /Interpolation Search/
int main() {
int arr[] = {10, 12, 13, 16, 18, 19, 20, 21, 22, 23,24, 33, 35, 42, 47};
int n = sizeof(arr)/sizeof(arr[0]);
int x = 18;
int index = interpolationSearch(arr, n, x);
if (index != -1)
cout<<"Element found at index "<<index;
else
cout<<"Element not found.";
return 0; }
Гарах үр дүн:
Element found at index 4
https://www.geeksforgeeks.org/interpolation-search/
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ