Advertisement
DaniDori

tree

Nov 2nd, 2023
427
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.73 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <chrono>
  4. #include "BinarySearchTree.h"
  5. #include "BTree.h"
  6.  
  7. using namespace std;
  8. using namespace chrono;
  9.  
  10. int main() {
  11.     setlocale(LC_ALL, "Russian");
  12.  
  13.     // Названия файлов
  14.     string textFileName = "dictionary.txt";
  15.     string binaryFileName = "dictionary.bin";
  16.  
  17.     // Объекты для работы с деревьями и файлами
  18.     BinarySearchTree bst(binaryFileName);
  19.     BTree btree(3);
  20.     BinaryFile binaryFile;
  21.  
  22.     int choice;
  23.     bool exitProgram = false;
  24.     string searchKey;
  25.     string deleteKey;
  26.     while (!exitProgram) {
  27.         cout << "\nМеню:" << endl;
  28.         cout << "1. Создать бинарный файл из текстового" << endl;
  29.         cout << "2. Построить БДП и СДП" << endl;
  30.         cout << "3. Поиск ключа" << endl;
  31.         cout << "4. Замер времени поиска" << endl;
  32.         cout << "5. Удаление ключа из деревьев" << endl;
  33.         cout << "6. Среднее количество поворотов СПД" << endl;
  34.         cout << "0. Выход" << endl;
  35.         cout << "Введите ваш выбор: ";
  36.         cin >> choice;
  37.  
  38.         switch (choice) {
  39.         case 1: {
  40.             BinaryFile::createFromText(textFileName, binaryFileName);
  41.             cout << "Файл создан!" << endl;
  42.             break;
  43.         }
  44.         case 2: {
  45.             bst.buildTreeFromFile();
  46.             bst.printTree();
  47.             btree.buildTreeFromFile(binaryFileName);
  48.             btree.printTree();
  49.             break;
  50.         }
  51.         case 3: {
  52.             cout << "Введите ключ для поиска: ";
  53.             cin >> searchKey;
  54.  
  55.             cout << "Поиск в БДП..." << endl;
  56.             bst.search(searchKey);
  57.             cout << "Поиск в СДП..." << endl;
  58.             btree.search(searchKey);
  59.             break;
  60.         }
  61.         case 4: {
  62.             cout << "Введите ключ для замера времени поиска: ";
  63.             cin >> searchKey;
  64.  
  65.             // Измеряем время выполнения поиска в бинарном дереве поиска.
  66.             auto start = high_resolution_clock::now();  // Запускаем таймер перед началом поиска.
  67.             bst.search(searchKey);  // Выполняем поиск ключа в бинарном дереве поиска.
  68.             auto stop = high_resolution_clock::now();  // Останавливаем таймер после выполнения поиска.
  69.             auto durationBST = duration_cast<microseconds>(stop - start).count();  // Вычисляем длительность выполнения операции поиска и сохраняем ее.
  70.  
  71.             // Измеряем время выполнения поиска в B-дереве.
  72.             start = high_resolution_clock::now();  // Запускаем таймер перед началом поиска.
  73.             btree.search(searchKey);  // Выполняем поиск ключа в B-дереве.
  74.             stop = high_resolution_clock::now();  // Останавливаем таймер после выполнения поиска.
  75.             auto durationBTree = duration_cast<microseconds>(stop - start).count();  // Вычисляем длительность выполнения операции поиска и сохраняем ее.
  76.  
  77.             // Измеряем время выполнения линейного поиска в бинарном файле.
  78.             start = high_resolution_clock::now();  // Запускаем таймер перед началом поиска.
  79.             binaryFile.searchRecord(binaryFileName, searchKey);  // Выполняем линейный поиск ключа в бинарном файле.
  80.             stop = high_resolution_clock::now();  // Останавливаем таймер после выполнения поиска.
  81.             auto durationLinear = duration_cast<microseconds>(stop - start).count();  // Вычисляем длительность выполнения операции поиска и сохраняем ее.
  82.  
  83.  
  84.             cout << "Время поиска в БДП: " << durationBST << " микросекунд\n";
  85.             cout << "Время поиска в СДП: " << durationBTree << " микросекунд\n";
  86.             cout << "Время линейного поиска: " << durationLinear << " микросекунд\n";
  87.             break;
  88.         }
  89.         case 5: {
  90.             cout << "Введите ключ для удаления: ";
  91.             cin >> deleteKey;
  92.  
  93.             cout << "Удаление из БДП..." << endl;
  94.             bst.remove(deleteKey);
  95.             cout << "Ключ '" << deleteKey << "' удален из БДП." << endl;
  96.  
  97.             cout << "Удаление из СДП..." << endl;
  98.             btree.remove(deleteKey);
  99.             cout << "Ключ '" << deleteKey << "' удален из СДП." << endl;
  100.             break;
  101.         }
  102.         case 6: {
  103.             int totalKeys = btree.getTotalKeyCount();
  104.             double averageRotations = static_cast<double>(btree.getSplitCount()) / totalKeys;
  105.             cout << "Среднее количество поворотов на ключ: " << averageRotations << endl;
  106.             break;
  107.         }
  108.         case 0: {
  109.             exitProgram = true;
  110.             break;
  111.         }
  112.         default: {
  113.             cout << "Неверный выбор. Пожалуйста, попробуйте снова." << endl;
  114.         }
  115.         }
  116.     }
  117.  
  118.     return 0;
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement