Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
К практическим занятиям.docx
Скачиваний:
3
Добавлен:
09.08.2019
Размер:
118.89 Кб
Скачать

К практическому занятию № Пример алгоритма декомпозиции. Реализация и сложность алгоритма а.А.Карацубы

Алгоритм А.А.Карацубы позволяет сводить умножение двух n-значных чисел к трем умножениям n/2-значных чисел и нескольким операциям «+», «- » и разрядного сдвига.

Разрядный сдвиг для чисел, записанных в g-ичной системе счисления (g , g>1)-умножение или деление числа на степень g. Приводит к перемещению разрядной точки, приписыванию или отбрасыванию нулей. Разрядный сдвиг является менее затратной операцией по сравнению с умножением (делением) на произвольное число.

Пусть даны два n-значных числа, записанных в g-ичной системе счисления (g , g>1)

A=a a a a a (g), B=b b b b b (g)

Т огда A=(a g +a g + +a g )+ a g + + a = g (a g +a g + +a )+ a g + a g + + a = g A1+A0, где

A1

A0

A1=a a a (g), A0=a a a (g)

Аналогично, B= g B1+B0, где B1=b b b (g) , B0=b b b (g)

Рассмотрим AB=( g A1+A0)(g B1+B0)=A1B1g +(A1B0+A0B1) g + A0B0 (1)

где С=A1B0+A0B1=(A1-A0)(B0-B1)+A1B1+A0B0 (2)

Вычисление AB по формулам (1) и (2) требует:

  1. Трех операций уможения -значных чисел A1B1, A0B0, (A1-A0)(B0-B1);

  2. Шести операций «+» и «-»;

  3. Двух операций разрядного сдвига – умножения на∙g и ∙g .

Оценка эффективности алгоритма

Пусть T(n) - время работы алгоритма при умножении n-значных чисел A и B. (исходная задача размера n).

Количество подзадач a=3. Размер подзадачи n/2, отсюда b=2.

T(n/2) - время работы над одной подзадачей - умножением двух n/2 - значных чисел.

T(1) – время умножения двух однозначных чисел. Можем считать T(1)=c.

d(n) – время «сборки» затрачиваемое на «+», «-» и разрядный сдвиг в формулах (1) и (2).

Количество цифр в числах A1B1, A0B0 и (A1-A0)(B0-B1) равно n-1. Действительно, например, А1В1=(a g +a g + +a ) (b g +b g + +b )= a b g + +a b , следовательно, их сложение и вычитание требует O(n-2)=О(n)kn времени, k=const.

Разрядный сдвиг на n и позиции требует O(n) времени.

Итого d(n)k1n+k2n=(k1+k2)n=kn, k=const

Таким образом, рекуррентное соотношение, оценивающее временную сложность алгоритма А.А. Карацубы имеет вид

. (1)

Упражнение: Определить в терминах О-большое асимптотическую временную сложность алгоритма Карацубы для умножения двух n-значных чисел.

К практическому занятию № Деревья. Обход дерева. Бинарные деревья.

Определение 1: Дерево (ориентированное), ордерево – множество элементов - узлов, один из которых называется корнем, и отношений, образующих иерархическую структуру узлов по правилам:

  1. Пустое множество узлов является деревом.

  2. Один узел является деревом, он является корнем этого дерева.

  3. Пусть n - узел, а Т1, Т2, …,Тk - деревья, с корнями n1, n2,…nk. Если n находится в отношении с n1, n2,…,nk (nродитель узлов n1, n2,…,nk, n1, n2,…,nkсыновья узла n), полученное множество Т с корнем n и поддеревьями Т1, Т2, …,Тk также является деревом. Сыновья одного узла называются братьями.

Определение 2. Ордерево Т={{n}, T1, …, Tk} называется упорядоченным ордеревом, если фиксирован порядок поддеревьев Т1, Т2,..., Тk. В противном случае Т называется неупорядоченным ордеревом.

В упорядоченном ордереве поддеревья Т1,…,Тk изображаются в порядке следования слева направо, сыновья – ниже родителей. Считается, что все узлы поддерева Тi-1 лежат левее любого узла поддерева Тi.

Определение 3. Путем из узла n1 в узел ns называется последовательность улов n1, n2, …, ns, где ni является родителем узла ni+1, . Длиной пути n1, n2, …, ns называется число s-1. Следовательно, путь длины 0 - это путь от n1 к n1 (к самому себе). Если существует путь от узла к узлу , то называется предком узла , а - потомком узла .

Если путь от a к b имеет длину > 0, то называется истинным предком , а называется истинным потомком .

Узел, не имеющий истинных потомков, называется листом дерева.

Высотой узла дерева называется длина самого длинного пути из этого узла, до какого-нибудь, листа дерева. Высотой дерева называется высота его корня. Глубиной узла называется длина пути (он единственный) от корня до этого узла.

Обход дерева – упорядочение всех узлов дерева по некоторому правилу.

Рассмотрим правила обхода дерева в прямом, обратном и симметричном порядке.

  1. Если Т - дерево, состоящее из одного узла n, в список узлов заносится этот узел.

  2. Если Т - дерево с корнем n и поддеревьями Т1, Т2, …, Тk, то:

    1. При обходе в прямом порядке (прямом обходе) сначала посещается (заносится в список) корень n, затем осуществляется обход в прямом порядке всех узлов Т1, затем Т2,...Тk.

    2. При обходе в обратном порядке (обратном обходе) сначала посещаются в обратном порядке все узлы Т1, затем посещаются поддеревья Т2,…Тk, также в обратном порядке. Последним посещается корень n.

    3. При симметричном обходе сначала осуществляется симметричный обход всех узлов Т1, далее корень n, далее в симметричном порядке узлы Т2, Т3,..., Тk.

Определение 4. Бинарное (двоичное) дерево – множество элементов - узлов, один из которых называется корнем, и отношений, образующих иерархическую структуру узлов по правилам:

  1. Пустое множество узлов является бинарным деревом.

  2. Один узел является бинарным деревом, он же является корнем этого дерева.

  3. Пусть n - узел, а Т1, Т2 – бинарные деревья, с корнями n1, n2. Если n находится в отношении с n1, n2 (nродитель узлов n1, n2, n1, n2сыновья узла n, причен n1 определен как левый сын n, а n2 определен как правый сын n), полученное множество Т с корнем n и бинарными поддеревьями Т1, Т2 также является бинарным деревом.

Замечание 1. В бинарном дереве, по определению 4, одно из бинарных поддеревьев Т1, Т2, или оба поддерева, могут быть пустыми бинарными деревьями. То есть узел n может иметь только левого сына n1, или только правого сына n2, или не иметь сыновей.

Замечание 2. Бинарное дерево не является упорядоченным ордеревом. Если в упорядоченном ордереве узел n имеет единственного сына n, то узел n не может быть определен как левый или правый.

Пример.

Деревья Т1 и Т2 как бинарные деревья различны, так как Т1 имеет только левого сына n1, Т2 имеет только правого сына n2. Если же рассматривать Т1 и Т2 как упорядоченные ордеревья в смысле определения 1, то они совпадают и могут быть изображены как Т3.

П редставление упорядоченных ордеревьев бинарными деревьями: от узла n ордерева проводится левая связь к самому левому сыну n1, а от n1правая связь к правому брату n2 и т.д.