Skip to content

Commit 47a0f03

Browse files
committed
expand theory about the algorithm
1 parent 81dccae commit 47a0f03

File tree

1 file changed

+143
-2
lines changed

1 file changed

+143
-2
lines changed

readme.md

Lines changed: 143 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,150 @@ sort.Start();
3838
External Multiway Merge Sort
3939
----------------------------
4040

41-
EMMS Core contains a Tape and Series classes:
4241

43-
-
42+
_**Внешняя многопутевая естественная сортировка**_ отличается от _**обычной внешней сортировки**_ концепцией серий чисел.
43+
**_Серия_** - это последовательность чисел, каждый следующий элемент которой больше предыдущего.
44+
45+
Tape - последовательность чисел, описывает файл с числами.
46+
Количество Series в Tape не ограниченно. Первая серия предшествует второй, и т.д.
47+
48+
```
49+
TAPE <= FILE 12 4 1 2 -6 12 645 12 54 -2,0001
50+
```
51+
52+
| _index_ | 0 | 1 | 2 | 3 | 4 | 5 |
53+
|------------|--------|------|--------|---------------|----------|-----------|
54+
| **Series** | `12` | `4` | `1, 2` | `-6, 12, 645` | `12, 54` | `-2.0001` |
55+
56+
57+
Еще одно отличие **_ВМЕС_** от **_ОВС_** - это потоки или пути (от этого и слово многопутевая в названии).
58+
59+
Например, при `N = 3`, создаются 6 (3 + 3) файлов, 2 набора для записи и для чтения.
60+
61+
| Read | Write |
62+
|----------|----------|
63+
| `Tape 1` | `Tape 4` |
64+
| `Tape 2` | `Tape 5` |
65+
| `Tape 3` | `Tape 6` |
66+
67+
Алгоритм состоит из:
68+
69+
1. **Инициализации**. Подготовка к основному раунду алгоритма
70+
2. **Тело**. Циклическое повторение основного раунда.
71+
72+
**Основной раунд** - слияние N Серий из каждой Полосы в Полосы другой группы.
73+
74+
Задачу слияния N серий берет на себя Коллектор. Он создает новую серию, которая записывается в Tape
75+
```
76+
_____
77+
\
78+
Series 1 \
79+
\
80+
Series 2 new Series
81+
/
82+
Series 3 /
83+
_____/
84+
85+
```
86+
87+
1.
88+
| slot | Series |
89+
|-------|----------|
90+
| [ _ ] | `12` |
91+
| [ _ ] | `4` |
92+
| [ _ ] | `1`, `2` |
93+
94+
2.
95+
| slot | Series |
96+
|--------|------------|
97+
| [ 12 ] | ~~12~~ |
98+
| [ 4 ] | ~~4~~ |
99+
| [ 1 ] | ~~1~~, `2` |
100+
101+
return `1`
102+
103+
3.
104+
105+
| slot | Series |
106+
|--------|--------------|
107+
| [ 12 ] | ~~12~~ |
108+
| [ 4 ] | ~~4~~ |
109+
| [ 2 ] | ~~1~~, ~~2~~ |
110+
111+
return `2`
112+
113+
4.
114+
115+
| slot | Series |
116+
|--------|--------------|
117+
| [ 12 ] | ~~12~~ |
118+
| [ 4 ] | ~~4~~ |
119+
| [ _ ] | ~~1~~, ~~2~~ |
120+
121+
return `4`
122+
123+
5.
124+
125+
| slot | Series |
126+
|--------|--------------|
127+
| [ 12 ] | ~~12~~ |
128+
| [ _ ] | ~~4~~ |
129+
| [ _ ] | ~~1~~, ~~2~~ |
130+
131+
return `12`
132+
133+
6.
134+
135+
| slot | Series |
136+
|-------|--------------|
137+
| [ _ ] | ~~12~~ |
138+
| [ _ ] | ~~4~~ |
139+
| [ _ ] | ~~1~~, ~~2~~ |
140+
141+
Серии закончились. Коллектор осталовился.
142+
143+
_____
144+
145+
### Example
146+
147+
| _index_ | 0 | 1 | 2 | 3 | 4 | 5 |
148+
|------------|--------|------|--------|---------------|----------|-----------|
149+
| **Series** | `12` | `4` | `1, 2` | `-6, 12, 645` | `12, 54` | `-2.0001` |
150+
151+
1. Инициализация
152+
153+
| Read | Write |
154+
|---------------------|--------|
155+
| `12`, `-6, 12, 645` | `____` |
156+
| `4`, `12, 54` | `____` |
157+
| `1, 2`, `-2.0001` | `____` |
158+
159+
2. Тело
160+
161+
2.1.
162+
163+
| Read | Write |
164+
|-----------------------|---------------|
165+
| ~~12~~, `-6, 12, 645` | `1, 2, 4, 12` |
166+
| ~~4~~, `12, 54` | `____` |
167+
| ~~1, 2~~, `-2.0001` | `____` |
168+
169+
| Read | Write |
170+
|-------------------------|--------------------------------|
171+
| ~~12~~, ~~-6, 12, 645~~ | `1, 2, 4, 12` |
172+
| ~~4~~, ~~12, 54~~ | `-6, -2.0001, 12, 12, 54, 645` |
173+
| ~~1, 2~~, ~~-2.0001~~ | `____` |
174+
175+
2.2.
176+
177+
| Read | Write |
178+
|------------------------------------|----------------------------------|
179+
| `-6 -2,0001 1 2 4 12 12 12 54 645` | ~~1, 2, 4, 12~~ |
180+
| `____` | ~~-6, -2.0001, 12, 12, 54, 645~~ |
181+
| `____` | `____` |
182+
183+
184+
Алгоритм завершаетс, в результате получась полоска с одной серией
44185

45186
-----
46187

0 commit comments

Comments
 (0)