DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Звіт до лабораторної роботи №7 на тему «Розробка та дослідження ефективності методів пошуку даних»

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних наук та інформаційних технологій
Факультет:
Комп’ютерні науки
Кафедра:
Кафедра електронних обчислювальних машин

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

Рік:
2012
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Програмування
Група:
КІ-25
Коротко про документ

Про що ця робота

У звіті досліджено ефективність методів пошуку даних за допомогою побудови та аналізу хеш-таблиць на C++. Порівняно кількість кластерів та максимальну довжину пошуку для двох різних хеш-функцій.

У роботі розглядаються

  • Хеш-таблиці
  • Методи пошуку даних
  • Хеш-функції
  • Колізії
  • Кластеризація
  • Мови програмування C++
  • Аналіз ефективності алгоритмів

Зміст і розділи

  1. Завдання
  2. Код програми
  3. Аналіз ефективності
  4. Висновок
Для кого:Студенти технічних спеціальностей та викладачі програмування
Викладачі:Не вказано

Ключові поняття

хеш-таблицяхеш-функціяпошук данихколізіяефективністьалгоритмC++масивіндекс

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

Міністерство освіти і науки України Національний університет “Львівська Політехніка” Кафедра ЕОМ Звіт До лабораторної роботи №7 На тему “ Розробка та дослідження ефективності методів пошуку даних ” Завдання Написати програму, що отримує на вході послідовність слів (ключів), будує дві хеш-таблиці цих слів, виконує операції додавання нових слів в побудовані хеш-таблиці та вилучення заданих елементів з таблиць, виводить на екран вміст кожної таблиці, здійснює багаторазовий пошук довільних слів в цих хеш-таблицях, порівнює ефективності різних методів організації хеш-таблиць. Список вхідних слів довжиною n=28 задати у вигляді текстового файла data.txt . Файл data.txt має містити таку інформацію (всі слова (або числа) записуються латинськими літерами підряд через кому): прізвище, ім'я, побатькові, день, місяць,рік народження, назва компанii мобільного зв'язку, підряд через пробіл всі цифри мобільного телефона, починаючи з кода оператора (всього 10 цифр), назва області, міста і вулиці в адресі прописки, номер будинку і квартири в адресі прописки, абревіатура інститута, кафедри, групи, день, місяць,рік виконання лабораторної роботи. Весь вхідний список слів розмістити в першій хеш-таблиці розмірністю m=37, метод побудови якої вибрати згідно з варіантом. Також весь вхідний список слів розмістити у другій хеш-таблиці, метод побудови якої вибрати самостійно. Забороняється вибирати хеш-функції, що співпадають з прикладами хеш-функції, наведених в цих методичних вказівках. При виборі хеш-функції намагатись, щоб ефективність організації другої таблиці була вищою, ніж першої. Забезпечити виконання програмою на вимогу користувача операцій додавання та вилучення елементів з хеш-таблиць. В процесі роботи з таблицями на вимогу користувача програма повинна виводити на екран вміст кожної хеш-таблиці. Код програми #include <iostream> #include <string> #include <fstream> #include <string> using namespace std; int func_hesh1_met_1(char a[]); int func_hesh1_met_2(char *a,int i); int func_hesh2_met_3(char *a,int i); int add(char Hesh2_m1[37][128],char str[128]); int main(){ char Hesh1_m1[37][128]; char Hesh2_m1[37][128]; char a[28][128]; int i=0; int j=0; int n=128; for(i=0;i<37;i++){ for(j=0;j<128;j++){ Hesh1_m1[i][j]=NULL; Hesh2_m1[i][j]=NULL;}} for(i=0;i<28;i++){ for(j=0;j<128;j++){ a[i][j]=0;}} ifstream file("data.txt"); for(int i=0;i<28;i++){ file >> a[i]; } file.close(); //хеш таблиця номер 1 for(int i=0;i<28;i++) { int indx=1; int buff; int g=0; do{ buff=func_hesh1_met_2(a[i],indx); if(Hesh1_m1[buff][0]==NULL) { g=1; for(j=0;j<128;j++){ Hesh1_m1[buff][j]=a[i][j]; } } else indx++;} while(g!=1);} for(i=0;i<37;i++){ cout<<endl; for(j=0;j<28;j++){ cout<<Hesh1_m1[i][j];}} cout<<endl<<"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"<<endl; //хеш таблиця номер 2 for(int i=0;i<28;i++){ int indx=1; int buff; int g=0; do{ buff=func_hesh2_met_3(a[i],indx); if(Hesh2_m1[buff][0]==NULL){ g=1; for(j=0;j<128;j++){ Hesh2_m1[buff][j]=a[i][j];}} else indx++;} while(g!=1);} for(i=0;i<37;i++){ cout<<endl; for(j=0;j<28;j++){ cout<<Hesh2_m1[i][j];}} cout<<endl<<"ADD-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"<<endl; char str[128]; for(j=0;j<128;j++){ str[j]=0;} cin>>str; int g=0; g=add(Hesh2_m1,str); for(j=0;j<128;j++){ Hesh2_m1[g][j]=str[j];} for(i=0;i<37;i++){ cout<<endl; for(j=0;j<28;j++){ cout<<Hesh2_m1[i][j];}} cout<<endl; return 0;} int func_hesh1_met_1(char a[]){ return (a[0]%37);} int func_hesh1_met_2(char *a,int i) { return ((func_hesh1_met_1(a)+i + 4*i^2) % 37);} int func_hesh2_met_3(char *a,int i) { return ((func_hesh1_met_1(a)+i) % 37);} int add(char Hesh2_m1[37][128],char str[128]){ int buff; buff=func_hesh2_met_3(str,1); return buff;} Перша хеш таблиця / Друга хеш таблиця / Друга хеш таблиця після додавання елемента / Пошук існуючого елемента в хеш таблиці Пошук неіснуючого елемента в хеш таблиці Аналіз ефективності. На основі вигляду першої хеш таблиці можна зробити висновок про те, що вона буде більш ефективною. Це можна визначити підрахувавши кількість утворених кластерів. В першій хеш таблиці є 8 кластерів, і найбільший з них має 11 елементів. В другій хеш таблиці утворилося 4 кластери, і найдовший з них має 22 елементи. Ефективнішою таблицею буде перша, оскільки негативно на швидкість пошуку впливає довжина кластера, яка впливає на максимальну кількість порівнянь. В першій хеш таблиці максимальна довжина кластера 11 елементів, відповідно необхідно виконати в найгіршому випадку 11 порівнянь В другій хеш таблиці максимальна довжина кластера 22 елементи, відповідно в найгіршому випадку необхідно буде виконати 22 порівняння. Отже перша хеш таблиця є більш ефективною ніж друга. Висновок: я дослідив ефективність методів пошуку на прикладі різних методів організації хеш-таблиць, та вивчив основні методи побудови хеш-таблиць, дослідив переваги і недоліки, властиві різним методам, оцінив ефективність і провів порівняння ефективностей.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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