Главная страница

Методические указания алгоритмы и структуры данных. Методические указания к лабораторным работам, практическим занятиям и курсовому проектированию Часть 2 Выпуск 1606


Скачать 429.85 Kb.
НазваниеМетодические указания к лабораторным работам, практическим занятиям и курсовому проектированию Часть 2 Выпуск 1606
АнкорМетодические указания алгоритмы и структуры данных
Дата03.10.2019
Размер429.85 Kb.
Формат файлаdocx
Имя файлаtask_180930.docx
ТипМетодические указания
#88422
страница4 из 8
1   2   3   4   5   6   7   8

3. ПОДДЕРЖКА ПРОИЗВОЛЬНОЙ ПОСЛЕДОВАТЕЛЬНОСТИ В СТРУКТУРЕ ДАННЫХ ДЛЯ МНОЖЕСТВ


К одной структуре данных могут применяться операции как для множества, так и для последовательности. Иногда требуется поддерживать в структуре данных для множеств произвольную последовательность элементов этих множеств. Например, можно фиксировать порядок появления элементов в множестве при его создании и работать с этим порядком.

Последовательность из структуры данных для множеств может быть получена как результат её обхода. Часто этого бывает достаточно: порядок элементов для результата операции над множествами можно назначить произвольно. Однако для множества мощностью n это будет только одна из n! возможных последовательностей. Если нужно поддерживать любую последовательность, возможны следующие подходы:

1) присоединить к каждому ключу дополнительное поле для хранения порядкового номера. Способ не создаёт проблем при поиске номера по значению ключа и при вставке новых ключей, они просто нумеруются по порядку. Удаление ключа требует просмотра всей структуры данных для корректировки номеров, следующих за удаляемым. То же приходится делать при поиске ключа по порядковому номеру (сложность O(n));

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

3) создать массив указателей на ключи. Если одновременно поддерживать в ключах дополнительное поле с обратным указателем на соответствующие элементы массива, можно избежать дополнительных расходов как для определения ключа по номеру, так и номера по ключу. Недостаток способа — необходимо заранее знать объём памяти для создания массива и перемещать часть массива в случае удаления ключей.

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

Операции над последовательностями:

1. Слияние (MERGE). Объединение двух упорядоченных последовательностей в третью с сохранением упорядоченности. От операции объединения множеств отличается только возможностью появления дубликатов ключей. Если исходные последовательности не упорядочены, можно после их слияния просто упорядочить результат. Исходный порядок ключей в множествах в результате не сохраняется.

2. Сцепление (CONCAT). Вторая последовательность подсоединяется к концу первой, образуя её продолжение.

3. Размножение (MUL). Последовательность сцепляется сама с собой заданное количество раз.

4. Укорачивание (ERASE). Из последовательности исключается часть, ограниченная порядковыми номерами от p1 до p2.

5. Исключение (EXCL). Вторая последовательность исключается из первой, если она является её частью.

6. Включение (SUBST). Вторая последовательность включается в первую с указанной позиции p. Операция похожа на конкатенацию. Сперва берётся начало первой последовательности до позиции p, затем идёт вторая последовательность, а за ней — остаток первой.

7. Замена (CHANGE). Вторая последовательность заменяет элементы первой, начиная с заданной позиции p.

Пример. Пусть имеются две последовательности A = <5, 3, 2, 4, 6, 7, 9, 1> и B = <6, 7, 9>. Позиции считаются от 0.

Тогда операция A.MERGE(B) даст результат <1, 2, 3, 4, 5, 6, 6, 7, 7, 9, 9>;

A.CONCAT(B) — <5, 3, 2, 4, 6, 7, 9, 1, 6, 7, 9>;

B.MUL(3) — <6, 7, 9, 6, 7, 9, 6, 7, 9>;

A.ERASE(2, 4) — <5, 3, 7, 9, 1>;

A.EXCL(B) — <5, 3, 2, 4, 1>;

A.SUBST(B, 3) — <5, 3, 2, 6, 7, 9, 4, 6, 7, 9, 1>;

A.CHANGE(B, 2) — <5, 3, 6, 7, 9, 7, 9, 1>.

3.1. Практикум по теме


