Skip to content

Menoitami/TATLIN-TapeSort

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 

Repository files navigation

Проект: Сортировка данных с использованием устройства типа лента (Tape)

Описание задания

Устройство хранения данных типа лента предназначено для последовательной записи и чтения данных. Важные особенности:

  • Считывающая/записывающая магнитная головка неподвижна во время чтения и записи.
  • Лента может двигаться в обоих направлениях.
  • Чтение и запись возможны только в ячейку, на которой находится магнитная головка.
  • Перемещение ленты — затратная по времени операция, лента не предназначена для произвольного доступа.

Задача:
Дана входная лента длины N, содержащая элементы типа integer (32 бита). Необходимо отсортировать эти элементы по возрастанию и записать их на выходную ленту той же длины. Однако, есть ограничение на использование оперативной памяти — не более M байт (где M может быть меньше, чем N, так что загрузить все данные с ленты в память невозможно). Для этого можно использовать несколько временных лент для хранения промежуточных данных.

Основные требования:

  1. Определить интерфейс для работы с устройством типа лента.
  2. Реализовать класс, эмулирующий работу с лентой через обычные файлы:
    • Возможность настройки задержек записи/чтения элемента, перемотки и сдвига ленты через внешний конфигурационный файл (например, config.json).
    • Временные ленты сохраняются в директорию temp.
  3. Написать класс, реализующий алгоритм сортировки данных с входной ленты на выходную.
  4. Реализовать консольное приложение, которое:
    • Принимает на вход имя входного и выходного файлов.
    • Выполняет сортировку данных.

Описание алгоритма

В программе реализован алгоритм MergeSort, который использует 4 временные ленты для хранения промежуточных данных. Для настройки временных задержек операций ленты (чтение, запись, сдвиг) используется конфигурационный файл config.json. Алгоритм написан, как однопоточное приложение, но можно распараллелить на N потоков, но алгоритм используя уже 4*N лент

Пример использования

Консольное приложение принимает следующие параметры:

./TapeSort.exe <input_file> <output_file>

Где:

<input_file> — путь к входному файлу с неотсортированными данными. <output_file> — путь к файлу, в который будут записаны отсортированные данные. #Пример

./TapeSort.exe ../data.txt ../output.txt

Это означает, что программа будет обрабатывать около 1024 чисел, копируя их на временные ленты и выполняя сортировку по частям.

###Настройка Конфигурация задержек и параметров работы ленты производится через файл config.json.

{
    "read_delay_ms": 100,
    "write_delay_ms": 200,
    "move_delay_ms": 50
}

read_delay_ms — задержка чтения элемента с ленты (в миллисекундах). write_delay_ms — задержка записи элемента на ленту. move_delay_ms — задержка при перемещении ленты на одну позицию.

##Требования Для компиляции и запуска проекта необходимо:

  • Компилятор g++
  • Библиотека Boost (для работы с JSON-файлами)

##Установка

  1. Склонируйте репозиторий:
git clone https://github.com/yourusername/tape-sort.git
  1. Перейдите в директорию проекта:
cd TapeSort
  1. Соберите проект:
mkdir build
cd build
cmake ..
cmake --build .
  1. Запустите приложение:
./TapeSort.exe ../data.txt ../out.txt 

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published