logo

Muammolarning murakkabligi va pastki baholalsh

Yuklangan vaqt:

08.08.2023

Ko'chirishlar soni:

0

Hajmi:

18.3935546875 KB
Mavzu: Muammolarning murakkabligi va pastki baholalsh.
Reja:
1. Muammolarning murakkabligi.
2. Baholash turlari.
3. Pastki baholash.
    Baholash   strategiyalari   tomonidan   ishlatiladi   dasturlash   tillari   ikkita
narsani   aniqlash   -   funktsiya   chaqiruvining   argumentlarini   qachon
baholash va funktsiyaga qanday qiymat berish kerakligini.
Tasdiqlash uchun, funktsiya ilovasi funktsiya tanasini baholashdan oldin
argumentni   baholashi   va   argumentning   joriy   qiymatini   qidirish   va   uni
o'zgartirish   qobiliyatidan   o'tishi   mumkin.   Tushunchasi   kamaytirish
strategiyasi   yilda   lambda hisobi   o'xshash, ammo aniq.
Amaliy ma'noda, C # va Java singari ko'plab zamonaviy dasturlash tillari
funktsiya   chaqiruvlari   uchun   qiymat   bo'yicha   qo'ng'iroq   /   mos   yozuvlar
bo'yicha   baholash   strategiyasiga   yaqinlashdi ]
  Ba'zi   tillar,   ayniqsa   pastki
darajadagi   tillar   kabi   C   ++,   parametrlarni   uzatishning   bir   nechta
tushunchalarini   birlashtiring.   Tarixiy   jihatdan   qadriyat   bo'yicha
qo'ng'iroq   qiling   va   ism   bilan   qo'ng'iroq   qiling   ALGOL   60,   1950-
yillarning   oxirlarida   ishlab   chiqilgan.   Malumot   bo'yicha   qo'ng'iroq
tomonidan   ishlatiladi   PL   /   I   va   ba'zilari   Fortran   tizimlar.   Kabi
funktsional   tillar   Xaskell,   shuningdek,   faqat   funktsional   bo'lmagan   tillar
kabi   R, ehtiyoj bo'yicha qo'ng'iroqdan foydalaning.
Baholash   strategiyasi   dasturlash   tili   ta'rifi   bilan   belgilanadi   va   har
qanday aniq bajarilish funktsiyasi emas.
1. Tanlash usuli (Selected sort) bo’yicha saralash
Tanlash   usuli   saralash   algoritmi   massivni   saralanmagan   qismdan   (o'sish
tartibini hisobga olgan holda) minimal elementni bir necha bor topib, boshiga
qo'yish   orqali   qatorni   saralaydi.   Algoritm   berilgan   massivda   ikkita   kichik
jadvalni saqlaydi.
1) allaqachon tartiblangan ichki massiv. 2) saralanmagan qolgan ichki massiv.
Tanlash   tartibining   har   bir   takrorlanishida   tartiblanmagan   pastki   qatordan
minimal   element   (o'sish   tartibini   hisobga   olgan   holda)   tanlanadi   va
saralangan pastki qatorga ko'chiriladi.
Quyidagi misol yuqoridagi qadamlarni tushuntiradi:
#include <iostream >
using namespace std;
void selectionSort(int arr[], int n)
{
 int i, j, min_idx;
  for (i = 0; i < n-1; i++)
  {
    min_idx = i;
    for (j = i+1; j < n; j++)
    if (arr[j] < arr[min_idx])
      min_idx = j;
    swap(arr[min_idx], arr[i]);
  }
}
void printArray(int arr[], int size)
{
  int i;
  for (i=0; i < size; i++)
  cout << arr[i] << " ";
  cout << endl;
} int main()
{
  int arr[] = {64, 25, 12, 22, 11};
  int n = sizeof(arr)/sizeof(arr[0]);
  selectionSort(arr, n);
  cout << "Saralangan massiv: \n";
  printArray(arr, n);
  return 0;
}
2) Pufaksimon saralash (Bubble sort) 
#include <iostream>
using namespace std;
void bubbleSort(int arr[], int n)
{
  int i, j;
  for (i = 0; i < n-1; i++)
        for (j = 0; j < n-i-1; j++)
    if (arr[j] > arr[j+1])
      swap(arr[j], arr[j+1]);
}
void printArray(int arr[], int size)
{
  int i;
  for (i = 0; i < size; i++)
    cout << arr[i] << " ";
  cout << endl; }
