Professional Documents
Culture Documents
Лінійний пошук та прискорений лінійний пошук
Лінійний пошук та прискорений лінійний пошук
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]);
}
}
}
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;
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;
}
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
metS();
metQ();
metB();
}
Розглянувши реалізацію й результати виконання методів послідовного і швидкого
послідовного пошуку можна дійти висновку що з точки зору кількості ітерацій вони абсолютно
аналогічні , але варто зазначити що реалізацію швидкого послідовного пошуку мій
компілятор зібрав значно ефективніше з точки зору швидкодії.
Контрольні запитання
1. Що таке метод розробки (проектування) алгоритмів?
4. Назвіть задачі, для яких ефективні алгоритми рішення можуть бути розроблені методом
грубої сили.