This project is designed to learning computer science by a roadmap.
For start sorting file create MultiwaySort()
with 2 parameters such number of ways
and (filename
or path file).
Then call Start()
method.
After sorting is completed, a new file will be created with the same name and postscript -sorted
.
using algorithms_cs.Algorithm.Sort.External.Merge;
const int numberWays = 4;
const string pathFile = @"someDirectory\\resource\\1.test";
var sort = new MultiwaySort(NumberWays, PathFile);
sort.Start();
/1.test 12 4 1 2 -6 12 645 12 54 -2,0001
/1.test-sorted -6 -2,0001 1 2 4 12 12 12 54 645
Внешняя многопутевая естественная сортировка отличается от обычной внешней сортировки концепцией серий чисел. Серия - это последовательность чисел, каждый следующий элемент которой больше предыдущего.
Tape - последовательность чисел, описывает файл с числами. Количество Series в Tape не ограниченно. Первая серия предшествует второй, и т.д.
TAPE <= FILE 12 4 1 2 -6 12 645 12 54 -2,0001
index | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
Series | 12 |
4 |
1, 2 |
-6, 12, 645 |
12, 54 |
-2.0001 |
Еще одно отличие ВМЕС от ОВС - это потоки или пути (от этого и слово многопутевая в названии).
Например, при N = 3
, создаются 6 (3 + 3) файлов, 2 набора для записи и для чтения.
Read | Write |
---|---|
Tape 1 |
Tape 4 |
Tape 2 |
Tape 5 |
Tape 3 |
Tape 6 |
Алгоритм состоит из:
- Инициализации. Подготовка к основному раунду алгоритма
- Тело. Циклическое повторение основного раунда.
Основной раунд - слияние N Серий из каждой Полосы в Полосы другой группы.
Задачу слияния N серий берет на себя Коллектор. Он создает новую серию, которая записывается в Tape
_____
\
Series 1 \
\
Series 2 new Series
/
Series 3 /
_____/
slot | Series |
---|---|
[ _ ] | 12 |
[ _ ] | 4 |
[ _ ] | 1 , 2 |
slot | Series |
---|---|
[ 12 ] | |
[ 4 ] | |
[ 1 ] | 2 |
return 1
slot | Series |
---|---|
[ 12 ] | |
[ 4 ] | |
[ 2 ] |
return 2
slot | Series |
---|---|
[ 12 ] | |
[ 4 ] | |
[ _ ] |
return 4
slot | Series |
---|---|
[ 12 ] | |
[ _ ] | |
[ _ ] |
return 12
slot | Series |
---|---|
[ _ ] | |
[ _ ] | |
[ _ ] |
Серии закончились. Коллектор осталовился.
index | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
Series | 12 |
4 |
1, 2 |
-6, 12, 645 |
12, 54 |
-2.0001 |
- Инициализация
Write | Read |
---|---|
12 , -6, 12, 645 |
____ |
4 , 12, 54 |
____ |
1, 2 , -2.0001 |
____ |
- Тело
2.1.
Read | Write |
---|---|
-6, 12, 645 |
1, 2, 4, 12 |
12, 54 |
____ |
-2.0001 |
____ |
Read | Write |
---|---|
1, 2, 4, 12 |
|
-6, -2.0001, 12, 12, 54, 645 |
|
____ |
2.2.
Write | Read |
---|---|
-6 -2,0001 1 2 4 12 12 12 54 645 |
|
____ |
|
____ |
____ |
Алгоритм завершаетс, в результате получась полоска с одной серией
Copyright (C) 2022 The EMMS Project