Скачать презентацию Алгоритмы и структуры данных Численные алгоритмы Полиномы Скачать презентацию Алгоритмы и структуры данных Численные алгоритмы Полиномы

06 - численные алгоритмы.ppt

  • Количество слайдов: 99

Алгоритмы и структуры данных. Численные алгоритмы. Полиномы Алгоритмы и структуры данных. Численные алгоритмы. Полиномы

Содержание 1. 2. 3. 4. 5. Целочисленные операции Теоретико-числовые алгоритмы Алгоритмы с полиномами Арифметика Содержание 1. 2. 3. 4. 5. Целочисленные операции Теоретико-числовые алгоритмы Алгоритмы с полиномами Арифметика с плавающей точкой Случайные числа

1. 1 Представление целых чисел Позиционная система счисления Представление числа a в системе по 1. 1 Представление целых чисел Позиционная система счисления Представление числа a в системе по основанию b.

1. 2 Реализация отрицательных чисел Несколько подходов к реализации отрицательных чисел: • Прямой код 1. 2 Реализация отрицательных чисел Несколько подходов к реализации отрицательных чисел: • Прямой код – абсолютное значение со знаком • Дополнительный код • Обратный код

1. 2 Реализация отрицательных чисел Прямой код – абсолютное значение со знаком. Первый бит 1. 2 Реализация отрицательных чисел Прямой код – абсолютное значение со знаком. Первый бит отвечает за знак числа. Недостаток: существование 2 -х представлений нуля.

1. 2 Реализация отрицательных чисел Дополнительный код Например: -1 = (99999)10 -1 = (11111111)2 1. 2 Реализация отрицательных чисел Дополнительный код Например: -1 = (99999)10 -1 = (11111111)2 Недостаток: несимметричность относительно нуля,

1. 2 Реализация отрицательных чисел Обратный код Каждый разряд ai модуля отрицательного числа заменяется 1. 2 Реализация отрицательных чисел Обратный код Каждый разряд ai модуля отрицательного числа заменяется на b-1 -ai Пример: -1 = (999998)10 Недостаток: существование 2 -х представлений нуля.

1. 3 Сложение целых чисел 1. 3 Сложение целых чисел

1. 3 Сложение целых чисел 1. 3 Сложение целых чисел

1. 3 Сложение целых чисел 1. 3 Сложение целых чисел

1. 3 Сложение целых чисел 1. 3 Сложение целых чисел

1. 3 Сложение целых чисел 1. 3 Сложение целых чисел

1. 3 Сложение целых чисел 1. 3 Сложение целых чисел

1. 3 Сложение целых чисел 1. 3 Сложение целых чисел

1. 3 Сложение целых чисел 1. 3 Сложение целых чисел

1. 3 Сложение целых чисел Операция двоичного вычитания эквивалентна операции двоичного сложения уменьшаемого с 1. 3 Сложение целых чисел Операция двоичного вычитания эквивалентна операции двоичного сложения уменьшаемого с двоичным дополнением вычитаемого. Двоичное дополнение строится таким образом: все биты числа инвертируются (нули заменяются на единицы, и наоборот), а затем к результату добавляется единица.

1. 3 Сложение целых чисел 1. 3 Сложение целых чисел

1. 3 Сложение целых чисел 1. 3 Сложение целых чисел

1. 3 Сложение целых чисел 1. 3 Сложение целых чисел

1. 4 Умножение целых чисел Если есть два целых числа, которые можно представить в 1. 4 Умножение целых чисел Если есть два целых числа, которые можно представить в виде (um-1, un-2, …, u 1, u 0) (vn-1, vn-2, …, v 1, v 0) Произведение (wn+m-1, wn+m-2, …, w 1, w 0)

1. 4 Умножение целых чисел 1. 4 Умножение целых чисел

1. 4 Умножение целых чисел 1. 4 Умножение целых чисел

1. 4 Умножение целых чисел 1. 4 Умножение целых чисел

1. 4 Умножение целых чисел 1. 4 Умножение целых чисел

1. 4 Умножение целых чисел 1. 4 Умножение целых чисел

1. 4 Умножение целых чисел 1. 4 Умножение целых чисел

