В сегодняшней информатике эффективность алгоритмов и достигнутая производительность зависят не только от теоретической вычислительной сложности, но и непосредственно влияют на фактическую производительность аппаратного обеспечения.Это особенно очевидно, потому что многие алгоритмы, считающиеся оптимальными, могут работать не так, как ожидалось в реальных приложениях.С развитием технологий мы видим глубокую связь между проектированием алгоритмов и архитектурой аппаратного обеспечения.Эта корреляция поднимает ключевой вопрос: при поиске оптимизации алгоритма, как проектирование и производительность аппаратного обеспечения должны адаптироваться к этому изменению?
Если алгоритм постепенно является оптимальным, это означает, что в достаточно большой входной шкале ни один алгоритм не может превзойти его производительность, ограниченную лишь постоянным фактором.
Концепция прогрессивных оптимальных алгоритмов часто наблюдается в информатике, и она обычно включает в себя производительность алгоритмов при обработке больших входов.В частности, когда производительность алгоритма составляет o (f (n)), если его нижний предел доказал, что является ω (f (n)) для конкретной проблемы, то алгоритм называется прогрессивным оптимальным.Например, в случае сортировки сравнения все сравнения сортировки требуют, по крайней мере, ω (n log n) сравнения в средних и худших сценариях, в то время как сортировка слияния и сортировка кучи могут быть отсортированы во время O (n log n) и поэтому могут рассматриваться как постепенно оптимальная.
Тем не менее, во многих случаях существуют другие алгоритмы с более высокой эффективностью, особенно когда входные данные имеют определенные свойства.Если n объектов, как известно, являются целыми числами в диапазоне [1, n], они могут быть отсортированы в O (n), например, использование сортировки ведра.Это показывает, что одна инвариантность не должна ограничивать нас определенным алгоритмом, поскольку определенные конкретные структуры данных или алгоритмы могут значительно повысить производительность.
Даже прогрессивный оптимальный алгоритм, без учета оптимизации оборудования, может не работать оптимально в реальных данных.
Для современных компьютеров оптимизация оборудования, такая как кэш памяти и параллельная обработка, может быть «уничтожена» постепенно оптимальными алгоритмами.Это означает, что если его анализ не учитывает эти аппаратные оптимизации, могут быть некоторые неоптимальные алгоритмы, которые могут лучше использовать эти характеристики и выходить за рамки оптимального алгоритма в реальных данных.Принимая алгоритм линейного времени Бернарда Шазель для простой полигонской триангуляции в качестве примера, это постепенный оптимальный выбор, но он редко используется на практике.Кроме того, хотя динамические структуры данных массива теоретически могут быть индексированы в постоянное время, они значительно превысят производительность обычных индексов массива на многих машинах.
Хотя важность прогрессивных оптимальных алгоритмов нельзя игнорировать, их сложность иногда затрудняет их применение в некоторых практических ситуациях.Если алгоритм слишком сложный, его сложность в понимании и реализации может превышать потенциальные выгоды в диапазоне рассматриваемых входных размеров.Фактически, входные данные, с которыми мы сталкиваемся во многих случаях, чьи свойства делают другие высокопроизводительные алгоритмы или эвристику, выполняются в идеале, даже если их самое наихудшее время не очень хорошо.
На основании этих взглядов мы видим, что компромисс между прогрессивной оптимальностью и эффективностью аппаратного обеспечения действительно сложный.С развитием технологий необходимо переоценить дизайн алгоритма, чтобы лучше адаптироваться к постоянно меняющейся аппаратной среде.Если мы сосредоточимся только на теоретической эффективности, мы можем пропустить решения, которые имеют больше преимуществ в удобстве использования, гибкости и производительности.
При изучении алгоритмов вы можете подумать: о каком аппаратном дизайне может способствовать лучшему производительности алгоритмов?