Дополнить программу, составленную по теме «Хеш-таблицы» или «Деревья двоичного поиска», операциями над последовательностями, указанными в табл. 3.1 в соответствии с номером задания. Выбрать такой способ доработки структуры данных, чтобы получились эффективные алгоритмы.

Таблица 3.1

Индивидуальные задания к теме «Последовательности»


№ вари-
анта

Базо­вая
СД

Дополнительные
операции

№ вари-
анта

Базо­вая
СД

Дополнительные
операции

1

ДДП

MERGE, EXCL, CHANGE

26

ХТ

CONCAT, EXCL, SUBST

2

ХТ

CONCAT, EXCL, MUL

27

ДДП

MERGE, EXCL, SUBST

3

ДДП

EXCL, SUBST, MUL

28

ХТ

CONCAT, SUBST, CHANGE

4

ДДП

MERGE, ERASE, SUBST

29

ХТ

MERGE, CONCAT, CHANGE

5

ХТ

MERGE, CONCAT, SUBST

30

ДДП

MERGE, CONCAT, MUL

6

ХТ

MERGE, EXCL, SUBST

31

ДДП

EXCL, SUBST, CHANGE

7

ДДП

CONCAT, EXCL, SUBST

32

ХТ

ERASE, EXCL, MUL

8

ХТ

MERGE, ERASE, EXCL

33

ДДП

MERGE, CONCAT, SUBST

9

ХТ

MERGE, CONCAT, EXCL

34

ДДП

ERASE, EXCL, CHANGE

10

ХТ

CONCAT, ERASE, CHANGE

35

ДДП

CONCAT, ERASE, EXCL

11

ДДП

CONCAT, SUBST, CHANGE

36

ХТ

EXCL, SUBST, MUL

12

ДДП

ERASE, EXCL, SUBST

37

ХТ

CONCAT, EXCL, CHANGE

13

ХТ

CONCAT, EXCL, SUBST

38

ДДП

MERGE, CONCAT, EXCL

14

ДДП

CONCAT, EXCL, CHANGE

39

ХТ

MERGE, EXCL, CHANGE

15

ХТ

MERGE, CONCAT, MUL

40

ДДП

CONCAT, EXCL, MUL

16

ДДП

ERASE, SUBST, CHANGE

41

ХТ

MERGE, CONCAT, ERASE

17

ХТ

MERGE, SUBST, MUL

42

ДДП

CONCAT, EXCL, SUBST

18

ДДП

MERGE, SUBST, CHANGE

43

ХТ

ERASE, EXCL, SUBST

19

ХТ

CONCAT, ERASE, EXCL

44

ДДП

CONCAT, ERASE, CHANGE

20

ДДП

MERGE, CONCAT, CHANGE

45

ХТ

MERGE, ERASE, SUBST

21

ХТ

EXCL, SUBST, CHANGE

46

ДДП

MERGE, SUBST, MUL

22

ХТ

ERASE, EXCL, CHANGE

47

ДДП

MERGE, ERASE, CHANGE

23

ДДП

MERGE, CONCAT, ERASE

48

ХТ

MERGE, SUBST, CHANGE

24

ДДП

ERASE, EXCL, MUL

49

ХТ

ERASE, SUBST, CHANGE

25

ХТ

MERGE, ERASE, CHANGE

50

ДДП

MERGE, ERASE, EXCL

3.2. Требования к отчёту


В отчёте по этой теме должно быть обоснование выбора способа дополнения базовой структуры данных для обеспечения возможности выполнения операций с последовательностями. В выводах можно дать заключение, насколько выбор оказался удачным.

3.3. Контрольные вопросы


1. Почему для хранения произвольной последовательности структуру данных для множества (хеш-таблицу или ДДП) приходится дорабатывать?

2. Какие доработки возможны?

3. Можно ли предложить оптимальный вариант доработки?

4. Влияет ли доработка структур данных для множеств для поддержки последовательностей на временную сложность операций над множествами?

5. Какую структуру данных проще дорабатывать — хеш-таблицу или ДДП?

6. Какова оптимальная доработка структуры данных и временная сложность для операции исключения части последовательности между указанными позициями?

7. То же — для операции вставки с указанной позиции?

8. То же — для замены?
1   2   3   4   5   6   7   8


написать администратору сайта