Чем отличаются NP, NP-Complete и NP-Hard?

Как вы поняли, Entity Framework не может запустить ваш код C # как часть его запроса. Он должен иметь возможность преобразовать запрос в фактический оператор SQL. Чтобы это сработало, вам придется реструктурировать выражение запроса в выражение, которое может обрабатывать Entity Framework.

public System.Linq.Expressions.Expression<Func<Charity, bool>> IsSatisfied()
{
    string name = this.charityName;
    string referenceNumber = this.referenceNumber;
    return p => 
        (string.IsNullOrEmpty(name) || 
            p.registeredName.ToLower().Contains(name.ToLower()) ||
            p.alias.ToLower().Contains(name.ToLower()) ||
            p.charityId.ToLower().Contains(name.ToLower())) &&
        (string.IsNullOrEmpty(referenceNumber) ||
            p.charityReference.ToLower().Contains(referenceNumber.ToLower()));
}
1037
задан Amir Rezazadeh 7 January 2019 в 09:20
поделиться

3 ответа

Я предполагаю, что вы ищете интуитивно понятные определения, поскольку технические определения требуют довольно много времени. понять. Прежде всего, давайте вспомним предварительную концепцию, необходимую для понимания этих определений.

  • Проблема принятия решения : Задача с ответом да или нет .

Теперь давайте определим эти классы сложности .

P

P - сложность класс, представляющий набор всех задач решения, которые могут быть решены за полиномиальное время .

То есть, для данного случая проблемы, ответ «да» или «нет» может быть решен за полиномиальное время.

Пример

Для связного графа G , можно ли его вершины раскрасить в два цвета, чтобы ни одно ребро не было одноцветным?

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


NP

NP - это класс сложности, который представляет собой набор всех задач принятия решений, для которых в случаях, когда ответ «да» есть доказательства, которые можно проверить за полиномиальное время.

Это означает, что если кто-то дает Используя экземпляр проблемы и сертификат (иногда называемый свидетелем) на ответ «да», мы можем проверить его правильность за полиномиальное время.

Пример

Целочисленная факторизация находится в NP. Проблема заключается в том, что для целых чисел n и m существует ли целое число f с 1 , такое что f делит n ( f - небольшой множитель n )?

Это проблема решения, потому что ответы - да или нет. Если кто-то передаст нам экземпляр проблемы (то есть они передадут нам целые числа n и m ) и целое число f с 1 и утверждают, что f является фактором n (сертификат), мы можем проверить ответ за полиномиальное время , выполнив деление n / f .


NP-Complete

NP-Complete - это класс сложности, который представляет собой набор всех задач X в NP, для которых можно уменьшить любую другую NP задача от Y до X за полиномиальное время.

Интуитивно это означает, что мы можем решить Y быстро, если знаем, как решить X ] быстро. Точно, Y сводится к X , если существует алгоритм полиномиального времени f для преобразования экземпляров y из Y в экземпляры x = f (y) из X за полиномиальное время, с тем свойством, что ответ на y - да, тогда и только тогда, когда ответ на f (y) - да.

Пример

3-SAT . Это проблема, в которой нам дается соединение (И) дизъюнкций (ИЛИ) с 3 предложениями, операторов формы

(x_v11 OR x_v21 OR x_v31) AND 
(x_v12 OR x_v22 OR x_v32) AND 
...                       AND 
(x_v1n OR x_v2n OR x_v3n)

, где каждый x_vij является логической переменной или отрицанием переменной из конечный предопределенный список (x_1, x_2, ... x_n) .

Можно показать, что каждая проблема NP может быть сведена к 3-SAT . Доказательство этого носит технический характер и требует использования технического определения NP (, основанного на недетерминированных машинах Тьюринга ). Это известно как теорема Кука .

Что делает NP-полные проблемы важными, так это то, что если детерминированный алгоритм с полиномиальным временем может быть найден для решения одной из них, каждая проблема NP будет решена за полиномиальное время (одно проблема, чтобы управлять ими всеми).


NP-сложные