1. 4 Умножение целых чисел 1. 4 Умножение целых чисел

1. 4 Умножение целых чисел 1. 4 Умножение целых чисел

1. 4 Умножение целых чисел 1. 4 Умножение целых чисел

1. 4 Умножение целых чисел 1. 4 Умножение целых чисел

1. 4 Умножение целых чисел 1. 4 Умножение целых чисел

1. 4 Умножение целых чисел 1. 4 Умножение целых чисел

1. 4 Умножение целых чисел 1. 4 Умножение целых чисел

1. 4 Умножение целых чисел 1. 4 Умножение целых чисел

1. 5 Деление целых чисел Если есть два целых числа, которые можно представить в 1. 5 Деление целых чисел Если есть два целых числа, которые можно представить в виде (um+n-1, un+m-2, …, u 1, u 0) (vn-1, vn-2, …, v 1, v 0) Деление: вычисление частного и остатка при делении u на v.

1. 5 Деление целых чисел 1. 5 Деление целых чисел

1. 6 Возведение в целую степень Необходимо возвести число x в степень n Тогда 1. 6 Возведение в целую степень Необходимо возвести число x в степень n Тогда

1. 6 Возведение в целую степень Возведение в степень не оптимальный алгоритм Например: n=15 1. 6 Возведение в целую степень Возведение в степень не оптимальный алгоритм Например: n=15 Нужно провести 6 умножений 15=3*5, x^15=(x^3)^5

2. 1 Модулярная арифметика Если (p , …, p ) – взаимно простые 0 2. 1 Модулярная арифметика Если (p , …, p ) – взаимно простые 0 1 k-1 То целое число 0

2. 1 Модулярная арифметика 2. 1 Модулярная арифметика

2. 1 Модулярная арифметика Преимущество модульного представления арифметические операции можно реализовать с меньшими аппаратными 2. 1 Модулярная арифметика Преимущество модульного представления арифметические операции можно реализовать с меньшими аппаратными затратами, чем при обычном представлении, поскольку вычисления выполняются независимо для каждого модуля. В отличие от обычного (позиционного) представления чисел, здесь не нужны никакие переносы. Идея находит применение при рассмотрении полиномов, поскольку делить полиномы скорее всего не потребуется.

2. 2 Наибольший общий делитель • Алгоритм Евклида a и b – целые неотрицательные 2. 2 Наибольший общий делитель • Алгоритм Евклида a и b – целые неотрицательные числа.

2. 2 Наибольший общий делитель • Алгоритм Евклида a и b – целые неотрицательные 2. 2 Наибольший общий делитель • Алгоритм Евклида a и b – целые неотрицательные числа.

2. 2 Наибольший общий делитель • Алгоритм Евклида a и b – целые неотрицательные 2. 2 Наибольший общий делитель • Алгоритм Евклида a и b – целые неотрицательные числа.

2. 2 Наибольший общий делитель • Алгоритм Евклида a и b – целые неотрицательные 2. 2 Наибольший общий делитель • Алгоритм Евклида a и b – целые неотрицательные числа.

2. 2 Наибольший общий делитель • Вариант Эйлера a и b – целые неотрицательные 2. 2 Наибольший общий делитель • Вариант Эйлера a и b – целые неотрицательные числа. Вместо деления с остатком, производить вычитание из большего числа меньшего

2. 2 Наибольший общий делитель • Вариант Эйлера a и b – целые неотрицательные 2. 2 Наибольший общий делитель • Вариант Эйлера a и b – целые неотрицательные числа. Вместо деления с остатком, производить вычитание из большего числа меньшего

2. 3 Умножение целых чисел • Пусть есть два числа • Тогда 2. 3 Умножение целых чисел • Пусть есть два числа • Тогда

2. 3 Умножение целых чисел Сложность стандартного алгоритма O(n^2) Сложность модификации T(2 n)<=3 T(n)+cn 2. 3 Умножение целых чисел Сложность стандартного алгоритма O(n^2) Сложность модификации T(2 n)<=3 T(n)+cn Тогда сложность O(n^lg 3)=O(n^1. 58)

