Для чего изучать алгоритмы?

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

Алгоритмы часто сильно отличаются друг от друга. Рассмотрим пример с sqrt, к которому мы прибегали ранее. Вполне возможно, что существует множество различных способов реализации деталей вычисления квадратного корня. Один алгоритм может использовать для этого много меньше ресурсов, другой - работать до получения результата в десять раз дольше, и тому подобное. Мы бы хотели иметь возможность сравнивать эти два решения. Хотя они оба работают, одно из них, возможно, “лучше”, чем другое. Мы можем предположить, что оно более эффективно или просто быстрее и занимает меньше памяти. Как мы изучаем алгоритмы, так можем изучать и аналитические техники, позволяющие сравнивать и противопоставлять решения, основываясь исключительно на их собственных характеристиках, а не на характеристиках программ или компьютеров, используемых для реализации.

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

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

Next Section - Обзор основ Python