Лекція 3. Побудова алгоритмів

3.1 Оценка (подсчет) итераций.

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

При подсчете итераций сумма Лекція 3. Побудова алгоритмів - student2.ru называется арифметической прогрессией и равна Лекція 3. Побудова алгоритмів - student2.ru .

Основным способом вычисления сумм рядов является метод математической индукции (от простого – к сложному). Это метод математического доказательства истинности некоторого утверждения (выражения) от натурального аргумента. Например, если утверждение Лекція 3. Побудова алгоритмів - student2.ru истинно, то истинным должно быть и выражение Лекція 3. Побудова алгоритмів - student2.ru для случая Лекція 3. Побудова алгоритмів - student2.ru итераций. Т.е. Лекція 3. Побудова алгоритмів - student2.ru

Лекція 3. Побудова алгоритмів - student2.ru .

3.2 Элементы комбинаторики и работа со строками.

Чтобы ответить на вопрос "сколько?", не выполняя подсчета, пользуются комбинаторикой.

Например, при построении алгоритмов работы со строками часто преследуют цель поиска некоторой подстроки (подстрок). При этом как правило пользуются формулой вычисления количества размещений с повторениями из Лекція 3. Побудова алгоритмів - student2.ru по Лекція 3. Побудова алгоритмів - student2.ru , где Лекція 3. Побудова алгоритмів - student2.ru – количество различных символов, из которых состоит строке, а Лекція 3. Побудова алгоритмів - student2.ru – количество символов подстроки. Под строкой при этом подразумевается символьная последовательность.

Например, если в некоторой строке фигурируют все 33 буквы украинского алфавита, то количество всех возможных подстрок из Лекція 3. Побудова алгоритмів - student2.ru символов можно вычислить так: Лекція 3. Побудова алгоритмів - student2.ru . Если имеем дело с бинарной строкой, получим выражение Лекція 3. Побудова алгоритмів - student2.ru .

Перестановка. При перестановке элементов строки предполагается, что каждый из символов должен встречаться только 1 раз. Тогда для строки из Лекція 3. Побудова алгоритмів - student2.ru различных символов имеем Лекція 3. Побудова алгоритмів - student2.ru перестановок.

При перестановке Лекція 3. Побудова алгоритмів - student2.ru -подстрок справедливо выражение Лекція 3. Побудова алгоритмів - student2.ru . Например, для строки Лекція 3. Побудова алгоритмів - student2.ru имеем 6 2-перестановок. Когда порядок следования элементов подстрок не важен, пользуются формулой вычисления сочетаний Лекція 3. Побудова алгоритмів - student2.ru . Так для строки Лекція 3. Побудова алгоритмів - student2.ru имеем 3 сочетания 2-элементных подстрок.

Например, при работе с текстом часто приходится находить фрагменты, совпадающие с образцом (для осуществления автозамены). Соответствующие алгоритмы работы со строками принято называть алгоритмами сопоставления строк или StringMatching-алгоритмами.

Постановка задачи поиска подстроки по образцу формализуется следующим образом:

– проверяемый текст представим массивом Лекція 3. Побудова алгоритмів - student2.ru , где Лекція 3. Побудова алгоритмів - student2.ru – длина массива;

– образец (шаблон) – массивом Лекція 3. Побудова алгоритмів - student2.ru , где Лекція 3. Побудова алгоритмів - student2.ru ;

– элементами массивов являются символы конечного алфавита Лекція 3. Побудова алгоритмів - student2.ru . Например, Лекція 3. Побудова алгоритмів - student2.ru или Лекція 3. Побудова алгоритмів - student2.ru ;

Массивы Лекція 3. Побудова алгоритмів - student2.ru и Лекція 3. Побудова алгоритмів - student2.ru называют строками. Лекція 3. Побудова алгоритмів - student2.ru также называют подстрокой.

При решении такой задачи говорят, что образец Лекція 3. Побудова алгоритмів - student2.ru встречается в тексте Лекція 3. Побудова алгоритмів - student2.ru со сдвигом Лекція 3. Побудова алгоритмів - student2.ru или с позиции Лекція 3. Побудова алгоритмів - student2.ru , если

Лекція 3. Побудова алгоритмів - student2.ru и Лекція 3. Побудова алгоритмів - student2.ru . (3.1)

При этом как правило преследуют цель найти все возможные сдвиги, для которых бы выполнялось условие (3.1). Если условие выполняется, сдвиги называют корректными или допустимыми. В противном случае – некорректными или недопустимыми.

Существуют различные алгоритмы решения такой задачи: алгоритм Рабина-Карпа, Кнута-Морриса-Пратта и др. Наиболее простой – наивный алгоритм поиска подстрок:

Лекція 3. Побудова алгоритмів - student2.ru

Вычислительная асимптотическая сложность такого алгоритма составляет Лекція 3. Побудова алгоритмів - student2.ru .

3.3 Построение алгоритмов.

Построение алгоритмов производится в соответствии с выбранной стратегией. В качестве примера рассмотрим алгоритм перемножения матриц, руководствуясь стратегией "разделяй и властвуй", при которой осуществляется декомпозиция (разбиение) задачи на подзадачи.

Пусть имеем две квадратные матрицы размером Лекція 3. Побудова алгоритмів - student2.ruЛекція 3. Побудова алгоритмів - student2.ru и Лекція 3. Побудова алгоритмів - student2.ru , где Лекція 3. Побудова алгоритмів - student2.ru . Тогда элементы искомой матрицы Лекція 3. Побудова алгоритмів - student2.ru вычисляют по следующей формуле: Лекція 3. Побудова алгоритмів - student2.ru .

Псевдокод алгоритма перемножения матриц представляют следующим образом:

Лекція 3. Побудова алгоритмів - student2.ru

По причине того, что каждый из циклов в тройной вложенности циклов for выполняется ровно Лекція 3. Побудова алгоритмів - student2.ru раз, а выполнение строки 6 занимает константное время, асимптотическую вычислительную сложность такой реализации можно представить выражением Лекція 3. Побудова алгоритмів - student2.ru .

Лекція 3. Побудова алгоритмів - student2.ru

Лекція 3. Побудова алгоритмів - student2.ru

Лекція 3. Побудова алгоритмів - student2.ru

Лекція 3. Побудова алгоритмів - student2.ru

Лекція 3. Побудова алгоритмів - student2.ru

Лекція 3. Побудова алгоритмів - student2.ru

Лекція 3. Побудова алгоритмів - student2.ru

Наши рекомендации