2. 4 Модульное возведение в степень Для целых неотрицательных чисел a, b, n необходимо 2. 4 Модульное возведение в степень Для целых неотрицательных чисел a, b, n необходимо вычислить величину Пусть b

2. 4 Модульное возведение в степень 2. 4 Модульное возведение в степень

2. 4 Модульное возведение в степень 2. 4 Модульное возведение в степень

2. 5 Простые числа Функция распределения простых чисел (prime distribution function) определяется как количество 2. 5 Простые числа Функция распределения простых чисел (prime distribution function) определяется как количество простых чисел, не превышающих числа n. При n = 10^9

2. 5 Простые числа • С помощью теоремы о простых числах вероятность того, что 2. 5 Простые числа • С помощью теоремы о простых числах вероятность того, что случайным образом выбранное число n окажется простым, можно оценить как 1/ln n. • Таким образом, чтобы найти простое число, длина которого совпадает с длиной числа n, понадобится проверить приблизительно In(n) целых чисел, выбрав их случайным образом в окрестности числа n. • Например, чтобы найти 512 -битовое простое число, понадобится перебрать приблизительно ln 2^512 = 355 случайным образом выбранных 512 -битовых чисел, проверяя их простоту. (Ограничившись только нечетными числами, это количество можно уменьшить в два раза. )

2. 5 Простые числа Эта процедура может допускать ошибки, но только одного типа. Если 2. 5 Простые числа Эта процедура может допускать ошибки, но только одного типа. Если процедура говорит, что n — составное, то это всегда верно. Если же она утверждает, что n — простое, то это заключение ошибочно только тогда, когда n — псевдопростое по основанию 2. т. е. 2^(n-1) mod n = 1

2. 5 Решето Эратосфена 2. 5 Решето Эратосфена

2. 5 Решето Эратосфена 2. 5 Решето Эратосфена

2. 5 Решето Эратосфена 2. 5 Решето Эратосфена

2. 5 Решето Эратосфена 2. 5 Решето Эратосфена

2. 5 Решето Эратосфена 2. 5 Решето Эратосфена

2. 5 Решето Эратосфена 2. 5 Решето Эратосфена

2. 6 Целочисленное разложение Постановка задачи. Есть целое число n, Нужно представить его в 2. 6 Целочисленное разложение Постановка задачи. Есть целое число n, Нужно представить его в виде n = p *p *…*p Где p , …, p – простые числа 0 1 0 k 1 k Располагая суперкомпьютерами и наилучшими на сегодняшний день алгоритмами, нереально разложить произвольное 1024 битовое число.

2. 6 Целочисленное разложение 2. 6 Целочисленное разложение

2. 6 Целочисленное разложение Эвристический метод Полларда 2. 6 Целочисленное разложение Эвристический метод Полларда

2. 6 Целочисленное разложение Эвристический метод Полларда 2. 6 Целочисленное разложение Эвристический метод Полларда

2. 6 Целочисленное разложение Эвристический метод Полларда 1387 x y y-x d 1 2 2. 6 Целочисленное разложение Эвристический метод Полларда 1387 x y y-x d 1 2 2 0 0 2 3 3 0 0 3 8 3 5 1 4 63 63 0 0 5 1194 63 1131 1 6 1186 63 1123 1 7 177 63 114 19 8 814 0 0 9 996 814 182 1 10 310 814 504 1 11 396 814 418 1 12 84 814 730 73

3. 1 Представление полиномов Полиномом относительно переменной x называется функция вида 3. 1 Представление полиномов Полиномом относительно переменной x называется функция вида

3. 1 Представление полиномов Представление, основанное на коэффициентах – полином представляется вектором коэффициентов Представление, 3. 1 Представление полиномов Представление, основанное на коэффициентах – полином представляется вектором коэффициентов Представление, основанное на значениях в точках – полином представляется множеством пар

3. 2 Умножение полиномов 3. 2 Умножение полиномов

3. 2 Умножение полиномов Если два полинома заданы расширенными наборами точек То полином C(x)=A(x)*B(x) 3. 2 Умножение полиномов Если два полинома заданы расширенными наборами точек То полином C(x)=A(x)*B(x) можно представить