Интуитивно эти проблемы не менее сложны, чем NP-полные проблемы . Обратите внимание, что NP-сложные задачи не обязательно должны быть в NP , и они не обязательно должны быть проблемами решения .

Точное определение здесь таково: задача X является NP-сложной, если существует NP-полная задача Y , такая, что Y ] сводится к X за полиномиальное время .

Но поскольку любая NP-полная проблема может быть сведена к любой другой NP-полной задаче за полиномиальное время, все NP-полные проблемы могут быть сведены к любой NP-сложной задаче за полиномиальное время. Тогда, если существует решение одной NP-сложной задачи за полиномиальное время, есть решение всех NP-задач за полиномиальное время.

Пример

Задача остановки является NP-сложной проблема. Это проблема, при которой программа P и ввод I остановятся? Это проблема решения, но ее нет в NP. Понятно, что к этой можно свести любую NP-полную задачу. Другой пример: любая NP-полная задача является NP-сложной.

Моя любимая NP-полная задача - это задача Minesweeper .


P = NP

Это самая известная задача в информатике, и один из важнейших нерешенных вопросов математических наук. Фактически, Институт Клея предлагает один миллион долларов за решение проблемы (статья Стивена Кука на веб-сайте Клея весьма хороша).

Ясно, что P является подмножеством NP. Открытый вопрос заключается в том, имеют ли проблемы NP детерминированные решения за полиномиальное время. Многие считают, что это не так. Вот замечательная недавняя статья о последней (и важности) проблемы P = NP: Статус проблемы P в сравнении с NP .

Лучшая книга по этой теме - это Компьютеры и неразрешимость Гэри и Джонсона.

Институт Клея предлагает один миллион долларов за решение проблемы (статья Стивена Кука на веб-сайте Клея весьма хороша).

Ясно, что P является подмножеством NP. Открытый вопрос заключается в том, имеют ли проблемы NP детерминированные решения за полиномиальное время. Многие считают, что это не так. Вот замечательная недавняя статья о последней (и важности) проблемы P = NP: Статус проблемы P в сравнении с NP .

Лучшая книга по этой теме - Компьютеры и неразрешимость Гэри и Джонсона.

Институт Клея предлагает один миллион долларов за решение проблемы (статья Стивена Кука на веб-сайте Клея весьма хороша).

Ясно, что P является подмножеством NP. Открытый вопрос заключается в том, имеют ли проблемы NP детерминированные решения за полиномиальное время. Многие считают, что это не так. Вот замечательная недавняя статья о последней (и важности) проблемы P = NP: Статус проблемы P в сравнении с NP .

Лучшая книга по этой теме - Компьютеры и неразрешимость Гэри и Джонсона.

Многие считают, что это не так. Вот замечательная недавняя статья о последней (и важности) проблемы P = NP: Статус проблемы P в сравнении с NP .

Лучшая книга по этой теме - это Компьютеры и неразрешимость Гэри и Джонсона.

Многие считают, что это не так. Вот замечательная недавняя статья о последней (и важности) проблемы P = NP: Статус проблемы P в сравнении с NP .

Лучшая книга по этой теме - это Компьютеры и неразрешимость Гэри и Джонсона.

1376
ответ дан 19 December 2019 в 20:20
поделиться

Это очень неформальный ответ на заданный вопрос.

Может ли число 3233 быть записано как произведение двух других чисел больше 1 ? Есть ли способ обойти все Семь мостов Кенигсберга , не переходя ни один мост дважды? Это примеры вопросов, которые имеют общую черту. Может быть неочевидно, как эффективно определить ответ, но если ответ «да», затем есть короткое и быстрое доказательство. В первом случае нетривиальная факторизация 51; во втором - маршрут перехода по мостам (соответствие ограничениям).

проблема принятия решения - это набор вопросов с ответами «да» или «нет», которые различаются только по одному параметру. Скажите, что задача COMPOSITE = {"Является ли n составным": n является целым числом} или EULERPATH = {"Имеет ли граф G путь Эйлера?" : G - конечный граф}.

