Нотация Big-O предназначена для описания того, как алгоритм ведет себя в пределе, когда n стремится к бесконечности. С этим гораздо легче работать в теоретическом исследовании, чем в практическом эксперименте. Я бы выбрал для изучения вещи, которые можно легко измерить и которые волнуют людей, например, точность и потребляемые компьютерные ресурсы (время/память).
Когда вы пишете и запускаете компьютерную программу для сравнения двух алгоритмов, вы проводите научный эксперимент, точно так же, как кто-то, кто измеряет скорость света, или кто-то, кто сравнивает уровень смертности курильщиков и некурящих, и многие из тех же факторов применять.
Попробуйте выбрать пример проблемы или проблем, которые необходимо решить, которые являются репрезентативными или, по крайней мере, интересными для вас, потому что ваши результаты могут не распространяться на ситуации, которые вы на самом деле не тестировали. Вы можете увеличить диапазон ситуаций, на которые отвечают ваши результаты, если вы выберете наугад из большого набора возможных проблем и обнаружите, что все ваши случайные выборки ведут себя во многом одинаково или, по крайней мере, следуют одной и той же тенденции. Вы можете получить неожиданные результаты, даже если теоретические исследования показывают, что должна быть хорошая тенденция n log n, потому что теоретические исследования редко учитывают внезапное исчерпание кеша или нехватки памяти или, как правило, даже такие вещи, как целочисленное переполнение.
Будьте внимательны к источникам ошибок и постарайтесь свести их к минимуму или сделать так, чтобы они применялись в одинаковой степени ко всем вещам, которые вы сравниваете. Конечно, вы хотите использовать одни и те же входные данные для всех тестируемых алгоритмов. Сделайте несколько прогонов каждого алгоритма и проверьте, насколько изменчивы вещи — возможно, несколько прогонов медленнее, потому что компьютер в это время делал что-то еще. Имейте в виду, что кэширование может ускорить более поздние запуски алгоритма, особенно если вы запускаете их сразу друг за другом. Какое время вы хотите, зависит от того, что вы решили измерять. Если у вас много операций ввода-вывода, помните, что современные операционные системы и компьютеры кэшируют в памяти огромные объемы дисковых операций ввода-вывода. Однажды я закончил тем, что выключал и снова включал компьютер после каждого запуска, поскольку это был единственный способ убедиться, что кэш ввода-вывода устройства очищен.
person
mcdowella
schedule
13.12.2011