3. 2 Умножение полиномов Графическое представление эффективной процедуры умножения полиномов. Вверху приводится представление в 3. 2 Умножение полиномов Графическое представление эффективной процедуры умножения полиномов. Вверху приводится представление в коэффициентной форме, а внизу — в форме точек-значений. Идущие слева направо стрелки соответствуют операции умножения. Члены W 2 n являются комплексными корнями степени 2 n из единицы

3. 3 Деление полиномов 3. 3 Деление полиномов

3. 4 Вычисление значений полинома Способ вычисления - напрямую 3. 4 Вычисление значений полинома Способ вычисления - напрямую

3. 4 Вычисление значений полинома Правило Горнера 3. 4 Вычисление значений полинома Правило Горнера

3. 5 Интерполяция – задача о приведении полинома из вида списка значений, в вид 3. 5 Интерполяция – задача о приведении полинома из вида списка значений, в вид список коэффициентов. Полином задан списком значений Чаще всего используется формула Лагранжа

4. 1 Представление рационального числа Два основных представления • С фиксированной точкой; • С 4. 1 Представление рационального числа Два основных представления • С фиксированной точкой; • С плавающей точкой.

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

4. 1 Представление с плавающей точкой Число с плавающей точкой, таким образом, состоит из 4. 1 Представление с плавающей точкой Число с плавающей точкой, таким образом, состоит из двух битовых полей — мантиссы М и порядка Е. Число, представленное двумя такими полями, равно Мх2 Е. 0. 11373325*10^150 = (150, 0. 11373325)

4. 1 Представление с плавающей точкой Число с плавающей точкой считается нормализованным, если старшая 4. 1 Представление с плавающей точкой Число с плавающей точкой считается нормализованным, если старшая цифра в мантиссе отлична от нуля.

4. 1 Представление с плавающей точкой 4. 1 Представление с плавающей точкой

4. 2 Арифметика с плавающей точкой • Сложение двух чисел с плавающей точкой состоит 4. 2 Арифметика с плавающей точкой • Сложение двух чисел с плавающей точкой состоит в денормализации мантисс (совмещении двоичных точек), их сложении и нормализации результата.

4. 2 Арифметика с плавающей точкой Например, сложить два числа (32, 0. 785) и 4. 2 Арифметика с плавающей точкой Например, сложить два числа (32, 0. 785) и (28, 0. 6284) 1. Порядок равен 32 2. Приведем второе число к нужному порядку (32, 0. 00006284) 3. Сложим мантиссы (32, 0. 78506284)

4. 2 Арифметика с плавающей точкой Умножение Перемножить два числа (32, 0. 785) и 4. 2 Арифметика с плавающей точкой Умножение Перемножить два числа (32, 0. 785) и (28, 0. 6284) 1. Перемножить мантиссы 0. 785*0. 6284 = 0. 4932940 2. Сложить порядки 32+28=60

