Время выполнения лучшего случая для решения Полной NP проблемы?

2-й отрывок является колоритным, не делайте этого.

другие ответы имеют хорошее обсуждение относительных достоинств; я просто добавлю, что pthread_cond_broadcast ясное преимущество условных переменных.

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

Действительно, в 2-м отрывке у Вас нет блокировки, защищающей чтение бегунка-> состояние, таким образом, к этому получают доступ через гонку данных. Большинство платформ позволит Вам сойти с рук это в этом конкретном примере, но это имеет неопределенную семантику POSIX и моделью памяти следующих стандартов C/C++.

На самом деле, реальное состояние состязания возможно, если другой поток выделяет новую структуру бегунка и перезаписывает бегунок; поток ожидания мог бы видеть обновление указателя 'бегунка', не видя инициализацию бегунка-> состояние. Действительно, 2-й отрывок напрашивается на неприятности, в этом случае и в целом.

http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/

8
задан Claudiu 22 November 2009 в 01:40
поделиться

2 ответа

[...] with dynamic programming it can be done in O(n^2 * 2^n). Is there any perhaps "easier" NP-Complete problem that has a better running time?

Sort of. You can get rid of any polynomial factor by creating an artificial problem that encodes the same solution in a polynomially larger input. As long as the input is only polynomially larger, the resulting problem is still NP-complete. Since the complexity is by definition the function that maps input size to running time, if the input size grows the function gets into lower O classes.

So, the same algorithm running on TSP with the input padded with n^2 useless bits, will have complexity O(1 * 2^sqrt(n)).

4
ответ дан 5 December 2019 в 20:16
поделиться

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

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

Учитывая, что динамическое программирование может решить задачу коммивояжера за 2 ^ n раз и 2 ^ n пробел, то же самое должно быть верно и для всех других проблем NP [ну, плюс время, чтобы применить преобразование, я думаю - так что это могло быть 2 ^ (n + 1)].

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

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