МЕТОДИ ПОШУКУ У МАСИВАХ

Інформація про навчальний заклад

ВУЗ:
Національний технічний університет України Київський політехнічний інститут
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2022
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Програмування складних алгоритмів

Частина тексту файла (без зображень, графіків і формул):

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ “КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ імені ІГОРЯ СІКОРСЬКОГО” ЗВІТ з лабораторної роботи №4 з навчальної дисципліни “Програмування складних алгоритмів” Тема: МЕТОДИ ПОШУКУ У МАСИВАХ Варіант №12 Київ 2022 Мета: Метою лабораторної роботи є отримання практичних навичок в обробці масивів, у пошуку елементів масивів різними методами. Дослідження і вивчення методів пошуку ключових елементів у масивах. Здійснення порівняння та аналізу ефективності використовуваних методів пошуку. Теоретична частина Пошук – знаходження будь-якої конкретної інформації у великому обсязі раніше зібраних даних. Дані діляться на записи, і кожний запис має хоча б один ключ. Ключ використовується для того, щоб відрізнити один запис від іншого. Метою пошуку є знаходження всіх записів, що підходять до заданого ключа пошуку. Пошук елементу в масиві (послідовний пошук – неупорядкованої інформації, але також можна використовувати його й на відсортованих даних). Метод пошуку з бар’єром Ідея алгоритму: – у вихідний масив потрібно тимчасово включити шукане значення; – для одержання результату пошуку потрібно перевірити, чи дорівнює шукане значення тому елементу масиву, на якому відбулось завершення роботи алгоритму; – навіть, якщо елемент у початковому масиві був відсутній, і зупинка була здійснена на включеному в масив зразкові, перевірка результату буде проведена для вихідного елементу масиву, який на той час замінить зразок пошуку; – після завершення пошуку потрібно повернути в кінець масиву початкове значення розміри масиву. Роль бар’єрного елементу виконує включений в масив зразок пошуку. Метод пошуку з бар’єром Додаткові операції по установці і зняттю бар'єра окупаються спрощенням циклу, у якому витрачається основний час при пошуку. Особливо це позначиться при великих розмірах масиву. В загальному випадку час пошуку буде меншим, ніж у попередньому випадку. Звичайно у тому випадку, коли елементи масиву можуть повторюватись пошук не можна припиняти поки не перевірили всі елементи масиву до кінця. Тоді для практичної реалізації алгоритму потрібно застосувати цикл з лічильником, а пошук проводити до кінця масиву, це дасть можливість знайти всі відповідні елементи. У такому випадку кількість перевірок дорівнює - N. Пошук послідовності елементів в масиві Алгоритм прямого (послідовного) пошуку Ідея алгоритму: 1) i = 1, 2) порівняти i-й символ масиву T з першим символом масиву W, 3) збіг → порівняти другий символ і так далі, 4) розбіжність → i = i + 1 і перехід до пункту 2. Умова закінчення алгоритму: 1) підряд М порівнянь вдалі, 2) i + M > N, тобто слово не знайдене. Часова складність Метод Розмір Час виконання  Бар’єр 10х10 27 мкс   50х50 119 мкс   100х100 809 мкс  Пошук послідовності в масиві 10х10 25 мкс   50х50 42 мкс   100х100 49 мкс   Завдання: 1. Знайти заданий елемент у невпорядкованому масиві (не менше 10х10) за допомогою методу пошуку з бар’єром. 2. Знайти заданий елемент у впорядкованому масиві (не менше 10х10) згідно варіантів за таким принципом. Завдання до Варіанту_12  Результати виконання лабораторної роботи:  Код: //Лабораторна робота №4_ПСА //ТР-15_Ткаченко_Майя, Варіант_12 #include <iostream> #include <chrono> using namespace std; void poshukbar(int *arr, int ex, int rozmir, int k){ int j=0; arr[rozmir] = ex; while(arr[j] != ex) { j++; } if(j == rozmir) { cout << ""; } else { cout << "<< ІНДЕКС >> шуканого елементу : [" << k << "][" << j << "]\n"; } } void poslidovnist(int *arr, int *p, int n, int M, int k){ bool flag = false; for(int j = 0; j < M - n + 1; j++){ for(int k = 0;k < n;k++) { if(arr[j + k] != p[k]) { break; } else if(k == n - 1) { cout << " Послідовність знаходиться за << ІНДЕКСОМ >>:[" << k << "][" << j << "]\n"; flag = true; } } } if(!flag) { cout << ""; } } int main() { srand(time(NULL)); int n; cout << "===================>\n<<<Введіть розмір масиву :\n"; cin >> n; int** arr = new int*[n]; for(int i = 0; i < n; i++) { arr[i] = new int[n]; } for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { arr[i][j] = rand() % 100 -60; } } cout <<"--------------------\nПочаткова матриця :\n "; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { cout << arr[i][j] << "\t"; } cout << endl; } int ex; cout<<"--------------------\n"; cout << "<<-- Введіть елемент для пошуку :"; cin >> ex; auto st1 = chrono::steady_clock::now(); for(int i = 0;i < n;i++){ poshukbar(arr[i], ex, n, i); } auto e1 = chrono::steady_clock::now(); cout << "--<ЧАС ВИКОНАННЯ (мкс): " << chrono::duration_cast<chrono::microseconds>(e1 - st1).count(); int sq; cout << "\n===================>\n<<<Введіть кількість елементів послідовності :"; cin >> sq; int strichka[sq]; cout << "<<-- Введіть послідовність :"; for(int i = 0; i < sq; i++) { cin >> strichka[i]; } auto st2 = chrono::steady_clock::now(); for( int i = 0; i < n; i++) { poslidovnist(arr[i], strichka, sq, n,i); } auto e2 = chrono::steady_clock::now(); cout << "\n--<ЧАС ВИКОНАННЯ (мкс): " << chrono::duration_cast<chrono::microseconds>(e2 - st2).count(); } Посилання на Repl.it : https://replit.com/join/hsdtpinxpz-tr-15tkachienko Висновки Під час виконання лабораторної роботи було розгянуто основи роботи з пошуком елементів і послідовностей. Розроблено програму, яка здатна знайти введене значення в двовимірному масиві і вказати його індекс, а також послідовність елементів і вказати значення, з якого починається послідовність.
Антиботан аватар за замовчуванням

13.06.2023 00:06-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!