Максимальная экономия - это проблема нахождения эволюционного дерева, связывающего n последовательностей ДНК (представляющих виды), которое требует наименьшего количества однонуклеотидных мутаций. N заданных последовательностей должны появляться на листьях; топология дерева и последовательности во внутренних узлах - вот что мы можем выбрать.
В более терминах CS: Нам дана строка длиной k, которая должна появиться на листьях некоторого дерева, и нам нужно выбрать дерево плюс строку длины k для каждого внутренний узел в дереве, чтобы минимизировать сумму расстояний Хэмминга по всем ребрам.
Когда также задано фиксированное дерево, оптимальное назначение последовательностей внутренним узлам может быть очень эффективно определено с использованием алгоритма Fitch . Но в обычном случае дерево не дается (т. Е. Нас просят найти оптимальное дерево), и это усложняет задачу NP, что означает, что каждое дерево в принципе должно быть опробовано. Несмотря на то, что эволюционное дерево имеет корень (представляющий гипотетического предка), нам нужно только рассмотреть различные не укорененные деревья, поскольку на минимальное количество требуемых мутаций не влияет положение корня. Для n видов существует 3 * 5 * 7 * ... * (2n-5) двунаправленных деревьев с меткой листа. (Существует только одно такое дерево с 3 видами, которое имеет одну внутреннюю вершину и 3 ребра; 4-й вид может быть вставлен по любому из 3 ребер, чтобы создать отдельное дерево с 5 ребрами; 5-й вид может быть вставлен в любое из этих 5 ребер, и так далее - этот процесс генерирует все деревья ровно один раз.) Это иногда пишется (2n-5) !! , с помощью !! что означает «двойной факториал».
На практике используются ветви и границы, и в большинстве реальных наборов данных это позволяет избежать оценки большинства деревьев. Но очень «не древовидные» случайные данные требуют всех или почти всех (2n-5) !! деревья, подлежащие проверке - поскольку в этом случае многие деревья имеют почти одинаковое минимальное число мутаций.