4. 2 Арифметика с плавающей точкой Деление Поделить одно число на другое (32, 0. 4. 2 Арифметика с плавающей точкой Деление Поделить одно число на другое (32, 0. 785) и (28, 0. 628) 1. Поделить мантиссы 0. 785/0. 6284 = 1. 25 2. Вычесть порядки 32 -28=4 3. Провести выравнивание (4, 1. 25) = (5, 0. 125)

4. 3 Проблемы с плавающей арифметикой 1. Потеря знака 2. Невозможность определить – исчезновение 4. 3 Проблемы с плавающей арифметикой 1. Потеря знака 2. Невозможность определить – исчезновение или переполнение порядка 3. Попадание мусора 4. Переполнение при округлении 5. Округление при нормализации 6. Невозможность сохранения точности

4. 4 Точность арифметики с плавающей точкой Необходимо помнить, что все арифметические операции с 4. 4 Точность арифметики с плавающей точкой Необходимо помнить, что все арифметические операции с плавающей точкой являются приближенными. Не исключена ситуация: (U+V)+W <> U+(V+W)

4. 4 Точность арифметики с плавающей точкой double x = 0. 1; for (int 4. 4 Точность арифметики с плавающей точкой double x = 0. 1; for (int i = 0; i < 1000; i++) { sum += x; } 99. 99999986

4. 5 Единица измерения. В современных вычислительных системах – единица производительности – flops (операция 4. 5 Единица измерения. В современных вычислительных системах – единица производительности – flops (операция с плавающей точкой) Производительность системы – количество операций в секунду.

5. 1 Применение случайных чисел 1. 2. 3. 4. 5. 6. Моделирование Выборочный метод 5. 1 Применение случайных чисел 1. 2. 3. 4. 5. 6. Моделирование Выборочный метод Численный анализ Компьютерное программирование Принятие решений Эстетика и развлечения

5. 2 Арифметические методы Метод фон Неймана Следующее случайное число получается возведением в квадрат 5. 2 Арифметические методы Метод фон Неймана Следующее случайное число получается возведением в квадрат и выделением средних цифр. Например: число 5772156649 Возводим в квадрат – 33317792380594909201 Выделяем средние 10 цифр - 7923805949

5. 3 Линейный конгруэнтный метод Выберем 4 числа m>0 – модуль 0<a<m – множитель 5. 3 Линейный конгруэнтный метод Выберем 4 числа m>0 – модуль 0

5. 3 Линейный конгруэнтный метод Рассмотрим последовательность m = 25, a = 12, с 5. 3 Линейный конгруэнтный метод Рассмотрим последовательность m = 25, a = 12, с = 10, x 0 = 5 Тогда x 1 = 20, x 2 = 0, x 3 = 10, x 4 = 5, x 5 = 20, …

5. 3 Линейный конгруэнтный метод Линейная конгруэнтная последовательность, определяемая числами m, a, c, x, 5. 3 Линейный конгруэнтный метод Линейная конгруэнтная последовательность, определяемая числами m, a, c, x, имеет период длиной m тогда и только тогда, когда: 1. Числа c и m – взаимно простые 2. b = a-1 кратно для каждого простого p, являющегося делителем m 3. b кратно 4, если m кратно 4

5. 3 Линейный конгруэнтный метод Рассмотрим последовательность m = 25, a = 11, с 5. 3 Линейный конгруэнтный метод Рассмотрим последовательность m = 25, a = 11, с = 7, x 0 = 5 Тогда x 0 = 5, x 1 = 12, x 2 = 14, x 3 = 11, x 4 = 3, x 5 = 15, x 6 = 22, x 7 = 24, x 8 = 21, x 9 = 13, x 10 = 0, x 11 = 7, x 12 = 9, x 12 = 6, x 14 = 23, x 15 = 10, x 16 = 17, x 17 = 19, x 18 = 16, x 19 = 8, x 20 = 20, x 21 = 2, x 22 = 4, x 23 = 1, x 24 = 18, x 25 = 5

5. 3 Линейный конгруэнтный метод Общие выводы: 1. Начальное значение может быть выбрано любое 5. 3 Линейный конгруэнтный метод Общие выводы: 1. Начальное значение может быть выбрано любое 2. Число m должно быть большим, например 2^30. Лучше по размеру компьютерного слова. 3. Множитель a между 0. 01 m и 0. 99 m. Не должен иметь регулярную структуру. 4. Можно генерировать не более m/1000 чисел, последующие будут вести себя подобным образом. Необходима новая схема.

5. 4 Другие методы Квадратичный конгруэнтный метод Выберем 5 чисел m>0 – модуль 0<d, 5. 4 Другие методы Квадратичный конгруэнтный метод Выберем 5 чисел m>0 – модуль 0

5. 4 Другие методы Квадратичный метод m – степень двойки X 0 mod 4 5. 4 Другие методы Квадратичный метод m – степень двойки X 0 mod 4 = 2 Xn+1 = Xn(Xn + 1) mod m

5. 4 Другие методы Аддитивный генератор m – четное число Xn = (Xn-24 + 5. 4 Другие методы Аддитивный генератор m – четное число Xn = (Xn-24 + Xn-55) mod m X 0, …, X 54 – произвольные целые, не все четные

5. 5 Комбинация генераторов Рандомизация перемешиванием Если есть 2 случайных последовательности X и Y, 5. 5 Комбинация генераторов Рандомизация перемешиванием Если есть 2 случайных последовательности X и Y, можно использовать одну из последовательностей для изменения порядка следования другой.