MergeSort algoritmi.Algoritmning murakkabligini tahlil qilish
MAVZU: MergeSort algoritmi.Algoritmning murakkabligini tahlil qilish. MUNDARIJA KIRISH 1.Bob.MERGESORT ALGORITMI 1.1.MergeSoft tushunchasi. 1.2MergeSort.algoritm 1.3.Saralashni birlashtirish. 2.Bob. ALGORITMNING MURAKKABLIGINI TAHLIL QILISH 2.1.Algoritm murakkabligi. 2.2.Mergesoft algoritmining tahlili 2.3.Diskli xotira qurilmasining tuzilishi. FOYDALANILGAN ADABIYOTLAR RO‘YXATI. 1
KIRISH Algorit m – berilgan natijaga erishish uchun qilinishi kerak boʻlgan aniq koʻrsatmalar ketma-ketligi. Algoritm keng maʼnoda faqat kompyuterga oid atama boʻlmay, balki unda berilgan koʻrsatmalarni bajara oluvchi har qanday narsaga oiddir. Algorit m — maʼlum bir turga oid masalalarni yechishda ishlatiladigan amallarning muayyan tartibda bajarilishi haqidagi aniq qoida (dastur). Kibernetika va matematikaning asosiy tushunchalaridan biri. Algoritm so’zi Al – X orazmiy nomining lotincha talaffuzidan kelib chiqqan bo’lib. Muxammad Muso Al-Xorazmiyning X asrda yaratilgan qo’llanmasida keltirilgan o’nlik sanoq sistemasida arifmetik amallarni bajarish qoidalari soddaligi tufayli yevropada ham o’nlik sanoq sistemasi qo’llanishiga turtki bo’ldi. Bu qoidalar tarjimasida xar bir qoida “ Al-X orazmiy ay t adik i ” deb boshlangan va bora-bora talaffuz tufayli algoritm tarzida ifodalanib kelgan. 1.Bob.MERGESOFT ALGORITMI 1.1.MERGESOFT TUSHUNCHASI Merge sort — (Birlashtirib saralash) algoritmi asosiy beshta saralash algoritmlari ( Bubble sort , Quick sort va boshqalar) dan biri bo lib, chiziqli saralashʻ algoritmlaridan farqli ravishda „bo lib tashla va hukmronlik qil“ tipidagi algoritm ʻ hisoblanadi. Bu turdagi algoritmlar katta hajmdagi masalalarni nisbatan kichik bo lgan va oson yechiladigan qismlarga ajratgan holda bajaradi. ʻ Bunday algoritmlar masalalarni yechishda vaqtdan yutish imkonini beradi. 2
Merge sort algoritmi Merge Sort funksiyasiga massiv va uning boshlang ich (eng chapdagiʻ element) va oxirgi nuqtalari (eng o ngdagi element) beriladi. ʻ Massivning o rtasi hisoblanadi: o rtasi = (chap + o ng)/2. Bu narsa uni ʻ ʻ ʻ teng ikkiga bo lish uchun kerak bo ladi. ʻ ʻ Merge sortni rekursiv holda birinchi va ikkinchi qismlar uchun chaqiriladi. 2- va 3-qismlarda hosil bo lgan massivlar birlashtirib chiqiladi. ʻ Algoritm ishlash tezligi O(n*log(n)) bo lib tezligi O(n ʻ 2 ) bo lgan oddiy ʻ Bubble sort , Insertion sort , Selection sortlardan ancha tez ishlaydi. Taqqoslash asosida ishlaydigan algortmlarning eng tez ishlash holati O(n*log(n)) bo lishi ʻ isbotlangan [2] . Merge sort algorithm diagram Dasturi #include <iostream> using namespace std; void merge(int array[], int const left, int const mid, int const right) { auto const subArrayOne = mid - left + 1; auto const subArrayTwo = right - mid; 3
auto *leftArray = new int[subArrayOne], *rightArray = new int[subArrayTwo]; for (auto i = 0; i < subArrayOne; i++) leftArray[i] = array[left + i]; for (auto j = 0; j < subArrayTwo; j++) rightArray[j] = array[mid + 1 + j]; auto indexOfSubArrayOne = 0, indexOfSubArrayTwo = 0; int indexOfMergedArray = left; while (indexOfSubArrayOne < subArrayOne && indexOfSubArrayTwo < subArrayTwo) { if (leftArray[indexOfSubArrayOne] <= rightArray[indexOfSubArrayTwo]) { array[indexOfMergedArray] = leftArray[indexOfSubArrayOne]; indexOfSubArrayOne++; } else { array[indexOfMergedArray] = rightArray[indexOfSubArrayTwo]; indexOfSubArrayTwo++; } indexOfMergedArray++; } while (indexOfSubArrayOne < subArrayOne) { array[indexOfMergedArray] = leftArray[indexOfSubArrayOne]; indexOfSubArrayOne++; indexOfMergedArray++; } while (indexOfSubArrayTwo < subArrayTwo) { array[indexOfMergedArray] = rightArray[indexOfSubArrayTwo]; indexOfSubArrayTwo++; indexOfMergedArray++; } } void mergeSort(int array[], int const begin, int const end) { if (begin >= end) return; // Returns recursively auto mid = begin + (end - begin) / 2; mergeSort(array, begin, mid); mergeSort(array, mid + 1, end); merge(array, begin, mid, end); } 4
void printArray(int A[], int size) { for (auto i = 0; i < size; i++) cout << A[i] << " "; } int main() { int arr[] = { 12, 11, 13, 5, 6, 7 }; auto arr_size = sizeof(arr) / sizeof(arr[0]); cout << "Given array is \n"; printArray(arr, arr_size); mergeSort(arr, 0, arr_size - 1); cout << "\nSorted array is \n"; printArray(arr, arr_size); return 0; } Kamchiligi Kichikroq vazifalar uchun boshqa tartiblash algoritmlariga nisbatan sekinroq. Merge sort algoritmi vaqtinchalik massiv uchun 0(n) qo shimcha xotiraʻ maydonini talab qiladi. Agar massiv tartiblangan bo lsa ham, u butun jarayondan o tadi. ʻ ʻ 1.2. MERGESOFT ALGORITM Merge Sort va uning ishlash prinsipi Merge Sort bu saralanmagan arrayni taqqoslashga asoslangan holda saralovchi algoritm bo'lib, uning ishlash prinsipi to'liq bo'lib tashla va hukmronlik qil g'oyasiga asoslangan. Merge sort asosiy ikkita qismdan iborat: Berilgan arrayni rekursiv holda teng ikkita qismlarga bo'lib chiqish. Bu qadam, qism arraylar uzunligi 1 ga (yoki undan kichik) teng bo'lib qolguncha davom etadi. Hosil bo'lgan arraylarni qaytib birlashtirib chiqish va bir vaqtni o'zida hosil bo'luvchi array saralangan bo'lishini ta'minlash. 5