06 - численные алгоритмы.ppt
- Количество слайдов: 99
Алгоритмы и структуры данных. Численные алгоритмы. Полиномы
Содержание 1. 2. 3. 4. 5. Целочисленные операции Теоретико-числовые алгоритмы Алгоритмы с полиномами Арифметика с плавающей точкой Случайные числа
1. 1 Представление целых чисел Позиционная система счисления Представление числа a в системе по основанию b.
1. 2 Реализация отрицательных чисел Несколько подходов к реализации отрицательных чисел: • Прямой код – абсолютное значение со знаком • Дополнительный код • Обратный код
1. 2 Реализация отрицательных чисел Прямой код – абсолютное значение со знаком. Первый бит отвечает за знак числа. Недостаток: существование 2 -х представлений нуля.
1. 2 Реализация отрицательных чисел Дополнительный код Например: -1 = (99999)10 -1 = (11111111)2 Недостаток: несимметричность относительно нуля,
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. 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. 5 Деление целых чисел Если есть два целых числа, которые можно представить в виде (um+n-1, un+m-2, …, u 1, u 0) (vn-1, vn-2, …, v 1, v 0) Деление: вычисление частного и остатка при делении u на v.
1. 5 Деление целых чисел
1. 6 Возведение в целую степень Необходимо возвести число x в степень n Тогда
1. 6 Возведение в целую степень Возведение в степень не оптимальный алгоритм Например: n=15 Нужно провести 6 умножений 15=3*5, x^15=(x^3)^5
2. 1 Модулярная арифметика Если (p , …, p ) – взаимно простые 0 1 k-1 То целое число 0
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. 3 Умножение целых чисел • Пусть есть два числа • Тогда
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 необходимо вычислить величину Пусть b
2. 4 Модульное возведение в степень
2. 4 Модульное возведение в степень
2. 5 Простые числа Функция распределения простых чисел (prime distribution function) определяется как количество простых чисел, не превышающих числа n. При n = 10^9
2. 5 Простые числа • С помощью теоремы о простых числах вероятность того, что случайным образом выбранное число n окажется простым, можно оценить как 1/ln n. • Таким образом, чтобы найти простое число, длина которого совпадает с длиной числа n, понадобится проверить приблизительно In(n) целых чисел, выбрав их случайным образом в окрестности числа n. • Например, чтобы найти 512 -битовое простое число, понадобится перебрать приблизительно ln 2^512 = 355 случайным образом выбранных 512 -битовых чисел, проверяя их простоту. (Ограничившись только нечетными числами, это количество можно уменьшить в два раза. )
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. 6 Целочисленное разложение Постановка задачи. Есть целое число n, Нужно представить его в виде n = p *p *…*p Где p , …, p – простые числа 0 1 0 k 1 k Располагая суперкомпьютерами и наилучшими на сегодняшний день алгоритмами, нереально разложить произвольное 1024 битовое число.
2. 6 Целочисленное разложение
2. 6 Целочисленное разложение Эвристический метод Полларда
2. 6 Целочисленное разложение Эвристический метод Полларда
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 Представление полиномов Представление, основанное на коэффициентах – полином представляется вектором коэффициентов Представление, основанное на значениях в точках – полином представляется множеством пар
3. 2 Умножение полиномов
3. 2 Умножение полиномов Если два полинома заданы расширенными наборами точек То полином C(x)=A(x)*B(x) можно представить
3. 2 Умножение полиномов Графическое представление эффективной процедуры умножения полиномов. Вверху приводится представление в коэффициентной форме, а внизу — в форме точек-значений. Идущие слева направо стрелки соответствуют операции умножения. Члены W 2 n являются комплексными корнями степени 2 n из единицы
3. 3 Деление полиномов
3. 4 Вычисление значений полинома Способ вычисления - напрямую
3. 4 Вычисление значений полинома Правило Горнера
3. 5 Интерполяция – задача о приведении полинома из вида списка значений, в вид список коэффициентов. Полином задан списком значений Чаще всего используется формула Лагранжа
4. 1 Представление рационального числа Два основных представления • С фиксированной точкой; • С плавающей точкой.
4. 1 Представление с фиксированной точкой Обычное двоичное число, определенное количество его младших разрядов представляет собой дробную часть в позиционной записи.
4. 1 Представление с плавающей точкой Число с плавающей точкой, таким образом, состоит из двух битовых полей — мантиссы М и порядка Е. Число, представленное двумя такими полями, равно Мх2 Е. 0. 11373325*10^150 = (150, 0. 11373325)
4. 1 Представление с плавающей точкой Число с плавающей точкой считается нормализованным, если старшая цифра в мантиссе отлична от нуля.
4. 1 Представление с плавающей точкой
4. 2 Арифметика с плавающей точкой • Сложение двух чисел с плавающей точкой состоит в денормализации мантисс (совмещении двоичных точек), их сложении и нормализации результата.
4. 2 Арифметика с плавающей точкой Например, сложить два числа (32, 0. 785) и (28, 0. 6284) 1. Порядок равен 32 2. Приведем второе число к нужному порядку (32, 0. 00006284) 3. Сложим мантиссы (32, 0. 78506284)
4. 2 Арифметика с плавающей точкой Умножение Перемножить два числа (32, 0. 785) и (28, 0. 6284) 1. Перемножить мантиссы 0. 785*0. 6284 = 0. 4932940 2. Сложить порядки 32+28=60
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. Невозможность определить – исчезновение или переполнение порядка 3. Попадание мусора 4. Переполнение при округлении 5. Округление при нормализации 6. Невозможность сохранения точности
4. 4 Точность арифметики с плавающей точкой Необходимо помнить, что все арифметические операции с плавающей точкой являются приближенными. Не исключена ситуация: (U+V)+W <> U+(V+W)
4. 4 Точность арифметики с плавающей точкой double x = 0. 1; for (int i = 0; i < 1000; i++) { sum += x; } 99. 99999986
4. 5 Единица измерения. В современных вычислительных системах – единица производительности – flops (операция с плавающей точкой) Производительность системы – количество операций в секунду.
5. 1 Применение случайных чисел 1. 2. 3. 4. 5. 6. Моделирование Выборочный метод Численный анализ Компьютерное программирование Принятие решений Эстетика и развлечения
5. 2 Арифметические методы Метод фон Неймана Следующее случайное число получается возведением в квадрат и выделением средних цифр. Например: число 5772156649 Возводим в квадрат – 33317792380594909201 Выделяем средние 10 цифр - 7923805949
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, имеет период длиной m тогда и только тогда, когда: 1. Числа c и m – взаимно простые 2. b = a-1 кратно для каждого простого p, являющегося делителем m 3. b кратно 4, если m кратно 4
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. Начальное значение может быть выбрано любое 2. Число m должно быть большим, например 2^30. Лучше по размеру компьютерного слова. 3. Множитель a между 0. 01 m и 0. 99 m. Не должен иметь регулярную структуру. 4. Можно генерировать не более m/1000 чисел, последующие будут вести себя подобным образом. Необходима новая схема.
5. 4 Другие методы Квадратичный конгруэнтный метод Выберем 5 чисел m>0 – модуль 0
5. 4 Другие методы Квадратичный метод m – степень двойки X 0 mod 4 = 2 Xn+1 = Xn(Xn + 1) mod m
5. 4 Другие методы Аддитивный генератор m – четное число Xn = (Xn-24 + Xn-55) mod m X 0, …, X 54 – произвольные целые, не все четные
5. 5 Комбинация генераторов Рандомизация перемешиванием Если есть 2 случайных последовательности X и Y, можно использовать одну из последовательностей для изменения порядка следования другой.



