Список алгоритмов
Список статей для координации работ по развитию темы. |
Нижеследующее — это список алгоритмов. Также смотрите список структур данных, список основных разделов теории алгоритмов и список терминов, относящихся к алгоритмам и структурам данных.
Если Вы планируете добавить какой-либо алгоритм в этот список, убедитесь, пожалуйста, что его здесь ещё нет (возможно, алгоритм упоминается под каким-либо альтернативным названием). Внимательно посмотрите, к какой именно категории относится данный алгоритм. В случае, когда из названия не ясно, что именно делает алгоритм, напишите, пожалуйста, краткое описание.
Если Вы планируете написать статью про один из алгоритмов, упомянутых в этом списке, пожалуйста, прочитайте сначала руководство шаблон не поддерживает такой синтаксис или посмотрите несколько уже написанных статей, посвящённых алгоритмам.
Комбинаторные алгоритмыПравить
Алгоритмы сжатия данныхПравить
Алгоритмы сжатия без потерьПравить
- Преобразование Барроуза-Уилера (также известен как англ. BWT) — предварительная обработка данных для улучшения сжатия без потерь
- Преобразование Шиндлера (англ. ST) — модификация преобразования Барроуза-Уилера
- шаблон не поддерживает такой синтаксис
- Дельта-кодирование — эффективно для сжатия данных, в которых последовательности часто повторяются
- Инкрементное кодирование — дельта-кодирование применяемое к последовательности строк
- Семейство алгоритмов словарного сжатия Лемпеля-Зива:
- Алгоритм сжатия PPM
- Кодирование длин серий (Групповое кодирование, также известен как англ. RLE) — последовательная серия одинаковых элементов заменяется на два символа: элемент и число его повторений
- шаблон не поддерживает такой синтаксис— сжатие без потерь, автоматическое адаптивное построение контекстно-свободной грамматики для обрабатываемых данных
- шаблон не поддерживает такой синтаксис (EZW-кодирование)
- Энтропийное кодирование — схема кодирования, которая присваивает коды символам таким образом, чтобы соотнести длину кодов с вероятностью появления символов
- Кодирование Шеннона-Фано — самый простой алгоритм кодирования
- Алгоритм Хаффмана — алгоритм построения кода при помощи кодовых деревьев
- шаблон не поддерживает такой синтаксис — техника адаптивного кодирования, основывающая на коде Хаффмана
- шаблон не поддерживает такой синтаксис — используется для однородного вероятностного распределения с конечным алфавитом
- Арифметическое кодирование — развитие энтропийного кодирования
- шаблон не поддерживает такой синтаксис — метод сжатия данных, который близок по эффективности к арифметическому кодированию
- Энтропийное кодирование с известными характеристиками
- Унарное кодирование — код, который представляет число n в виде n единиц с замыкающим нулём
- дельта|гамма|омега-кодирование Элиаса (англ. Elias coding) — универсальный код, кодирующий положительные целые числа
- шаблон не поддерживает такой синтаксис— универсальный код, который кодирует положительные целые числа в двоичные кодовые слова
- Кодирование Голомба — форма энтропийного кодирования, которая оптимальна для алфавитов с геометрическим распределением
- шаблон не поддерживает такой синтаксис— форма энтропийного кодирования, которая оптимальна для алфавитов с геометрическим распределением
Алгоритмы сжатия с потерямиПравить
- шаблон не поддерживает такой синтаксис— сжатие с потерями, представляющее спектральную огибающую цифрового сигнала речи в сжатом виде
- А-закон — стандартный алгоритм компандирования
- Мю-закон — стандартный алгоритм компандирования
- Фрактальное сжатие — метод, использующий фракталы для сжатия изображений
- шаблон не поддерживает такой синтаксис — тип сжатия данных для «естественных» данных, таких как аудио-сигналы или фотографические изображения
- шаблон не поддерживает такой синтаксис— техника, часто используемая в сжатии данных с потерями
- Вейвлетное сжатие — тип компрессии данных хорошо подходящий для сжатия изображений (иногда также используется для сжатия видео и аудио)
Вычислительная геометрияПравить
- шаблон не поддерживает такой синтаксис— определение выпуклой оболочки набора точек
- шаблон не поддерживает такой синтаксис— определение наименьшего расстояния между двумя выпуклыми фигурами
- шаблон не поддерживает такой синтаксис — определение выпуклой оболочки набора точек на плоскости
- Алгоритм точки в многоугольнике — проверка принадлежности данной точки данному многоугольнику
Компьютерная графикаПравить
- Алгоритм Брезенхэма — растеризует отрезок линии с заданными координатами начала и конца
- шаблон не поддерживает такой синтаксис — алгоритм для аппроксимации отрезка на дискретной графической поверхности
- Алгоритм DDA-линии — чертит точки двухмерного массива в форме прямой линии между двумя заданными точками (использует вычисления с плавающей точкой)
- шаблон не поддерживает такой синтаксис— заливает соединённый регион многомерного массива указанным значением
- шаблон не поддерживает такой синтаксис — алгоритм для сглаживания прямой
- шаблон не поддерживает такой синтаксис — определяет видимые части 3-хмерной сцены
- шаблон не поддерживает такой синтаксис— рендеринг реалистичных изображений
- Затемнение Фонга — модель освещения и метод интерполяции в трёхмерной компьютерной графике
- шаблон не поддерживает такой синтаксис— алгоритм моделирования различных эффектов света и цвета на поверхности объекта в трёхмерной компьютерной графике
- шаблон не поддерживает такой синтаксис (англ. Scanline rendering) — конструирует образ с помощью перемещения воображаемой линии над образом
- шаблон не поддерживает такой синтаксис— рассматривает прямое освещение и отражение от других объектов
- Алгоритмы интерполяции — конструирование новых точек данных, таких как в цифровом увеличителе
- шаблон не поддерживает такой синтаксис— уменьшение ошибки с помощью шаблон не поддерживает такой синтаксис
Компьютерное зрениеПравить
- шаблон не поддерживает такой синтаксис— представление образа или видео при помощи меньшего образа или видео
Криптографические алгоритмыПравить
(Смотри также Разделы в криптографии для 'аналитического глоссария')
- Шифрование с симметричным (скрытым) ключом:
- ГОСТ 28147-89
- шаблон не поддерживает такой синтаксис (англ. Advanced Encryption Standard) — победитель соревнования NIST, также известен как Rijndael
- Blowfish
- DES (англ. Data Encryption Standard) — иногда, алгоритм DEA (англ. Data Encryption Algorithm), победитель соревнования NBS, заменён на AES для большинства применений
- RC2
- шаблон не поддерживает такой синтаксис (англ. International Data Encryption Algorithm)
- RC4
- Алгоритмы выработки общего ключа
- Алгоритмы цифровой подписи:
- ГОСТ Р 34.10-94 — устаревший российский стандарт цифровой подписи, модификация схемы Эль Гамаля
- ГОСТ Р 34.10-2001 — российский стандарт цифровой подписи, основанный на эллиптических кривых
- шаблон не поддерживает такой синтаксис (англ. Digital Signature Algorithm)
- Алгоритмы разделения секрета
- Рюкзак — на данный момент доказана нестойкость схемы
- Схема Шамира
- Схема Blakey
- Алгоритмы подбрасывания монеты по телефону
- Криптографические функции дайджестов сообщений:
- MD5 — существует метод генерации коллизий
- шаблон не поддерживает такой синтаксис
- SHA-1
- HMAC — аутентификация сообщение с помощью хеш-ключа
- шаблон не поддерживает такой синтаксис (TTH) — обычно используется в Тигровых деревьях хэшей
- Криптографически надёжные генераторы псевдослучайных чисел
- Алгоритм Блюма, Блюма и Шуба — базируется на сложности факторизации
- шаблон не поддерживает такой синтаксис
- ГПСЧ Фортуна[англ.]— якобы улучшение алгоритма Ярроу
Цифровая обработка сигналовПравить
- CORDIC — быстрая техника вычисления тригонометрических функций.
- шаблон не поддерживает такой синтаксис— Уменьшает комплексную историю давлений в расчёте элементарных противодействий для использования в анализе усталости
- Osem — алгоритм для обработки медицинских изображений
- шаблон не поддерживает такой синтаксис— Может быть использован для декодирования цифр тональных сигналов
- шаблон не поддерживает такой синтаксис— алгоритм увеличения резкости образа
Разработка ПОПравить
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис— Преобразование между системами адресации диска
- шаблон не поддерживает такой синтаксис (CRC)— вычисление кода проверки
- Чётность — Проверка четности количества единиц в двоичной записи числа. Позволяет обнаруживать ошибку в одном разряде.
- Алгоритм соединения (СУБД) — реализация операции соединения реляционной алгебры.
Алгоритмы распределённых системПравить
- шаблон не поддерживает такой синтаксис— Частичное упорядочение событий в зависимости от того, что случилось раньше
- шаблон не поддерживает такой синтаксис — снимок процесса записывающий глобальное состояние системы
- шаблон не поддерживает такой синтаксис— Полное упорядочение событий
- шаблон не поддерживает такой синтаксис — распределённая синхронизация часов
- шаблон не поддерживает такой синтаксис — другой алгоритм синхронизации часов
Алгоритмы выделения и освобождения памятиПравить
- шаблон не поддерживает такой синтаксис— «скромный» сборщик мусора
- шаблон не поддерживает такой синтаксис— алгоритм выделения памяти таким образом, чтобы фрагментация была наименьшей.
- шаблон не поддерживает такой синтаксис— Быстрые сборщики мусора, которые разделяют память по возрасту
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
Алгоритмы в операционных системахПравить
- шаблон не поддерживает такой синтаксис— Алгоритм, использующийся для избежания взаимных блокировок
- шаблон не поддерживает такой синтаксис— выбор страницы-жертвы при условиях небольшого объёма памяти
- шаблон не поддерживает такой синтаксис— выбор нового лидера среди множества компьютеров
- rsync — алгоритм, использующийся для эффективной передачи файлов между двумя компьютерами
Дисковые алгоритмы-планировщики:
- шаблон не поддерживает такой синтаксис— дисковый алгоритм планирования, который работает как лифт
- шаблон не поддерживает такой синтаксис— дисковый алгоритм планирования для уменьшения времени поиска
Алгоритмы синхронизации процессов:
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис (англ. Multi level feedback queue)
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис (англ. List scheduling)
Генетические алгоритмыПравить
- шаблон не поддерживает такой синтаксис — также известен как выбор рулеточного колеса
Медицинские алгоритмыПравить
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
Нейронные сетиПравить
- шаблон не поддерживает такой синтаксис
- Самоорганизующееся отображение (Карты Кохонена, SOM)
Вычислительная алгебраПравить
- шаблон не поддерживает такой синтаксис— находит базис Грёбнера
- шаблон не поддерживает такой синтаксис — ортогонализация набора векторов
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис — для многочленов в некоторых неопределённостях
- Алгоритмы умножения матриц
- Алгоритм Штрассена — быстрое умножение матриц
- Алгоритм Копперсмита—Винограда
- шаблон не поддерживает такой синтаксис (англ. Chain matrix multiplication)
- Алгоритмы вычисления дискретного преобразования Фурье
- Быстрое преобразование Фурье
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- Преобразования Хаусхолдера (QR — разложение) — вычисление обратной матрицы, собственный векторов и собственных значений матрицы; используется также для решения систем линейных уравнений.
- Решение систем линейных уравнений
- Метод Гаусса (Гауссово исключение) — стандартный метод решения систем линейных уравнений
- Структурированное гауссово исключение — применяется, когда матрица системы является разреженной
- Метод Жордана — Гаусса — модификация метода Гаусса
- Преобразования Холеского — метод, эффективный для ленточных и разреженных матриц
- Метод Пранис-Праневича — решение систем линейных уравнений с параллельными вычислениями по компонентам
Теоретико-числовые алгоритмыПравить
- Целочисленная арифметика (алгоритмы для работы с большими числами)
- Умножение столбиком больших чисел
- "Быстрый столбик"
- Алгоритм Карацубы — алгоритм быстрого умножения чисел
- Деление на одноразрядное число (DO)
- Деление больших чисел
- шаблон не поддерживает такой синтаксис —вычисляет степени чисел при помощи возведения в квадрат
- Алгоритмы модулярной арифметики
- Алгоритм Монтгомери — модулярное умножение и возведение в степень
- Алгоритм нахождения порядка элемента
- Алгоритм Тонелли-Шенкса — решение квадратичных сравнений
- Решение систем линейных сравнений
- Решение систем линейных уравнений над полем
- Алгоритм Ланцоша — эффективен над полем характеристики 2
- Алгоритм Видемана
- Дискретное логарифмирование:
- В простом конечном поле
- шаблон не поддерживает такой синтаксис (алгоритм больших и маленьких шагов, англ. baby-step giant-step)
- шаблон не поддерживает такой синтаксис — эффективен, если все делители p-1 — небольшие
- шаблон не поддерживает такой синтаксис
- Алгоритм Адлемана — первый субэкспоненциальный алгоритм дискретного логарифмирования
- Алгоритм COS (алгоритм Копперсмита, Одлыжко, Шреппеля) — достаточно эффективный субэкспоненциальный алгоритм
- Решето числового поля — наиболее эффективный на данный момент алгоритм дискретного логарифмирования
- В произвольном конечном поле
- шаблон не поддерживает такой синтаксис (алгоритм index-calculus) — сведение дискретного логарифмирования в произвольном конечном поле к аналогичной задаче в простом поле
- Алгоритм Копперсмита — эффективный алгоритм дискретного логарифмирования в конечном поле характеристики 2
- В простом конечном поле
- Алгоритмы нахождения наибольшего общего делителя (НОД) двух чисел
- Алгоритм Евклида
- шаблон не поддерживает такой синтаксис— также решает уравнение ax+by = c, где c=НОД(a, b), НОД(a, y)=НОД(b, x)=1
- шаблон не поддерживает такой синтаксис — эффективный способ вычисления НОД
- Расширенный бинарный алгоритм — модификация бинарного алгоритма нахождения НОД, аналогичная расширенному алгоритму Евклида
- Тесты простоты — проверка, является ли данное число простым
- Детерминированные тесты простоты
- Решето Эратосфена
- Решето Аткина — оптимизированная версия решета Эратосфена
- Тест на основе малой теоремы Ферма
- Тест Миллера — модификация теста на основе малой теоремы Ферма; опирается на расширенную гипотезу Римана
- (N-1) –метод проверки простоты — тест на простоту при известном разложении на множители числа N-1; также используется для построения больших простых чисел
- (N+1) –метод проверки простоты — тест на простоту при известном разложении на множители числа N+1
- Алгоритм Конягина-Померанса — модификация (N-1)-метода
- Алгоритм Ленстры — использует суммы Якоби и некоторые тесты, обобщающие малую теорему Ферма
- Тест Люка-Лемера для чисел Мерсенна
- Тест Пепина для чисел Ферма
- шаблон не поддерживает такой синтаксис (тест Агравала, Кайала, Саксены) — полиномиальный детерминированный тест на простоту
- Вероятностные тесты простоты
- Тест Соловея-Штрассена — опирается на малую теорему Ферма и свойства символа Лежандра
- Тест Миллера—Рабина — эффективная модификация теста Соловея-Штрассена
- Детерминированные тесты простоты
- Факторизация — разложение числа на множители
- Алгоритмы с экспоненциальной сложностью
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- ρ-метод Полларда
- Алгоритм Шермана-Лемана
- Алгоритм Ленстры
- Алгоритмы с субэкспоненциальной сложностью
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис (англ. SNFS)
- шаблон не поддерживает такой синтаксис (англ. GNFS)
- шаблон не поддерживает такой синтаксис — вероятностный алгоритм факторизации с помощью эллиптических кривых
- Алгоритмы с экспоненциальной сложностью
- Алгоритм Шуфа — вычисление порядка группы точек эллиптической кривой
- LLL-алгоритм — факторизация многочленов над полем
Численные алгоритмыПравить
Смотри также Список разделов численного анализа
- шаблон не поддерживает такой синтаксис — вычисление кривых Безье
- Приближенное вычисление решений
- шаблон не поддерживает такой синтаксис (False position method, regula falsi method) — аппроксимирует корни функции
- шаблон не поддерживает такой синтаксис (метод касательных) — нахождение нулей функций с помощью производной
- шаблон не поддерживает такой синтаксис — аппроксимирует корни функции
- шаблон не поддерживает такой синтаксис — аппроксимирует решение системы уравнений
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис — алгоритм для решения нелинейных уравнений методом наименьших квадратов
- шаблон не поддерживает такой синтаксис— алгоритм для решения нелинейных уравнений методом наименьших квадратов
- Нахождение минимума функции
- Градиентный спуск
- шаблон не поддерживает такой синтаксис — для функции нескольких переменных
- шаблон не поддерживает такой синтаксис — нахождение всех решений задачи точного покрытия
- шаблон не поддерживает такой синтаксис — вычисление сплайнов
- шаблон не поддерживает такой синтаксис — вычисление цифр числа пи
- шаблон не поддерживает такой синтаксис — более аккуратный метод суммирования чисел с плавающей точкой
- шаблон не поддерживает такой синтаксис — моделирование методом Монте-Карло, численное интегрирование
- шаблон не поддерживает такой синтаксис — классические способы округления чисел
- шаблон не поддерживает такой синтаксис — извлечение корня цифра за цифрой
- Вычисление квадратного корня:
- Алгоритм Герона
- школьный (ручной) алгоритм — аппроксимирует квадратный корень числа
- шаблон не поддерживает такой синтаксис
Алгоритмы оптимизацииПравить
- Линейное программирование
- шаблон не поддерживает такой синтаксис
- «Венгерский метод» — решение задач целочисленного линейного программирования
- Метод Мака решения задачи о назначениях
- Алгоритм имитации отжига
- шаблон не поддерживает такой синтаксис
- Муравьиные алгоритмы
- шаблон не поддерживает такой синтаксис — алгоритм нелинейной оптимизации
- Метод ветвей и границ
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис (downhill simplex method) — алгоритм нелинейной оптимизации
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
- шаблон не поддерживает такой синтаксис
Грамматический разборПравить
- Рекурсивный нисходящий парсер — Нисходящий парсер, подходящий для LL(k) грамматик
- шаблон не поддерживает такой синтаксис— Относительно простой алгоритм разбора за линейное время для ограниченного класса контекстно-свободных грамматик
- шаблон не поддерживает такой синтаксис — Более сложный алгоритм разбора за линейное время для большего класса контекстно-свободных грамматик.Варианты:
- шаблон не поддерживает такой синтаксис — Алгоритм разбора за линейное время поддерживающий некоторые контекстно-свободные грамматики и грамматики разбора выражений
- шаблон не поддерживает такой синтаксис — O(n³)-алгоритм для разбора любой контекстно-свободной грамматики
- шаблон не поддерживает такой синтаксис — Другой O(n³)-алгоритм для разбора любой контекстно-свободной грамматики
- шаблон не поддерживает такой синтаксис — алгоритм для разбора любой контекстно-свободной грамматики, он предназначен для определённых грамматик, на которых он действует практически за линейное время и O(n³) в худшем случае.
- Метод рекурсивного спуска — это один из методов определения принадлежности входной строки к некоторому формальному языку, описанному контекстно-свободной грамматикой
- Алгоритм Рутисхаузера — работает в предположении о полной скобочной структуре выражения
Квантовые алгоритмыПравить
Приложения квантовых вычислений к различным категориям проблем и алгоритмы
- Алгоритм Гровера — позволяет выполнять поиск среди
вариантов за проверок - Алгоритм Шора — полиномиальный алгоритм факторизации числа
- Алгоритм Дойча — Джоза — критерий баланса для булевой функции
- Задача Фейнмана
Теория вычислений и автоматовПравить
- шаблон не поддерживает такой синтаксис— алгоритм для преобразования недетерминированного автомата в детерминированный
- шаблон не поддерживает такой синтаксис— процедура для создания сомножеств
ДругиеПравить
- Астрономические алгоритмы
- шаблон не поддерживает такой синтаксис
- Алгоритмы манипуляции битами
- Алгоритм создания битовой маски
- Алгоритм обмена при помощи исключающего ИЛИ — обмен значений двух переменных без использования буфера
- Алгоритм дня страшного суда — вычисление дня недели
- шаблон не поддерживает такой синтаксис
- Алгоритм Витерби
- Алгоритм Луна — метод проверки правильности идентификационных чисел
ЛитератураПравить
- Ахо, Альфред, В., Хопкрофт, Джон, Ульман, Джеффри, Д. Структуры данных и алгоритмы. — Издательский дом "Вильямс", 2000. — С. 384. — ISBN 5-8459-0122-7 (рус.) / ISBN 0-201-00023-7 (англ.).
- Василенко О.Н. Теоретико-числовые алгоритмы в криптографии. — Москва: МЦМНО, 2003. — С. 328. — ISBN 5-94057-103-4.
- Дональд Кнут. Искусство программирования, том 1. Основные алгоритмы = The Art of Computer Programming, vol.1. Fundamental Algorithms. — 3-е изд. — М.: «Вильямс», 2006. — С. 720. — ISBN 0-201-89683-4.
- Дональд Кнут. Искусство программирования, том 2. Получисленные методы = The Art of Computer Programming, vol.2. Seminumerical Algorithms. — 3-е изд. — М.: «Вильямс», 2007. — С. 832. — ISBN 0-201-89684-2.
- Дональд Кнут . Искусство программирования, том 3. Сортировка и поиск = The Art of Computer Programming, vol.3. Sorting and Searching. — 2-е изд. — М.: «Вильямс», 2007. — С. 824. — ISBN 0-201-89685-0.
- Дональд Кнут . Искусство программирования, том 4, выпуск 3. Генерация всех сочетаний и разбиений = The Art of Computer Programming, Volume 4, Fascicle 3 : Generating All Combinations and Partitions. — М.: «Вильямс», 2007. — С. 208. — ISBN 0-201-85394-9.
- Дональд Кнут . Искусство программирования, том 4, выпуск 4. Генерация всех деревьев. История комбинаторной генерации = The Art of Computer Programming, Volume 4, Fascicle 4: Generating All Trees -- History of Combinatorial Generation. — М.: «Вильямс», 2007. — С. 160. — ISBN 0-321-33570-8.
- Порублев Илья Николаевич, Ставровский Андрей Борисович. Алгоритмы и программы. Решение олимпиадных задач. — М.: «Вильямс», 2007. — С. 480. — ISBN 978-5-8459-1244-2.
- Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн. Алгоритмы: построение и анализ = INTRODUCTION TO ALGORITHMS. — 2-е изд. — М.: «Вильямс», 2006. — С. 1296. — ISBN 0-07-013151-1.
- Robert Sedgewick. Algorithms in C (Part 1–4). — Addison-Wesley. — ISBN 0-201-31452-5.
- Robert Sedgewick. Algorithms in C (Part 5). — Addison-Wesley. — ISBN 0-201-31663-3.
- Sanjoy Dasgupta, Christos H. Papadimitriou, Umesh Vazirani. Introduction to Algorithms. — McGraw-Hill Companies, The, 2006. — С. 320. — ISBN 0-073-52340-2.