Что делает проблему более фундаментальной, чем другая? - PullRequest
3 голосов
/ 13 декабря 2010

Есть ли формальное определение того, что делает проблему более фундаментальной, чем другая? В противном случае, какое было бы приемлемое неофициальное определение?

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

Ответы [ 5 ]

3 голосов
/ 13 декабря 2010

Когда многие проблемы могут быть решены, например, одним алгоритмом. Это касается любого оптимального алгоритма сортировки. Кстати, возможно, вы смешиваете проблемы и алгоритмы? Существует формальное определение одной проблемы, сводимой к другой. Смотри http://en.wikipedia.org/wiki/Reduction_(complexity)

2 голосов
/ 14 декабря 2010

Оригинальный вопрос является допустимым и не должен принимать / учитывать сложность и сводимость, как предложил @slebetman. (Таким образом, делая вопрос более фундаментальным:)

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

В практическом плане я бы снова исправил @slebetman. Вместо «если что-то использует или опровергает предположение, тогда оно менее фундаментально, чем это предположение», я бы сказал «если проблема использует или оспаривает допущение, то оно менее фундаментально, чем та же проблема без предположения» . То есть сортировка объектов является более фундаментальной, чем сортировка целых чисел; или рендеринг шрифтов на принтере менее важен, чем рендеринг шрифтов на любом устройстве.

1 голос
/ 13 декабря 2010

Проблема или решение, которое имеет больше приложений является более фундаментальным .

(У сортировки много приложений, у P! = NP тоже много приложений (или последствий)), рендеринг имеет только несколько приложений.)

1 голос
/ 13 декабря 2010

Если я правильно понял ваш вопрос.

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

0 голосов
/ 13 декабря 2010

Inf прав, когда намекнул на сложность и приводимость, а не только на то, что вовлечено / включено в реализацию алгоритма. Это предположения, которые вы делаете.

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

Давайте рассмотрим пример: сортировка. Проблема сортировки заключается в том, что когда все делается наивно, время, необходимое для сортировки, очень быстро растет. С технической точки зрения проблема сортировки имеет тенденцию к тому, чтобы быть NP завершенной. Таким образом, алгоритмы сортировки разрабатываются с целью избежать завершения NP. Но всегда ли NP завершен медленно? Это проблема сама по себе, и проблема называется P! = NP, которая до сих пор не была доказана ни как истинная, ни как ложная. Так что P! = NP является более фундаментальным, чем сортировка.

Но даже P! = NP делает некоторые предположения. Предполагается, что проблемы с завершением NP всегда могут быть выполнены до конца, даже если для их завершения требуется много времени. Другими словами, запись big-O для полной задачи NP никогда не бывает бесконечной. Возникает вопрос: все ли проблемы гарантированно имеют точку завершения? Ответ на этот вопрос - нет, не все задачи имеют гарантированную точку завершения, самой тривиальной из которых является бесконечный цикл: while (1) {print "still running!"}. Так можем ли мы обнаружить все случаи программ, запущенных бесконечно? Нет, и доказательством этого является проблема остановки. Следовательно, проблема остановки является более фундаментальной, чем P! = NP.

Но даже проблема остановки делает предположения. Мы предполагаем, что все наши программы выполняются на конкретном типе процессора. Можем ли мы рассматривать все процессоры как эквивалентные? Есть ли процессор, который можно построить, чтобы решить проблему остановки? Что ж, ответ таков, пока ЦП завершен по Тьюрингу, они эквивалентны другим ЦП, завершившим Тьюринг. Поэтому полнота по Тьюрингу является более фундаментальной проблемой, чем проблема остановки.

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

...