You are on page 1of 4

Для виконання поставленої мети, необхідно вирішити наступні задачі:

1. Реалізувати алгоритм S.
2. Реалізувати алгоритм Q.
3. Реалізації алгоритмів виконують пошук першого входження аргументу пошуку в послідовності
випадкових чисел заданого об’єму.
4. Провести математичний аналіз алгоритмів S і Q.
5. Провести емпіричний аналіз алгоритмів. Зрівняти ефективності алгоритмів на вхідних даних різної
структури.
6. Зрівняти ефективність алгоритмів.
7. Реалізувати інтерфейс користувача. Функціональні можливості інтерфейсу: – Виводити
запрошення на введення об’єму випадкової послідовності й аргументу пошуку. – Виводити позицію
шуканого елемента в списку. – Передбачити можливість виводу елемента випадкової послідовності
по його позиції для перевірки результатів пошуку.

#include<iostream>
#include<vector>
#include <chrono>
#include <Windows.h>
using namespace std;

vector<int>arr_R;
vector<int>arr_sR;
int n;
int K;

void metS()
{
int iter = 0;
cout << "Кількість елементів" << endl;
cin >> n;
for (int i = 0; i < n; i++)
{
arr_R.push_back(rand()%100 +1);
arr_sR.push_back(arr_R[i]);
}

cout << endl;


for (int i = 0; i < n; i++)
{
cout <<arr_R[i]<<" ";
}
cout << endl;
cout << "Шуканий елемент" << endl;
cin >> K;
arr_R.push_back(K);
cout << endl;
auto t1 = std::chrono::high_resolution_clock::now();
for (int i = 0; i < n; i++)
{
iter++;
if (arr_R[i] == K)
{
cout <<"Позиція :"<< i + 1 ;
cout << "\nКількість ітерацій :" << iter << endl;;
auto t2 = std::chrono::high_resolution_clock::now();
auto duration =
std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count();
std::cout << "Час :" << duration << endl;
return;
}

}
}

void metQ()
{
int iter = 0;
int pb;
cout << endl;
auto t1 = std::chrono::high_resolution_clock::now();
for (int i = 0; ; i++)
{
iter++;
if (arr_R[i] == K)
{
if (i < n)
{
cout <<"Позиція :"<<i + 1;
cout << "\nКількість ітерацій :" << iter<<endl;
auto t2 = std::chrono::high_resolution_clock::now();
auto duration =
std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count();
std::cout << "Час :" << duration << endl;
return;
}

else
{
cout << " - 1";
cout << "\nКількість ітерацій :" << iter<<endl;
auto t2 = std::chrono::high_resolution_clock::now();
auto duration =
std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count();
std::cout << "Час :" << duration << endl;
return;
}
}
}
}

void metB()
{
int buf;
int iter=0;

for (int i = 0; i < n; i++)


{
for (int j = 0; j < n; j++)
{
if (arr_sR[j] > arr_sR[j + 1])
{
buf = arr_sR[j + 1];
arr_sR[j + 1] = arr_sR[j];
arr_sR[j] = buf;
}
}
}
cout << endl;
for (int i = 0; i < n; i++)
{
cout << arr_sR[i]<<" ";
}

int b=n/2;
int a = n-b;
int c=b;
int d;
auto t1 = std::chrono::high_resolution_clock::now();
while (1)
{
iter++;
if (arr_sR[b] == K)
{
cout << "\nПозиція :"<<b+1;
cout << "\nКількість ітерацій :" << iter << endl;
auto t2 = std::chrono::high_resolution_clock::now();
auto duration =
std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count();
std::cout << "Час :" << duration << endl;
return;
}

else if (arr_sR[b] > K)


{
d = a / 2;
b -= d;
c = a - d;
a = c;
}

else if (arr_sR[b] < K)


{
d = a / 2;
b += d;
c = a - d;
a = c;
}

void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
metS();
metQ();
metB();
}
Розглянувши реалізацію й результати виконання методів послідовного і швидкого
послідовного пошуку можна дійти висновку що з точки зору кількості ітерацій вони абсолютно
аналогічні , але варто зазначити що реалізацію швидкого послідовного пошуку мій
компілятор зібрав значно ефективніше з точки зору швидкодії.

Асимптотична складність обох алгоритмів – O(n)

Контрольні запитання
1. Що таке метод розробки (проектування) алгоритмів?

Методи розробки алгоритмів — це загальний підхід у інформатиці до реалізації


процесу обчислення.

2. У чому полягає особливість методу грубої сили?

Метод «грубої сили» (від англ. brute force; або повний перебір) — метод рішення


криптографічної задачі шляхом перебору всіх можливих варіантів ключа. С

3. Сформулюйте задачу пошуку в загальному виді.

Знаходження певної інформації що знаходиться в деякій структурі.

4. Назвіть задачі, для яких ефективні алгоритми рішення можуть бути розроблені методом
грубої сили.

Перебір значень за умови малого простору рішень.

You might also like