add hella vibecoded 3
This commit is contained in:
+31
@@ -0,0 +1,31 @@
|
||||
# Лабораторная работа 3. Процессы. Неименованные каналы
|
||||
|
||||
**Вариант 13: 72-01. Сортировка массива рекурсивным разделением.**
|
||||
|
||||
Программа реализует сортировку массива рекурсивным разделением с построением дерева процессов. Каждый процесс получает часть массива, при разрешенной глубине рекурсии делит ее на две части, создает двух потомков через `fork()` и обменивается с ними данными через неименованные каналы `pipe()`.
|
||||
|
||||
Входные данные во всех экспериментах считаются **полностью случайными**. Отдельного режима `mode` нет. Для повторяемости используется только параметр `--seed`.
|
||||
|
||||
## Алгоритм
|
||||
|
||||
1. Родитель генерирует массив случайных целых чисел.
|
||||
2. На каждом рекурсивном шаге массив делится на левую и правую половины.
|
||||
3. Для каждой половины создается дочерний процесс.
|
||||
4. Родитель передает дочернему процессу данные в формате:
|
||||
- `uint64_t count`;
|
||||
- `count` значений типа `int32_t`.
|
||||
5. Потомок сортирует полученную часть тем же алгоритмом.
|
||||
6. При достижении `max_depth` или `min_size` сортировка выполняется локально без новых процессов.
|
||||
7. Потомок возвращает результат родителю в формате:
|
||||
- `uint64_t count`;
|
||||
- `count` отсортированных значений;
|
||||
- `uint64_t processes` — число процессов в поддереве.
|
||||
8. Родитель выполняет слияние двух отсортированных частей.
|
||||
|
||||
Для одного потомка используются два канала: родитель → потомок и потомок → родитель. Так как потомков два, на рекурсивном узле создается четыре канала.
|
||||
|
||||
## Сборка и запуск
|
||||
|
||||
```bash
|
||||
make
|
||||
./lab3 --size 100000 --depth 2 --min-size 4096
|
||||
Reference in New Issue
Block a user