Опубликован: 02.02.2011 | Доступ: свободный | Студентов: 3339 / 950 | Оценка: 4.43 / 3.57 | Длительность: 33:06:00
Специальности: Программист
Лекция 38:

Алгоритмы поиска в линейных структурах

< Лекция 37 || Лекция 38: 12 || Лекция 39 >

Лабораторная работа 37. Алгоритмы поиска в линейных структурах

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

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

Теоретические сведения.

Ознакомьтесь с материалом лекции 37.

Задания к лабораторной работе.

Выполните приведенные ниже задания.

  1. На основании приведенных в лекции 37 функций реализуйте алгоритмы последовательного и бинарного поиска.
  2. В связи с визитом Императора Палпатина было решено обновить состав дроидов в ангаре 32. Из-за кризиса было решено новых дроидов не закупать, но выкинуть пару старых. Как известно, Палпатин не переносит дроидов с маленькими серийными номерами, так что все, что требуется – найти среди них двух, у которых серийные номера наименьшие.

    Формат входного файла

    Первая строка входного файла содержит целое число N – количество дроидов. (2 <= N <= 1000), вторая строка – N целых чисел, по модулю не превышающих 2x109 – номера дроидов.

    Формат выходного файла

    Выведите два числа: первым – последний по величине из номеров дроидов (такого следует утилизировать в первую очередь), а вторым – предпоследний.

    Пример входного файла

    5
    49 100 23 -100 157

    Пример выходного файла

    -100 23

    Пример входного файла

    4
    99 1 5 1

    Пример выходного файла

    1 1
  3. Некто загадал число от 1 до N. За какое наименьшее количество вопросов (на которые он отвечает "да" или "нет") можно угадать задуманное число?

    Формат входных данных

    Вводится одно число N (1 < N < 10001).

    Формат выходных данных

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

    Пример входного файла

    6

    Пример выходного файла

    3
  4. Задана матрица K, содержащая n строк и m столбцов. Седловой точкой этой матрицы назовем элемент, который одновременно является минимумом в своей строке и максимумом в своем столбце. Найдите количество седловых точек заданной матрицы.

    Формат входного файла

    Первая строка входного файла содержит целые числа n и m (1 <= n, m <= 750). Далее следуют n строк по m чисел в каждой. j -ое число i -ой строки равно kij. Все kij по модулю не превосходят 1000.

    Формат выходного файла

    В выходной файл выведите ответ на задачу.

    Пример входного файла

    2 2
    0 0
    0 0

    Пример выходного файла

    4

    Пример входного файла

    2 2
    1 2
    3 4

    Пример выходного файла

    1
  5. Спортсмен Василий участвовал в соревнованиях по хоккейболу и получил в личном зачете серебряную медаль. Известно, что участники, получившие одинаковое количество очков, награждаются одинаковыми наградами. Известно, что были разыграны золотые серебряные и бронзовые медали. В задаче не спрашиваются правила хоккейбола. Необходимо только определить сколько очков набрал Василий. Для решения данной задачи массив лучше не использовать.

    Формат входного файла

    На первой строке дано число N (2 <= N <= 1000) количество спортсменов, участвовавших в соревнованиях, на второй N целых чисел – результаты через пробел.

    Формат выходного файла

    Требуется вывести одно число – результат Василия.

    Пример входного файла

    5
    4 3 3 1 2

    Пример выходного файла

    3

    Пример входного файла

    8
    1 2 5 3 5 1 1 6

    Пример выходного файла

    5

Указания к выполнению работы.

Каждое задание необходимо решить в соответствии с изученным алгоритмами последовательного и бинарного поиска в линейных структурах, реализовав программный код на языке С++. Рекомендуется воспользоваться материалами лекции 37, где подробно рассматриваются описание используемых в работе алгоритмов, примеры их реализации на языке С++. Программу для решения каждого задания необходимо разработать методом процедурной абстракции, используя рекурсивные функции. Этапы сопроводить комментариями в коде. В отчете следует отразить разработку и обоснование математической модели решения задачи. Результаты тестирования программ необходимо провести в соответствии приведенными примерами входных и выходных файлов к задачам (как дополнение допустимы и собственные примеры тестовых данных).

Следует реализовать каждое задание в соответствии с приведенными этапами:

  • изучить словесную постановку задачи, выделив при этом все виды данных;
  • сформулировать математическую постановку задачи;
  • выбрать метод решения задачи, если это необходимо;
  • разработать графическую схему алгоритма;
  • записать разработанный алгоритм на языке С++;
  • разработать контрольный тест к программе;
  • отладить программу;
  • представить отчет по работе.

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

Отчет по лабораторной работе должен соответствовать следующей структуре.

  • Титульный лист.
  • Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
  • Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
  • Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
  • Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
  • Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
  • Выводы по лабораторной работе.
  • Ответы на контрольные вопросы.

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

  1. Чем можно объяснить многообразие алгоритмов поиска в линейных структурах?
  2. В чем преимущества поиска с барьером по сравнению с последовательным поиском?
  3. Нахождение какого по порядку элемента в линейном множестве (первого, последнего) гарантирует алгоритм прямого поиска? Как в этом случае должен быть выполнен просмотр?
  4. Нахождение какого по порядку элемента в линейном множестве (первого, последнего) гарантирует алгоритм бинарного поиска? Ответ обоснуйте.
  5. Как трудоемкость алгоритма бинарного поиска на дискретном множестве зависит от мощности множества?
  6. Почему время выполнения алгоритма бинарного поиска на вещественном множестве не зависит от количества элементов?
< Лекция 37 || Лекция 38: 12 || Лекция 39 >
Денис Курбатов
Денис Курбатов
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!