int main()
{
  int arr[] = {64, 34, 25, 12, 22, 11, 90};
  int n = sizeof(arr)/sizeof(arr[0]);
  bubbleSort(arr, n);
  cout<<"Saralangan massiv: \n";
  printArray(arr, n);
  return 0;
}
3) Shaker saralashi (Cocktail Sort)
#include <iostream>
using namespace std;
void CocktailSort(int a[], int n)
{
  bool swapped = true;
  int start = 0;
  int end = n - 1;
  while (swapped)
  {
    swapped = false;     for (int i = start; i < end; ++i)
    {
      if (a[i] > a[i + 1]) {
        swap(a[i], a[i + 1]);
        swapped = true;
      }
    }
    if (!swapped)
      break;
    swapped = false;
    end;
    for (int i = end - 1; i >= start; --i)
    {
      if (a[i] > a[i + 1]) {
        swap(a[i], a[i + 1]);
        swapped = true;
      }
    }
    ++start;
  }
}
void printArray(int a[], int n) {
  for (int i = 0; i < n; i++)
    printf("%d ", a[i]);
  printf("\n");
}
int main()
{
  int a[] = { 5, 1, 4, 2, 8, 0, 2 };
  int n = sizeof(a) / sizeof(a[0]);
  CocktailSort(a, n);
  printf("Saralangan massiv :\n");
  printArray(a, n);
  return 0;
}
4) Taroqsimon saralash (Comb sort)
#include<iostream>
using namespace std;
int getNextk(int k)
{
  k = (k*10)/13;
  if (k < 1)
    return 1;
  return k;
}
void combSort(int a[], int n)
{
  int k = n;   bool swapped = true;
  while (k != 1  swapped == true)
  {
    k = getNextk(k);
   swapped = false;
   for (int i=0; i<n-k; i++)
    {
      if (a[i] > a[i+k])
      {
        swap(a[i], a[i+k]);
        swapped = true;
      }
    }
  }
}
int main()
{
  int a[] = {8, 4, 1, 56, 3, -44, 23, -6, 28, 0};
  int n = sizeof(a)/sizeof(a[0]);
  combSort(a, n);
  printf("Saralangan massiv: \n");
  for (int i=0; i<n; i++)
    printf("%d ", a[i]);
   return 0;
}

Mavzu: Muammolarning murakkabligi va pastki baholalsh. Reja: 1. Muammolarning murakkabligi. 2. Baholash turlari. 3. Pastki baholash.

Baholash strategiyalari tomonidan ishlatiladi dasturlash tillari ikkita narsani aniqlash - funktsiya chaqiruvining argumentlarini qachon baholash va funktsiyaga qanday qiymat berish kerakligini. Tasdiqlash uchun, funktsiya ilovasi funktsiya tanasini baholashdan oldin argumentni baholashi va argumentning joriy qiymatini qidirish va uni o'zgartirish qobiliyatidan o'tishi mumkin. Tushunchasi kamaytirish strategiyasi yilda lambda hisobi o'xshash, ammo aniq. Amaliy ma'noda, C # va Java singari ko'plab zamonaviy dasturlash tillari funktsiya chaqiruvlari uchun qiymat bo'yicha qo'ng'iroq / mos yozuvlar bo'yicha baholash strategiyasiga yaqinlashdi ] Ba'zi tillar, ayniqsa pastki darajadagi tillar kabi C ++, parametrlarni uzatishning bir nechta tushunchalarini birlashtiring. Tarixiy jihatdan qadriyat bo'yicha qo'ng'iroq qiling va ism bilan qo'ng'iroq qiling ALGOL 60, 1950- yillarning oxirlarida ishlab chiqilgan. Malumot bo'yicha qo'ng'iroq tomonidan ishlatiladi PL / I va ba'zilari Fortran tizimlar. Kabi funktsional tillar Xaskell, shuningdek, faqat funktsional bo'lmagan tillar kabi R, ehtiyoj bo'yicha qo'ng'iroqdan foydalaning. Baholash strategiyasi dasturlash tili ta'rifi bilan belgilanadi va har qanday aniq bajarilish funktsiyasi emas. 1. Tanlash usuli (Selected sort) bo’yicha saralash Tanlash usuli saralash algoritmi massivni saralanmagan qismdan (o'sish tartibini hisobga olgan holda) minimal elementni bir necha bor topib, boshiga qo'yish orqali qatorni saralaydi. Algoritm berilgan massivda ikkita kichik jadvalni saqlaydi. 1) allaqachon tartiblangan ichki massiv.

2) saralanmagan qolgan ichki massiv. Tanlash tartibining har bir takrorlanishida tartiblanmagan pastki qatordan minimal element (o'sish tartibini hisobga olgan holda) tanlanadi va saralangan pastki qatorga ko'chiriladi. Quyidagi misol yuqoridagi qadamlarni tushuntiradi: #include <iostream > using namespace std; void selectionSort(int arr[], int n) { int i, j, min_idx; for (i = 0; i < n-1; i++) { min_idx = i; for (j = i+1; j < n; j++) if (arr[j] < arr[min_idx]) min_idx = j; swap(arr[min_idx], arr[i]); } } void printArray(int arr[], int size) { int i; for (i=0; i < size; i++) cout << arr[i] << " "; cout << endl; }

int main() { int arr[] = {64, 25, 12, 22, 11}; int n = sizeof(arr)/sizeof(arr[0]); selectionSort(arr, n); cout << "Saralangan massiv: \n"; printArray(arr, n); return 0; } 2) Pufaksimon saralash (Bubble sort) #include <iostream> using namespace std; void bubbleSort(int arr[], int n) { int i, j; for (i = 0; i < n-1; i++) for (j = 0; j < n-i-1; j++) if (arr[j] > arr[j+1]) swap(arr[j], arr[j+1]); } void printArray(int arr[], int size) { int i; for (i = 0; i < size; i++) cout << arr[i] << " "; cout << endl;

} int main() { int arr[] = {64, 34, 25, 12, 22, 11, 90}; int n = sizeof(arr)/sizeof(arr[0]); bubbleSort(arr, n); cout<<"Saralangan massiv: \n"; printArray(arr, n); return 0; } 3) Shaker saralashi (Cocktail Sort) #include <iostream> using namespace std; void CocktailSort(int a[], int n) { bool swapped = true; int start = 0; int end = n - 1; while (swapped) { swapped = false;