Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
RPUD-PI-Informatika-v30.doc
Скачиваний:
2
Добавлен:
27.08.2019
Размер:
604.67 Кб
Скачать

13. Стек, очередь, очередь с приоритетатами

Упражнение 13.01. [0] Реализовать стек или очередь с использованием массива фиксированной длины.

Упражнение 13.02. [0] Реализовать очередь с приоритетами с использованием массива фиксированной длины.

Упражнение 13.03. [1] Реализовать очередь или стек на списках.

Упражнение 13.04. [1] Смоделировать очередь с использованием двух стеков.

Упражнение 13.05. [1] Смоделировать стек с использованием двух очередей.

Упражнение 13.06. [1] Реализовать очередь с приоритетами с использованием бинарного дерева поиска.

Упражнение 13.07. [2] Дано арифметическое выражение в обратной польской записи. Вычислить с использованием стека.

Упражнение 13.08. [2] Реализовать очередь с вектором приоритетов. Каждому элементу очереди соответствует вектор приоритетов. При вызове pop(), используется параметр что указывает на компоненту вектора. Необходимо выдать элемент наибольшего приоритета по данной компоненте.

14. Списки, хеш-таблицы, сбалансированные деревья.

Пояснение: в задачах про списки, нельзя конвертировать в массивы кроме явно оговоренных случаев.

Упражнение 14.01. [0] Удалить из заданного списка за один проход все подряд идущие повторяющиеся элементы.

Упражнение 14.02. [0] Реализовать операцию "фильтрация по предикату", удаляющую за один проход из списка все элементы не удовлетворяющие ему.

Упражнение 14.03. [0] Дано 2-3-дерево. Напечатать все его элементы из интервала [A, B] без лишнего просмотра.

Упражнение 14.04. [0] Напечатать элементы находящиеся на правой и левой "лапе" бинарного дерева.

Упражнение 14.05. [0] Даны два бинарных дерева поиска. За O(M+N) проверить, содержат ли они в себе одинаковый набор элементов, новые структуры данных заводить нельзя.

Упражнение 14.06. [1] Реализовать структуру данных кольцевой список. Должны присутствовать операции вставки, удаления, поиска элемента.

Упражнение 14.07. [1] Реализовать структуру данных "список списков". Должны присутствовать операции вставки, удаления, поиска как элемента, так и подсписка.

Упражнение 14.08. [1] Реализовать любой из обходов для бинарного дерева. Обходы можно посмотреть тут: http://en.wikipedia.org/wiki/Tree_traversal.

Упражнение 14.09. [1] Расщепить линейный список round-robin методом на N списков.

Упражнение 14.09. [1] Реализовать хеш-таблицу с разрешением коллизий с помощью списков

Упражнение 14.10. [1] Реализовать хеш-таблицу с открытой адресацией.

Упражнение 14.11. [1] Реализовать хеш-таблицу с использованием префиксного дерева