Теперь некоторые проблемы решения поддаются эффективным, если не очевидным алгоритмам. Эйлер открыл эффективный алгоритм для решения таких задач, как «Семь мостов Кенигсберга» более 250 лет назад.

С другой стороны, для многих проблем, связанных с решением, это ' Не очевидно, как получить ответ, но если вы знаете дополнительную информацию, очевидно, как доказать, что вы получили правильный ответ. КОМПОЗИТ выглядит следующим образом: Пробное деление - очевидный алгоритм, и он медленный: чтобы разложить на множители 10-значное число, вам нужно попробовать что-то вроде 100 000 возможных делителей. Но если, например, кто-то сказал вам, что 61 является делителем 3233, простое деление в столбик - эффективный способ убедиться, что они верны.

Класс сложности NP - это класс решения проблемы, в которых ответ «да» краток, чтобы быстро проверить доказательства. Как КОМПОЗИТ. Важным моментом является то, что это определение ничего не говорит о сложности проблемы. Если у вас есть правильный и эффективный способ решения проблемы принятия решения, Достаточно просто записать шаги решения.

Исследование алгоритмов продолжается, и постоянно создаются новые умные алгоритмы. Проблема, которую вы, возможно, не знаете, как эффективно решить сегодня, может иметь эффективное (если не очевидное) решение завтра. Фактически, исследователям понадобилось до 2002 , чтобы найти эффективное решение для КОМПОЗИТА! При всех этих достижениях действительно стоит задаться вопросом: не является ли этот рассказ о коротких доказательствах всего лишь иллюзией? Может быть каждая проблема решения, которая поддается эффективным доказательствам, имеет эффективное решение? Никто не знает .

Возможно, самый большой вклад в эту область был внесен с открытием особого класса проблем NP. Играя с моделями схем для вычислений, Стивен Кук обнаружил проблему решения для разновидности NP, которая была доказуемо такой же или более сложной, чем каждая другая проблема NP. Эффективное решение проблемы логической выполнимости может быть использовано для создания эффективного решения любой другой проблемы в NP. Вскоре после этого Ричард Карп показал, что ряд других проблем, связанных с принятием решений, может служить той же цели. Эти проблемы, в некотором смысле «самые сложные» проблемы в NP, стали известны как NP-полные проблемы.

Конечно, NP - это только класс задач решения. Многие проблемы не сформулированы естественным образом таким образом: «найти множители N», «найти кратчайший путь в графе G, который посещает каждую вершину», «дать набор назначений переменных, который делает следующее логическое выражение истинным». Хотя можно неформально говорить о том, что некоторые такие проблемы находятся «в NP», технически это не имеет большого смысла - это не проблемы решения. Некоторые из этих проблем могут даже иметь такую ​​же мощность, как NP-полная проблема: эффективное решение этих проблем (без решения) привело бы непосредственно к эффективному решению любой NP-проблемы. Подобная проблема называется NP-сложной .

74
ответ дан 19 December 2019 в 20:20
поделиться

Проблемы NP-complete - это проблемы, которые являются одновременно NP-Hard и в классе сложности NP. Следовательно, чтобы показать, что любая заданная проблема является NP-полной, вам нужно показать, что проблема как в NP, так и в том, что она NP-трудна.

полиномиальное время и возможное решение (т. е. сертификат) проблемы в NP могут быть проверены на правильность за полиномиальное время.

Пример недетерминированного решения проблемы k-клик может выглядеть примерно так:

1) случайным образом выбрать k узлов из графа

2) проверить, что эти k узлов образуют клику.

Вышеупомянутая стратегия является полиномиальной по размеру входного графа и, следовательно, проблема k-клик находится в NP.

Обратите внимание, что все проблемы, детерминированно разрешимые за полиномиальное время, также находятся в NP.

Показ того, что проблема NP-сложная, обычно включает в себя редукцию от какой-то другой NP-сложной проблемы к вашей проблеме с использованием отображения полиномиального времени: http://en.wikipedia.org/wiki/Reduction_ (сложность)

17
ответ дан 19 December 2019 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: