Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СТА (лекции+лабы) / СТА Лаба 2.docx
Скачиваний:
52
Добавлен:
16.03.2016
Размер:
93.81 Кб
Скачать

Варианты углубленного уровня

Вариант №11:

Реализуйте структуру и набор стандартных операций АТД “множество” на основе характеристических векторов, однако без ограничения на максимум 32 элемента. Тщательно покройте реализацию тестами. Подсказка: храните установленные флаги в массиве чисел.

Вариант №12:

В ресторане в течение рабочего дня для всех посетителей регистрируется время прихода и ухода в виде пары моментов времени. Некоторые посетители проводят в ресторане больше времени, некоторые меньше. В результате сбора информации, имеется массив из переменных простейшей структуры:

struct CustomerVisitTime {

short m_startHour, m_startMinute; short m_finishHour, m_finishMinute;

};

Требуется вычислить в течение какого из 30-минутных отрезков в сутках в ресторане находилось наибольшее количество одновременных посетителей.

Вариант №13:

В текстовом файле, имя которого передается первым аргументом командной строки, имеются данные о среднем курсе доллара на межбанковской валютной бирже по дням, заданные в следующем формате: 12/11/2012 8.195

16/11/2012 8.218

14/11/2012 8.203

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

Вариант №14:

Реализуйте базовые операции АТД “множество”, не включая теоретико-множественные операции, на основе самоорганизующихся списков. Такой список не является упорядоченным, изначально данные в нем хранятся в соответствии с порядком вставки. Однако при успешном поиске ключа в дальнейшем его следует перемещать в начало списка. Таким образом, после N перестановок будет получен порядок, приблизительно соответствующий типичной частоте поиска ключей, что может существенно улучшить базовый алгоритм линейного поиска. Продемонстрируйте работоспособность решения при помощи тестовой программы. Измерьте выигрыш производительности при частом поиске некоторых ключей по сравнению с базовым алгоритмом линейного поиска.

Вариант №15:

Реализуйте алгоритм сортировки слиянием для упорядочивания последовательности целых чисел, хранящихся в виде односвязного списка (IntegerList).

Варианты амбициозного уровня

Вариант №16:

Имеется текстовый файл, называющийся “references_stats.txt”, содержащий статистику обработанных ссылок на веб-сайты в указанном ниже формате:

www.microsoft.com5402www.oracle.com3715

На вход программы подается файл в формате HTML, имя которого указывается первым аргументом командной строки. Программа находит все ссылки на странице (тег <a>, атрибут “href”), извлекает из ссылок множество уникальных сайтов (не страниц или аргументов запроса!) и обновляет статистический файл. Если файла не существовало, программа создает его. Если файл ранее не содержал такого сайта, запись о сайте и его первой ссылке добавляется. Если сайт уже ранее присутствовал в файле, счетчик ссылок на сайт увеличивается. При анализе HTML-кода следует обработать максимум синтаксически возможных в HTML вариантов записи тега <a> - в теге могут быть другие атрибуты, не только href, между названием атрибута и его значением может быть сколь угодно большое число пробелов, и т.п. небольшие синтаксические нюансы.

Вариант №17:

Реализуйте АТД “множество” для целых чисел на основе компактного хранения отрезков для идущих подряд значений. Например, если некоторые из элементов множества образуют ряд:

{1, 3, 5, 6, 7, 8, 12, 14, 15, 16, 20 }

представляется возможным хранить эти данные в виде отрезков, задающих интервалы:

{1, 3, 5-8, 12, 14-16, 20 }

Если во множество вставляется ключ, который соединяет два соседних отрезка либо отрезок и число в один более длинный отрезок, следует сделать такое преобразование. Например, добавление в приведенное выше множество ключа 13 приведет к следующему изменению:

{1, 3, 5-8, 12-16, 20 }

Аналогично, при удалении отрезки могут быть разорваны. Например, удалив ключ 6, получим:

{1, 3, 5, 7-8, 12-16, 20 }

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

Соседние файлы в папке СТА (лекции+лабы)