Main menu

Теорема Райса: Почему антивирусы ошибаются, а компиляторы пропускают баги

Каждый разработчик мечтает о существовании идеального статического анализатора кода — волшебной программы, которая просканирует исходный код проекта и со 100% точностью скажет: "Здесь программа упадет с ошибкой деления на ноль", или "Эта функция никогда не вернет отрицательное число". К сожалению, дискретная математика и теория вычислимости ставят на этих мечтах жирный крест. Имя этому приговору — Теорема Райса.

Подробнее

Задача о выполнимости (SAT): Абсолютный фундамент теории сложности

Среди тысяч алгоритмических задач существует одна, которая носит титул "самой важной задачи теоретической информатики". Это задача о выполнимости булевых формул, сокращенно SAT (от англ. Satisfiability). Она стала первой в истории задачей, для которой была математически доказана принадлежность к классу NP-полных задач, и именно к ней сводятся все доказательства сложности в дискретной математике.

Подробнее

Сортировки за линейное время: Как преодолеть предел O(N log N)

В любом классическом учебнике по алгоритмам написано, что лучшая возможная сложность для сортировки массива — это O(N log N). Эту асимптотику выдают быстрая сортировка (QuickSort) и сортировка слиянием (MergeSort). В дискретной математике существует строгое доказательство того, что сортировки, основанные на сравнении элементов, физически не могут работать быстрее. Но что, если мы откажемся от операций сравнения? Здесь на сцену выходят алгоритмы сортировки за линейное время O(N).

Подробнее

Соц. сети