Иногда правильный ответ: «Сколько раз это происходит с вашей базой кода?» но в этом случае есть реальный ответ.
Правильный ответ - нет, потому что не все проблемы могут быть решены с использованием совершенной параллельной обработки. Например, проблема, связанная с коммивояжером, должна совершить один путь для рассмотрения второго этапа поездки.
Предполагая полностью связанную матрицу городов, если вы хотите отобразить все возможные нециклические маршруты для нашего усталого продавца, вы застреваете с проблемой O (n!), Которая может быть разложена на O (n) * O ((n-1)!). Проблема в том, что вам нужно зафиксировать один путь (на стороне O (n) уравнения), прежде чем вы сможете рассмотреть оставшиеся пути (на стороне O ((n-1)!) Уравнения).
Поскольку некоторые вычисления должны выполняться до других вычислений, то нет возможности точно разбить результаты в одном проходе рассеяния/сбора. Это означает, что решение будет ждать результатов расчетов, которые должны быть выполнены до того, как можно будет запустить «следующий» шаг. Это ключ, поскольку потребность в предшествующих частичных решениях обеспечивает «горло бутылки» в возможности продолжить вычисление.
Поскольку мы доказали, что можем сделать несколько из этих бесконечно быстрых, бесконечно многочисленных, процессоры ждут (даже если они ждут сами по себе), мы знаем, что время выполнения не может быть O (1), и нам нужно только выбрать очень большой N, чтобы гарантировать «неприемлемое» время работы.
Да, если n! <бесконечность. – mob
Я хочу знать, где вы проводили собеседование. Удивительно, что у них есть компьютер с бесконечными процессорами и памятью! –
@Jeff: Tee hee. – Pierreten