2012-03-29 1 views
0

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

Что произойдет с компьютером? Заблокирован ли он? Работает ли он на 100% до тех пор, пока он не закончится или питание не отключится? Не сработает ли оборудование до его завершения?

Я занимаюсь домашней работой по временной сложности, если вы уже не догадались. Это не вопрос домашней работы. Это просто случайная мысль.

+4

21 декабря не слишком далеко ... Так что ответ зависит от того, во что вы верите произойдет после этого. – Mysticial

+2

В этот момент 2012 doomsayers будет выглядеть так же глупо, как Y2K. И, если я ошибаюсь, ну, никто не будет вокруг, чтобы указать на это :-) – paxdiablo

+0

Компьютер будет запускать программу, как и любой другой, до ее завершения, что означает, что программа будет работать до тех пор, пока она не закончит (A) (B) аппаратное обеспечение прекращает работу программы (теряет мощность/BSOD/и т. Д.) –

ответ

3

Что произойдет с компьютером?

Он будет работать алгоритм, пока он не закончит [или есть неожиданная ошибка]

ли он запереть?

Это зависит от того, как алгоритм реализован, но обычно - «программа», вероятно, замерзнет, ​​но компьютер все равно сможет работать [возможно, медленнее], особенно если машина является многострочной.

Будет ли он работать при 100% -ной емкости, пока он не закончит работу или не отключится питание ?

Если алгоритм реализован серийно, а машина является многокорпусной - она ​​не будет работать на 100% -ной capcity. Если он многопоточен - он, вероятно, будет.

Не удалось ли аппаратное обеспечение завершить его?

для алгоритма, который нуждается в 2^n опа и n=1000 [для современных настоящие машины] - это, скорее всего, будет [земля не будет здесь, прежде чем это делается]. Но для этого нет никаких гарантий.

Важная информация: Проблема с эксонентными проблемами заключается не в их влиянии на машины, это не проблема с ними. Проблема в том, что они занимают много времени. сколько? ну, для O(n!) алгоритм [наивный TSP реализация], для n == 20, время выполнения ~ десятилетие.увеличьте n одним, просто небольшим изменением размера проблемы - и вы получите ~ 200 лет работы! дополнительное дополнение сделает его ~ 4000 лет ... [опять же, предполагая современную современную машину, а для c постоянная для O(n!)c >= 1

+1

Те последние несколько абзацев не имеют смысла. Если каждая операция занимает 2^-1000 секунд, я все равно буду ожидать, что Земля будет тогда ... да, я был прав :-) Пожалуйста, не путайте время _complexity_ с фактическим временем работы. – paxdiablo

+0

@paxdiablo: Это утверждение было проблематично, я попытался перефразировать его. Проблема здесь в том, что ОП задает вопросы о теоретической сложности и ее практических последствиях. – amit

+0

Отличный ответ! Вот завихрение: Предположим, что компьютер использует старый процессор P3 или P4. IIRC, у этих процессоров были проблемы с нагревом. Если вы запустили алгоритм на таком компьютере, можете ли вы теоретически сжечь процессор и/или вызвать остановку, связанную с теплом? – underveil

0

«Сложность времени» - это лишь некоторое время, необходимое для получения результата. Таким образом, компьютер продолжит выполнение до тех пор, пока он не будет остановлен каким-то образом - Ctrl + C или отключением.

1

От этого зависит.

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

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

+0

VM также можно использовать, чтобы обойти все аппаратные ограничения, если вы лукавый. –