Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <chrono>
- #include "BinarySearchTree.h"
- #include "BTree.h"
- using namespace std;
- using namespace chrono;
- int main() {
- setlocale(LC_ALL, "Russian");
- // Названия файлов
- string textFileName = "dictionary.txt";
- string binaryFileName = "dictionary.bin";
- // Объекты для работы с деревьями и файлами
- BinarySearchTree bst(binaryFileName);
- BTree btree(3);
- BinaryFile binaryFile;
- int choice;
- bool exitProgram = false;
- string searchKey;
- string deleteKey;
- while (!exitProgram) {
- cout << "\nМеню:" << endl;
- cout << "1. Создать бинарный файл из текстового" << endl;
- cout << "2. Построить БДП и СДП" << endl;
- cout << "3. Поиск ключа" << endl;
- cout << "4. Замер времени поиска" << endl;
- cout << "5. Удаление ключа из деревьев" << endl;
- cout << "6. Среднее количество поворотов СПД" << endl;
- cout << "0. Выход" << endl;
- cout << "Введите ваш выбор: ";
- cin >> choice;
- switch (choice) {
- case 1: {
- BinaryFile::createFromText(textFileName, binaryFileName);
- cout << "Файл создан!" << endl;
- break;
- }
- case 2: {
- bst.buildTreeFromFile();
- bst.printTree();
- btree.buildTreeFromFile(binaryFileName);
- btree.printTree();
- break;
- }
- case 3: {
- cout << "Введите ключ для поиска: ";
- cin >> searchKey;
- cout << "Поиск в БДП..." << endl;
- bst.search(searchKey);
- cout << "Поиск в СДП..." << endl;
- btree.search(searchKey);
- break;
- }
- case 4: {
- cout << "Введите ключ для замера времени поиска: ";
- cin >> searchKey;
- // Измеряем время выполнения поиска в бинарном дереве поиска.
- auto start = high_resolution_clock::now(); // Запускаем таймер перед началом поиска.
- bst.search(searchKey); // Выполняем поиск ключа в бинарном дереве поиска.
- auto stop = high_resolution_clock::now(); // Останавливаем таймер после выполнения поиска.
- auto durationBST = duration_cast<microseconds>(stop - start).count(); // Вычисляем длительность выполнения операции поиска и сохраняем ее.
- // Измеряем время выполнения поиска в B-дереве.
- start = high_resolution_clock::now(); // Запускаем таймер перед началом поиска.
- btree.search(searchKey); // Выполняем поиск ключа в B-дереве.
- stop = high_resolution_clock::now(); // Останавливаем таймер после выполнения поиска.
- auto durationBTree = duration_cast<microseconds>(stop - start).count(); // Вычисляем длительность выполнения операции поиска и сохраняем ее.
- // Измеряем время выполнения линейного поиска в бинарном файле.
- start = high_resolution_clock::now(); // Запускаем таймер перед началом поиска.
- binaryFile.searchRecord(binaryFileName, searchKey); // Выполняем линейный поиск ключа в бинарном файле.
- stop = high_resolution_clock::now(); // Останавливаем таймер после выполнения поиска.
- auto durationLinear = duration_cast<microseconds>(stop - start).count(); // Вычисляем длительность выполнения операции поиска и сохраняем ее.
- cout << "Время поиска в БДП: " << durationBST << " микросекунд\n";
- cout << "Время поиска в СДП: " << durationBTree << " микросекунд\n";
- cout << "Время линейного поиска: " << durationLinear << " микросекунд\n";
- break;
- }
- case 5: {
- cout << "Введите ключ для удаления: ";
- cin >> deleteKey;
- cout << "Удаление из БДП..." << endl;
- bst.remove(deleteKey);
- cout << "Ключ '" << deleteKey << "' удален из БДП." << endl;
- cout << "Удаление из СДП..." << endl;
- btree.remove(deleteKey);
- cout << "Ключ '" << deleteKey << "' удален из СДП." << endl;
- break;
- }
- case 6: {
- int totalKeys = btree.getTotalKeyCount();
- double averageRotations = static_cast<double>(btree.getSplitCount()) / totalKeys;
- cout << "Среднее количество поворотов на ключ: " << averageRotations << endl;
- break;
- }
- case 0: {
- exitProgram = true;
- break;
- }
- default: {
- cout << "Неверный выбор. Пожалуйста, попробуйте снова." << endl;
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement