русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Вычисление линейных рекуррентных соотношений


Дата добавления: 2014-11-28; просмотров: 1230; Нарушение авторских прав


Последовательность называется линейной рекуррентной, если существуют такие коэффициенты , что для любого n справедливо равенство . Для задания линейной рекуррентной последовательности, кроме ее коэффициентов, необходимо знать первые k ее членов, которые называются начальными условиями. Рассмотрим задачу выражения n-го члена последовательности через его номер и начальные условия.

Обозначим через вектор столбец, состоящий из k компонент , через — матрицу размерами вида . По правилу перемножения матриц имеем: . Многократным применением полученной формулы выводим . Задача вычисления n-го члена последовательности свелась, тем самым, к вычислению матрицы .

Характеристический многочлен матрицы А равен . Разделим многочлен на с остатком. Пусть , где - остаток от деления. Подставив вместо λ матрицу А, получим . По теореме Гамильтона-Кэли каждая матрица является корнем своего характеристического уравнения, то есть , где — нулевая матрица. Таким образом, , и задача вычисления свелась к вычислению многочлена r(λ).

Разложим многочлен на линейные множители , где . Для каждого неотрицательного j строго меньшего справедливо равенство , где — j-ая производная характеристического многочлена. Продифференцировав j раз равенство и, подставив в него βi , получим . Этими условиями многочлен r(λ) степени k-1 определяется однозначно. В литературе задача вычисления многочлена по таким условиям носит название «интерполяционный многочлен Лагранжа-Сильвестра».

В качестве примера вычислим n-ый член линейной рекуррентной последовательности , где . Положим . Характеристический многочлен равен . Остаток от деления на удовлетворяет соотношениям и . Единственный многочлен первой степени, удовлетворяющий этим условиям, равен . Таким образом, и .



При получении верхней оценки трудоемкости алгоритма Евклида, потребуется вычислить n-ый член последовательности Фиббоначчи.

Алгоритм Евклида и его варианты

Ниже, для простоты изложения, будем считать, что ищется наибольший общий делитель положительных чисел а и b, причем а≥b. Наибольший делитель чисел а и b обозначим НОД(а,b). Числа а и b записаны в позиционной (сокращенной) системе счисления по основанию р, и длина числа а равна n.

В основе алгоритма Евклида лежит равенство НОД(а,b) = НОД(а-vb,b), справедливое при любом целом v. Выбирая в качестве v частное от деления а на b, получаем алгоритм Евклида.

Описание алгоритма Евклида выглядит следующим образом:

while b<>0 do

Begin

v:=а div b;

а:=а-vb;

с:=а; а:=b; b:=с;

end;

Наибольший общий делитель после работы алгоритма будет находиться в а.

Оценим число итераций алгоритма Евклида. Для этого введем множество , состоящее из пар чисел (а,b), удовлетворяющих условиям: 0<b а и наибольший общий делитель а и b алгоритмом Евклида находится за k итераций. Очевидно, . Индукцией по k покажем существование в множестве такой «наименьшей» пары , что для любой пары (а,b) из выполняются неравенства , . При k=0 и k=1 данное утверждение очевидно, , , , . Пусть утверждение справедливо при k-1. Покажем его справедливость для k. Заметим, что пара принадлежит . Действительно, за одну итерацию алгоритма Евклида мы перейдем к паре из . Пусть пара (а,b) принадлежит и v — частное от деления а на b. За одну итерацию алгоритма Евклида мы перейдем к паре (b,a-vb) из . По предположению индукции выполняется неравенство и . Далее, выводим . Таким образом, пара — «наименьшая» в , утверждение индукции доказано.

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

Выразим k–ый член рекуррентной последовательности . Учитывая неравенство , из последней формулы выводим . Таким образом, число итераций алгоритма Евклида для пары чисел a и b (a>b) не превосходит -1=O(n), где n — длина числа а.

Наиболее трудоемкая операция в процессе выполнения итерации алгоритма Евклида — деление чисел а и b. Если длины чисел а и b равны, то трудоемкость деления O(n). Если длина числа b меньше длины числа а, то на следующей итерации длина числа а строго уменьшится. Из этого замечания вытекает, что наихудший случай, когда длины чисел b и а примерно равны на протяжении всего алгоритма Евклида, и тогда общая трудоемкость алгоритма .

Ситуация принципиально не изменится, если в качестве v выбрать ближайшее целое число к дроби а/b. В этом случае линейная рекуррентная последовательность примет вид , при начальных условиях , . Откуда найдем . Число итераций алгоритма Евклида в этом случае не превосходит 1+ =O(n). Далее, как и ранее, выводим общую трудоемкость алгоритма Евклида .

Тем самым доказана

Теорема. Трудоемкость алгоритма Евклида — .

В некоторых приложениях, кроме отыскания наибольшего общего делителя чисел а и b требуется найти целые u и w, удовлетворяющие равенству аu+bw=НОД(а,b). Для нахождения чисел u и w используется расширенный алгоритм Евклида. Любая итерация алгоритма Евклида может быть представлена как произведение вектора (а,b) на матрицу . Матрица имеет целочисленные элементы. Пусть Т — накопленное произведение этих матриц, то есть Т= , где — частное получаемое на i-ой итерации алгоритма Евклида. По построению Т, имеем (а,b)Т = (НОД(а,b),0). Таким образом, в первом столбце матрицы Т расположены искомые числа u и w.

Отметим, что трудоемкость расширенного алгоритма Евклида равна .



<== предыдущая лекция | следующая лекция ==>
Деление с остатком. Метод итераций. | Бинарный алгоритм.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.807 сек.