Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы и структуры данных.doc
Скачиваний:
81
Добавлен:
01.05.2014
Размер:
411.14 Кб
Скачать

Задания для лабораторной работы № 7

  1. Написать программу, реализующую наивный алгоритм и алгоритм с использованием АВЛ-дерева для решения поставленной задачи, основываясь на процедурах INTERSECTION_NAIVE и INTERSECTION_EFFECTIVE.

  2. Модифицировать написанные программы для проведения экспериментов, в которых можно выбирать:

  • число n рассматриваемых отрезков с вещественными координатами концов,

  • способ задания отрезков из числа следующих:

  • автоматический с псевдослучайными координатами концов из квадрата единичной длины,

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

  • непосредственный ввод координат концов отрезков.

Выходом данной программы должно быть время работы Т1 тривиального алгоритма и время работы Т2 нетривиального алгоритма в секундах.

При этом в автоматических способах задания отрезков должна быть предусмотрена возможность ввести число k<n-1 и сделать так, чтобы первые k отрезков не пересекались ни между собой, ни с оставшимися, а отрезки с номерами k+1 и k+2 пересекались между собой.

  1. Провести эксперименты на основе следующих данных:

    1. первый способ задания отрезков, n = 1, … ,104+1 с шагом 100 (нарисовать графики функций T1(n) и T2(n)),

    2. первый способ задания отрезков, n = 104+3, k = 1, … ,104+1 с шагом 100 (нарисовать графики функций T1(k) и T2(k)),

    3. второй способ задания отрезков, r = 0,001, n = 1, …, 104+1 с шагом 100 (нарисовать графики функций T1(n) и T2(n)),

    4. второй способ задания отрезков, r = 0,0001, …, 0,01 с шагом 0,0001, n = 104 (нарисовать графики функций T1(r) и T2(r)).

  2. Сформулировать и обосновать (на основе псевдокодов алгоритмов и практических данных, для получения которых можно провести дополнительные эксперименты) вывод о том, в каких случаях целесообразно применять наивный алгоритм, а в каких - эффективный.

4. Приложение: генерация графов для экспериментов

Нас будет интересовать генерация графа G = (V, E) с n вершинами (множество вершин V = {1, … , n}) и m ребрами (множество ребер E, m=|E|) из двух классов графов: класса ориентированных графов без петель и класса обыкновенных графов. В любом из этих двух случаев задача решается единообразно: первоначально каким-либо образом на множестве Еmax (заметим, что в практическом построении этого множества нет необходимости) всех возможных ребер графа с множеством вершин V = {1, … , n} устанавливается строгий линейный порядок (тем самым обретают смысл понятия следующего и предшествующего ребра) и далее последовательно строятся требуемые m ≤ |Еmax| ребер, каждое ребро e из которых строится следующим образом:

псевдослучайно генерируется ребро e’,

если e’ не было построено ранее, то ребро e=e’ считается построенным,

если e’ уже было построено ранее, то осуществляется поиск первого ребра из следующих после e’ ребер, которое еще не было построено, если такое ребро e’’ существует, то ребро e=e’’ считается построенным, если же такого ребра не существует, то осуществляется поиск первого ребра e’’’ из предшествующих e’ ребер, которое еще не было построено, и ребро e=e’’’ считается построенным.