Анализ сложности
Данный раздел содержит вводную информацию об измерении производительности различных процессов. Изучив данный раздел, вы сможете сравнивать разные процессы и составлять разумные прогнозы относительно времени, которое понадобится для завершения определенного процесса.
Под процессами можно понимать реализуемые алгоритмы. Алгоритм в свою очередь можно определить как совокупность операций. Приведем пример алгоритма.
Предположим, что цель игры – выбрать максимально эффективный алгоритм поиска друга. Поэтому вернитесь на шаг назад и подумайте, какие подходы к решению этой задачи у вас имеются. Какой подход будет самым быстрым? Какой потребует больше времени? Почему один подход лучше или хуже, чем другие? Сколько всего подходов имеется? Как мы определяем один подход и как отличить его от другого? Можем ли мы определить некоторые характеристики каждого подхода, которые позволят нам сказать, что этот подход лучше, чем другие? Если да, каковы эти характеристики? Время? Значение, обратное количеству энергии, необходимой для того, чтобы обойти весь дом? Важно ли нам максимально быстро завершить игру, или можно просто исключить какие-то комнаты из поиска, а потом пойти перекусить? Есть ли какие-то другие факторы, которые мы не учли? Например, что будет, если в самый разгар игры мама позовет нас обедать? Как этот внешний фактор влияют на оценку каждого подхода? Как видим, при измерении производительности нужно учитывать множество разных факторов.
Параметры сравнения процессов
В математике, физике, экономике, психологии, информатике и бизнесе было сделано несколько попыток формализовать эти вопросы, чтобы любой пользователь мог сравнивать свойства различных процессов и на основе этого сравнения делать свои выводы. Ниже представлено несколько основных свойств процессов, которые используются для сравнения. В определениях, представленных ниже, "решение" означает "корректный логический вывод, который позволяет получить алгоритм".
-
Полнота: позволяет ли алгоритм гарантированно прийти к решению, если нам известно, что решение существует?
Несмотря на то, что критерий полноты всегда кажется обязательным, иногда это ограничение частично снимается, чтобы алгоритмы выполнялись быстрее, или чтобы для их выполнения требовалось меньше места. Иногда достаточно исключить несколько комнат в доме из поиска.
-
Время: сколько времени нужно для нахождения решения? Мы можем измерить это время в секундах, миллисекундах или других единицах. Если мы знаем, какие отдельные шаги (или операции) необходимы для выполнения алгоритма, и при этом можем сказать, что знаем, или можем точно оценить время каждого шага, то можно говорить о том, что время – производная от количества шагов, следовательно, свойство "Время" иногда можно понимать как "Количество шагов".
-
Пространство: сколько ресурсов нужно для того, чтобы выполнить процесс? Оценка может быть дана на какой-то конкретный момент времени в ходе выполнения процесса, либо это может быть некое агрегированное значение, например, общий объем необходимых ресурсов, либо средний объем необходимых ресурсов. Применительно к компьютерам эта величина чаще всего измеряется тем, сколько виртуальной памяти требует процесс. Виртуальная память обычно понимается как RAM – оперативная память. Общий объем оперативной памяти позволяет определить, сколько процессов можно выполнять одновременно. Если вы выполняете один процесс, который использует всю доступную оперативную память, то компьютер не сможет выполнять другие процессы одновременно, сначала придется дождаться завершения одного процесса, а затем начинать следующий. Ресурс виртуальной памяти, как правило, ограничен исходными техническими характеристиками компьютера. При оценке процесса важно рассчитывать, сколько места этот процесс будет занимать, чтобы определить, сколько еще процессов можно выполнить одновременно, и имеется ли достаточно памяти для того, чтобы одновременно выполнить хотя бы еще один процесс.
-
Оптимальность: является ли результатом процесса нахождение наилучшего решения при наличии нескольких решений? Если мы бродим по дому в поисках друга и находим его картонный макет, заканчиваем ли мы игру, заявляя, что нашли его, и считаем ли мы, что это – "достаточно удачное" решение? Оптимальность может предполагать сравнение выбранного подхода с идеальным подходом. Идеального подхода может и не быть, однако, предположим, что он существует.
-
Интуитивность: насколько хорошо мы понимаем процесс (насколько хорошо мы представляем себе, как выполняется процесс)? Этот параметр не является каким-то формальным показателем, который используется в теории и на практике, но его важно учитывать. Например, вспомним упомянутый выше поуровневый подход. Что если я расскажу вам о другом подходе, который называю подходом "черного ящика"? Я не скажу, как он работает, просто утверждаю, что с помощью этого подхода вы точно найдете своего друга. Я даже могу заявить, что это оптимальный подход. Но помните, что это черный ящик, в который вы не сможете заглянуть. Это может быть и робот, которого мы посылаем на поиск (но принцип работы этого робота также не раскрывается). Если вам нужно сравнить простой поуровневый подход с "черным ящиком", что бы вы предпочли? Понятный вам подход? Ответ зависит от ситуации. Иногда "черный ящик" является более приемлемым подходом. Если вы знаете, как жульничать в казино (независимо от того, насколько это неэтично и нелегально), важно ли вам на самом деле знать, как именно работает та или иная хитрая схема? Это субъективный подход, поскольку он зависит от знаний/опыта человека, принимающего решения. Обычно мы предпочитаем объективные меры при выполнении процесса, которые не зависят от того, кто именно выполняет наблюдение. Поэтому это свойство часто игнорируется.
Итак, мы определили некоторые основные характеристики процессов. На практике для обозначения этих характеристик или свойств процесса часто используется термин "измерения". Следовательно, мы можем сказать, что мы рассматриваем производительность процесса с точки зрения измерений полноты (completeness), времени (time), пространства (space) и оптимальности (optimality) (C.T.S.O.). Переставив буквы в этой аббревиатуре, получаем знакомое "COST". Мы сравниваем процессы по COST-свойствам.
Понимание взаимосвязи различных COST-свойств
В зависимости от различных COST-свойств, процессы имеют различные качества. Например, один процесс может быть очень быстрым и завершаться через небольшой промежуток времени. Однако для этого ему может требоваться значительный объем оперативной памяти компьютера. Другими словами, по сравнению с неким абстрактным среднестатистическим процессом, который требует среднее количество времени и ресурсов, он оптимальнее по времени, но при этом он более ресурсоемкий. Как правило, более быстрые процессы требуют больше ресурсов, и наоборот, более медленные процессы требуют меньше ресурсов. Увеличение одного измерения сокращает другое измерение. В ходе проектирования процесса мы можем использовать этот факт так, чтобы итоговый процесс максимально соответствовал нашим задачам. Если нам редко приходится выполнять несколько процессов одновременно, ресурсоемкость процессов не настолько важна для нас. Следовательно, для выполнения нашей задачи можно использовать высокоскоростной процесс, задействующий большой объем оперативной памяти.
Таким образом, обычно справедливы бывают следующие утверждения:
-
При увеличении полноты реализации процесса увеличивается его время ресурсоемкость:
-
При уменьшении времени увеличивается ресурсоемкость процесса:
-
По мере сокращения времени и ресурсоемкости процесса снижается и его интуитивность. Более эффективные алгоритмы, как правило, менее интуитивны. Как бы это ни противоречило нашей с вами логике, на практике бывает именно так. В конце концов, понятно, почему программисты предпочитают использовать Java-скрипт, вместо того, чтобы использовать перфокарты.
-
При увеличении времени увеличивается оптимальность процесса:
Подумайте о том, какие последствия будет иметь преобладание одного из измерений. Чем меньше времени мы тратим на какой-то процесс, тем поверхностнее его результат. Предпочитая одно измерение другому, убедитесь, что вы четко представляете себе, как это отразится на других измерениях эффективности процесса.
Анализ сложности
Практики попытались разработать формализованный подход для измерения производительности процессов. Наиболее важных результатов в этой области добились P.G.H. Bachmann, Cook и Karp. Задача по выбору таких формальных метрик предполагает выявление критериев для сравнения. Этот процесс также называется анализом сложности, т.е. изучением того, как можно решить те или иные задачи.
С точки зрения анализа сложности процессов, выделяют два класса задач: P и NP:
-
Задачи класса сложности P – это задачи, которые могут быть решены за полиномиальное время.
-
Класс NP включает недетерминируемые полиномиальные проблемы разрешимости.
В специальной литературе о производительности процессов вы можете встретить распространенное обозначение О (большое О). Например, O(n) означает, что время (или пространство) находится в линейной зависимости от n – числа шагов, необходимых для завершения работы алгоритма.
В данном руководстве для пользователей есть несколько разделов, в которых в описании производительности процессов используется большое О. Если время выполнения процесс для вас критично, то в идеале вы можете использовать эту информацию для принятия решения о том, следует ли использовать один узел в проекте вместо другого. К примеру, можно ли использовать узел Линейная регрессия или Нейронная сеть для создания прогностической модели.