СИАОД-1. отправил. Приобретение практических навыков по определению сложности алгоритмов на теоретическом и практическом уровнях
Скачать 427.3 Kb.
|
Цель работыПриобретение практических навыков по определению сложности алгоритмов на теоретическом и практическом уровняхэффективного алгоритма решения задачи из нескольких алгоритмов ЗАДАНИЕ 11.1 Формулировка задачи Выбрать эффективный алгоритм вычислительной задачи из двух предложенных, используя теоретическую и практическую оценку вычислительной сложности каждого из алгоритмов, а также его ёмкостную сложность. Вычислительная задача: дан массив x из n элементов целого типа; удалить из этого массива все значения равные заданному (ключевому) key. 1.2 Модель решения a) Первый алгоритм работает по следующему образу: проходит по массиву чисел слева вправо, если находит значение, которое нужно удалить, происходит сдвиг последующих значений влево, путём замены значения символа на значение правого от него стоящего. Тем самым массив уменьшается и сдвигается влево. Блок - схема для первого алгоритма рис 1. Рисунок 1 – Блок- схема первого алгоритма Второй алгоритм работает по следующему образу: проходит по массиву параллельно присваивая значение элемента массива значение другому элементу в зависимости от счётчика элементов, который указывает на номер элемента, который равен удаляемому числу. Блок-схема для второго алгоритма рис 2. Рисунок 2 – блок схема для второго алгоритма b) Инвариант первого алгоритма можно определить “i<=n”, где n – кол-во элементов массива 1. Инвариант цикла справедлив до работы цикла. 2. Инвариант цикла справедлив после итерации. 3. Инвариант цикла справедлив по завершению цикла. 4.Цикл завершится, когда условие i<=n перестанет выполнятся. Инвариантом второго цикла является “i<=n”, где n – кол-во элементов массива. 1. Инвариант цикла справедлив до работы цикла. 2. Инвариант цикла справедлив после итерации. 3. Инвариант цикла справедлив по завершению цикла. 4.Цикл завершится когда i достигнет значения n-1. c) Определение вычислительной сложности: Алгоритм №1
T1(n)= 1+n+1+n+n=2+3n T2(n)=1+n+1+n+n2+n2+n =2+3n+2n2 Средний случай T(n): 2+3n<=T(n)<=2+3n+2n2 Алгоритм №2
T1(n) = 1+n+1+n+n+1= 3+3n T2(n) = 1+n+1+n+n+n+1=3+4n Средний случай T(n): 3+3n<=T(n)<=3+4n 1.3 Реализация алгоритма в виде функции и его отладка на массиве. Включим в функцию операторы, подсчитывающие число выполненных сравнений (a) и перемещений элементов при удалении (b). Тестирование при n = 10: Тестирование при n = 100: 1.4 Реализовать функции: заполнение массива датчиком случайных чисел, вывод массива на экран монитора. 1.5 Протестировать алгоритм в ситуациях: а) случайное заполнение массива; б) все элементы массива должны быть удалены; в) ни один элемент не удаляется. Сравнить результаты вычислительной сложности этих случаев. a)Тестирование алгоритма, в случае случайного заполнения массива: Количество операций первого алгоритма 30+8=38 Количество операций второго алгоритма 21+10=31 б)Тестирование алгоритма, в случае удаления всех элементов массива: Количество операций первого алгоритма 76+45=121 Количество операций второго алгоритма 21+10=31 в)Тестирование алгоритма, в случае, когда ни один элемент не удаляется: Количество операций первого алгоритма 21+0=21 Количество операций второго алгоритма 21+10=31 Результаты вычислений
ЗАДАНИЕ 2 Постановка задачи Получение матрицы обратной данной матрице Модель решения Создаем двумерный массив и наполняем его значениями. Далее проверяем его, чтобы A[i][j] != A[j][i]. Если же A[i][j] != A[j][i], то увеличиваем счетчик k на единицу. В случае, если после проверки всего массива k = 0, то матрица симметрична, в другом же случае – нет. Рисунок 1 – Блок - схема алгоритма Разработка эффективного алгоритма а) Данный алгоритм прогоняется дважды по массиву, первый раз заполняя его нужными значениями, а второй раз проверяя, является ли элемент i строчки j столбца равным элементу j строчки i столбца. б) Инвариант алгоритма можно определить “i в) 1. Инвариант цикла справедлив до работы цикла. 2. Инвариант цикла справедлив после итерации. 3. Инвариант цикла справедлив по завершению цикла. г) Определение вычислительной сложности:
T1=1+N+1+N2+ N2+1+N+ N2+ N2+ N2+1+1+1+1 = 6+2N+5N2 T2=1+N+1+1+1+1+1=6+N Реализация алгоритма в виде одной функции (без декомпозиции на другие функции). Проведем тестирование алгоритма на матрице размером 10х10 Выполним практическую оценку сложности алгоритма для лучшего и худшего случаев Лучший случай - это размерность матрицы 0x0: Худший случай - это любая размерность матрицы, отличная от 0: Вывод ТЕКСТ |