(http://en.wikipedia.org/wiki/Prefix_tree) реализовать функциональность

auto-completion. Считать, что приоритет вариантов зависит от количества

вариантов.

Упражнение 14.12. [1] На вход дано дерево. Задача - глубоко откопировать его. Выберите одно из: B+, красно-черное, АВЛ.

Упражнение 14.13. [1] Даны два бинарных дерева. Проверить, равны ли они. Равными считаются деревья у которых для любой вершины верно что левое и правое поддерево равны двум другим (но могут быть переставлены, это не деревья поиска).

Упражнение 14.14. [2] Напишите программу оценивающую набор хеш-функций. Оцениваем количество коллизий на случайном наборе данных. Рассмотреть распределения: равномерное, нормальное, skewed (взять, например, Zipf). Подумать и о других параметрах.

Упражнение 14.15. [2] Визуализировать дерево (нарисовать). Выберите одно из: B+, красно-черное, АВЛ.

Упражнение 14.16. [2] Реализовать префиксное дерево для хранения количества слов в текстовом файле (http://en.wikipedia.org/wiki/Prefix_tree).

Упражнение 14.17. [2] Написать программу валидации сбалансированного дерева (проверки удовлетворяет ли дерево определению). Выбрать одно из АВЛ, B+, красно-черное.

Упражнение 14.18. [2] Написать программу визуализирующую конечный автомат.

Упражнение 14.19. [2] Дан список, каждый элемент которого содержит значение, указатель на следующий, и указатель на произвольный элемент данного списка. За линейное время клонировать (глубокое копирование) данный список. Исходный должен так же остаться функциональным.

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

Инструкция по выполнению упражнений

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

2. Текст программ должен быть оформлен согласно требованиям модульности и структурного программирования, строго в соответствии со стандартными требованиями оформления кода на языке Java.

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

Код рациональным образом разбит на модули (и пакеты); повторяющиеся последовательности действий организованы в функции и процедуры (методы). Вычислительные алгоритмы отделены от алгоритмов, обеспечивающих человеко-машинный интерфейс. Может быть несколько модулей с вычислительными алгоритмами, также может быть несколько модулей, реализующих функциональность интерфейса.

3. Безопасный стиль программирования тщательно соблюдается. Формат данных и сами данные проверяются на корректность. «Опасные» участки кода заключаются в блоки try-except и try-finally. Сообщения об ошибках выдаются; обеспечивается возможность мониторинга исполнения длительных операций.

4. Пользовательский интерфейс должен быть удобным и дружественным, обеспечивать разумную полноту совершаемых операций. Надписи и заголовки должны быть содержательными; нигде не должно быть «мусора»; визуальные компоненты должны быть расположены на форме аккуратно, систематично, эстетично. Визуальные компоненты должны быть снабжены работающими надписями-подсказками.

В приложении с графическим интерфейсом Форма About должна содержать ФИО разработчика (полностью), номер группы, название факультета и вуза, дату начала работы над приложением, дату его последней модификации, перечень упражнений, их пунктов и подпунктов, которые реализованы/выполнены в приложении. Форма About по усмотрению разработчика и/или по указанию преподавателя может быть пополнена иными сведениями. Должен быть предусмотрен очевидный способ вызова формы About с помощью элемента (элементов) управления главного окна программы.

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

6. Конструктивное общение с преподавателем приветствуется.

7. Перед началом выполнения упражнений требуется прочитать все их формулировки. Рекомендуется выбрать рациональный и удобный для разработчика порядок исполнения заданий.

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

8. Рекомендуется и ожидается интенсивная работа с книгами и электронными файлами.

9. Название главной папки со всеми проектами-упражнениями формируется следующим образом

(Например)

MM-111-2010-SurnameNP-AutumnExrs

MM-112-2010-SurnameNP-AutumnExrs

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

Например:

1(2); 4(1-2-4); 3(1--4) и т.п.

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

Темы сообщений по обсуждению упражнений начинаются

(Например)

MM-111(2010): SurnameNP (Exrs):

MM-112(2010): SurnameNP (Exrs):

Пожалуйста, не забывайте в своей подписи указывать фамилию, имя и отчество полностью.

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

MM111-2010-SurnameNP-AutumnExrs.rar

MM112-2010-SurnameNP-AutumnExrs.rar

и пересылается в сообщении с темой

MM-111-2010-SurnameNP-Exrs-FinalReport

MM-112-2010-SurnameNP-Exrs-FinalReport

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

10. Правила выбора заданий для исполнения.

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

Использование графического интерфейса во всех упражнениях сокращает их необходимое число до 5–6, однако результатом должны быть достаточно «серьезные» программы, позволяющие высоко оценить степень владения студентом языком Java.

При желании, динамические структуры данных и сортировки можно исключить из рассмотрения в осеннем семестре; обычно с ними работают в весеннем семестре.

Выбор упражнений должен быть согласован с преподавателем и утвержден им. Если согласование или утверждение не произошло, считается, что студент планирует выполнить все упражнения, причем не менее 33% из них — на основе построения графического интерфейса пользователя.

11. Сроки сдачи упражнений.

Первая половина упражнений пересылается преподавателю после 5 недель, вторая половина — после 11 недель. В течение двух недель после пересылки упражнений в программы должны быть внесены исправления согласно замечаниям преподавателя.

При нарушении сроков объем задания вырастает по выбору преподавателя на 30–40%. (Что может повлечь сдачу зачета во время экзаменационной сессии, что, в свою очередь, может привести к недопуску к сдаче экзаменов).

12. Общие замечания

Помимо упражнений будут предлагаться Задачи и Задания по лекционному материалу.

Список того, что потребуется сделать, может быть пополнен.

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

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

Преподаватель имеет право внести коррективы в интерпретацию задания разработчиком.

За сохранность своего кода программ и своих данных отвечает исключительно студент.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]