У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 11.1

Работа добавлена на сайт samzan.net: 2016-03-13

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 4.3.2025

Лабораторная работа №1.

Исследование алгоритмов поиска в массивах.

 

Теоретическая часть.

  1.  Линейный поиск.

При решении многих задач возникает необходимость определить, содержит ли массив определенную информацию или нет. Задачи такого типа называются поиском в массиве.

Для организации поиска в массиве могут быть использованы различные алгоритмы. Наиболее простой — это алгоритм простого перебора (линейного поиска). Поиск осуществляется последовательным сравнением элементов массива с образцом до тех пор, пока не будет найден элемент, равный образцу, или не будут проверены все элементы. Алгоритм простого перебора применяется, если элементы массива не упорядочены.

Для списка из n элементов лучшим случаем будет тот, при котором искомое значение равно первому элементу списка и требуется только одно сравнение. Худший случай будет тогда, когда значения в списке нет (или оно находится в самом конце списка), в случае чего необходимо n сравнений.

Если искомое значение входит в список k раз и все вхождения равновероятны, то ожидаемое число сравнений

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

(для n = 2 это число равняется 1, что соответствует одной конструкции if-then-else).

В любом случае, вычислительная сложность алгоритма O(n).

Пример реализации алгоритма линейного поиска

int LinearSearch (int *array, size_t arraySize, int key)
{
  for (size_t i = 0; i < arraySize; i++)
      if (array[i] == key)
        return array[i];
  // если ничего не нашли
  return -1;
}

  1.  Бинарный поиск.

Общая стратегия бинарного поиска.

Если данные отсортированы по неубыванию ключа, а поиск осуществляется на отрезке [first..last] массива а, то, сравнив искомое значение х с а[mid], где mid = first + (last - first)/2, можно сделать вывод: в левой или правой части от mid находится искомое значение. С помощью одной проверки, размер области поиска уменьшается в два раза и следовательно, размер области поиска достигнет минимального значения (длина отрезка [first..last] равна 1) через  шагов, где n - первоначальный размер области поиска. Сложность алгоритма составляет О(log N), где Nколичество элементов в массиве.

Пример реализации алгоритма бинарного поиска

   size_t first = 0;

   size_t last = n;

   size_t mid;

   while (first < last)

   {

       mid = first + (last - first) / 2;

       if (x <= a[mid])

           last = mid;

       else

           first = mid + 1;

   }

 

   if (last<n && a[last] == x)

   {

       // Искомый элемент найден. last - искомый индекс

   } else {

       // Искомый элемент не найден

   }

  1.  Анализ времени выполнения алгоритмов.

Рассмотрим скорость выполнения каждого из представленных алгоритмов для массивов размерностью от 101 до 106. Так как вычислительная сложность линейного поиска составляет O(N), то и время его выполнения будет расти как N. В случае же бинарного поиска при сложности O(log N) время выполнения будет расти логарифмически и в случае массива размерностью 106 в то время как алгоритм линейного поиска будет исполняться 106 раз, бинарный поиск потребует

log2106=6*log210= 6*3.3213≈20

проходов цикла (выполнений алгоритма поиска).


Задание на лабораторную работу:

 Изучить основные методы поиска в массивах, сравнить сложность линейного и бинарного поиска, сделать вывод о времени работы алгоритмов при размерах массива N>106. Построить UML-диаграммы составленных алгоритмов. Графически представить зависимость асимптотической сложности алгоритмов от длины массива.

  1.  Реализовать алгоритм линейного поиска в целочисленном массиве по заданному ключу.
  2.  Реализовать алгоритм бинарного поиска в целочисленном массиве по заданному ключу.




1. Лабораторная работа 23 Тема- Динамическое создание кнопок в среде Develop и Visul Studio Цель- Изучить технол
2. правового регулирования общественных отношений
3. Основные понятия и определения- номинальный размер предельные размеры предельные отклонения допуск поса
4. Анатомия центральной нервной системы Строение оболочек головного и спинного мозга и пространств м
5. 35 реферат дисертації на здобуття наукового ступеня кандидата економічних наук Київ
6.  Назревание общенационального кризиса
7. Методические рекомендации в помощь студентупрактиканту специальности 050146 Преподавание в начальных кла
8. Эстетика сюрреализма
9. 20г. Федеральное государственное автономное образовательное учреждение высшего профессио.html
10. Сварка латун