Добавил:
Rumpelstilzchen2018@yandex.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2-й семестр / Лекция 5 - Тема 5 - Нетривиальные алгоритмы сортировки.ppt
Скачиваний:
41
Добавлен:
02.06.2020
Размер:
24.43 Mб
Скачать

При использовании шести вспомогательных файлов идеальными распределениями серий являются следующие:

1 0 0 0 0

1 1 1 1 1

2 2 2 2 1

4 4 4 3 2

8 8 7 6 4

16 15 14 12 8 ........

Понятно, что если распределение основано на числе Фибоначчи fi, то минимальное число серий во вспомогательных файлах будет равно fi, а максимальное - f(i+1). Поэтому после выполнения слияния мы получим максимальное число серий - fi, а минимальное - f(i-1). На каждом этапе будет выполняться максимально возможное число слияний, и процесс сойдется к наличию всего одной серии.

Поскольку число серий в исходном файле может не обеспечивать возможность такого распределения серий, применяется метод добавления пустых серий, которые в дальнейшем как можно более равномерного распределяются между промежуточными файлами и опознаются при последующих слияниях. Понятно, что чем меньше таких пустых серий, т.е. чем ближе число начальных серий к требованиям Фибоначчи, тем более эффективно работает алгоритм.

МНОГОФАЗНАЯ СОРТИРОВКА СЛИЯНИЕМ

-допускает использование произвольного числа N вспомогательных последовательностей;

-при слиянии используется (N – 1) вспомогательная последовательность, при этом результат записывается в свободную (N-ю) последовательность;

-слияние производится до тех пор пока все последовательности не пусты (стратегия сливать до опустошения – merge-until-empty);

-Требует неравномерного распределения серий по вспомогательным последовательностям.

33

ПРИМЕР МНОГОФАЗНОЙ СОРТИРОВКИ

 

(3 ВСПОМОГАТЕЛЬНЫЕ

 

 

ПОСЛЕДОВАТЕЛЬНОСТИ)

a3

 

 

a1

a2

 

 

13

8

0

 

 

5

0

8

 

 

0

5

3

 

 

3

2

0

 

 

1

0

2

 

 

0

1

1

 

t

1

0

0

 

* Указывается только количество серий в последовательности

34

ПРИМЕР МНОГОФАЗНОЙ СОРТИРОВКИ

 

(6 ВСПОМОГАТЕЛЬНЫХ

a1

ПОСЛЕДОВАТЕЛЬНОСТЕЙ)

a2

a3

a4

a5

a6

16

15

14

12

8

0

8

7

6

4

0

8

4

3

2

0

4

4

2

1

0

2

2

2

1

0

1

1

1

1

0

1

0

0

0

0

t

* Указывается только количество серий в последовательности

35

МНОГОФАЗНАЯ СОРТИРОВКА ПРИ СБАЛАНСИРОВАННОМ РАСПРЕДЕЛЕНИИ

Сбалансированное распределение серий!

t

a1

a2

a2

11

10

0

1

0

10

0

1

9

1

0

8

0

1

7

1

0

6

34

ИДЕАЛЬНОЕ КОЛИЧЕСТВО СЕРИЙ ПРИ ТРЕХ ВСПОМОГАТЕЛЬНЫХ

ПОСЛЕДОВАТЕЛЬНОСТЯХa1 a2 a3 Одна последовательность 13 8 0 пуста, поэтому количество

последовательностей – 2.

5

0

8

L

a1(L)

a2(L)

Sum

 

 

 

0

5

3

0

1

0

1

3

2

0

1

1

1

2

2

2

1

3

 

 

 

1

0

2

3

3

2

5

0

1

1

4

5

3

8

5

8

5

13

 

 

 

1

0

0

6

13

8

21

всегда

рабочих

t

37

ИДЕАЛЬНОЕ КОЛИЧЕСТВО СЕРИЙ ПРИ

 

ТРЕХ ВСПОМОГАТЕЛЬНЫХ

 

 

 

 

ПОСЛЕДОВАТЕЛЬНОСТЯХ

 

последовательность всегда пуста,

a1

a2

a3

Одна

 

13

8

0

поэтому

 

количество

рабочих

последовательностей – 2.

 

5

0

8

 

L

a1(L)

a2(L)

Sum

 

 

 

 

 

0

5

3

0

1

0

1

 

3

2

0

1

1

1

2

 

2

2

1

3

 

 

 

 

 

1

0

2

3

3

2

5

 

0

1

1

4

5

3

8

 

5

8

5

13

 

 

 

 

 

1

0

0

6

13

8

21

 

38

ИДЕАЛЬНОЕ КОЛИЧЕСТВО СЕРИЙ ПРИ

ШЕСТИ ВСПОМОГАТЕЛЬНЫХ

 

 

ПОСЛЕДОВАТЕЛЬНОСТЯХ

a4(L)

a5(L)

Sum

L

a1(L)

a2(L)

a3(L)

0

1

0

0

0

0

1

1

1

1

1

1

1

5

2

2

2

2

2

1

9

3

4

4

4

3

2

17

4

8

8

7

6

4

33

5

16

15

14

12

8

65

6

31

30

28

24

16

129

39

ИДЕАЛЬНОЕ КОЛИЧЕСТВО СЕРИЙ ПРИ ШЕСТИ ВСПОМОГАТЕЛЬНЫХ

ПОСЛЕДОВАТЕЛЬНОСТЯХ

L a1(L) a2(L) a3(L) a4(L) a5(L) Sum

01

11

22

3 4

4 8

516

+

+

+

0 + 0 +

11

2 + 2 +

44

8 + 7 +

15 14

0

1

2

3

6

12

+

+

+

0

1

1

2

4

8

1

5

9

17

33

65

6

31

30

28

24

16

129

40

ИДЕАЛЬНОЕ РАСПРЕДЕЛЕНИЕ СЕРИЙ И ЧИСЛА ФИБОНАЧЧИ

L a1(L)

a2(L) Sum

0

1

0

1

1

1

1

2

2

2

1

3

3

3

2

5

4

5

3

8

5

8

5

13

6

13

8

21

При использовании трех вспомогательных последовательностей идеальное количество исходных серий представляет собой числа Фибоначчи

Fi = Fi – 1 + Fi – 2

F0 = 0, F1 = 1, F2 = 1, F3 = 2, F4 = 3, F5 = 5,

41