Прежде всего, есть правильность . Убедитесь, что ваш алгоритм всегда работает, независимо от того, что вход. Даже для ввода, который алгоритм не предназначен для обработки, вы должны напечатать сообщение об ошибке, а не завершить работу всего приложения. Если вы используете жадные алгоритмы, убедитесь, что они действительно работают в каждом случае, а не в нескольких случаях, которые вы пробовали вручную.
Тогда есть практическая эффективность . Алгоритм O (N 2 ) может быть намного быстрее, чем алгоритм O (N) на практике. Проводите реальные тесты и не слишком полагайтесь на теоретические результаты.
Тогда есть простота реализации . Обычно вам не нужна лучшая реализация для сортировки, чтобы отсортировать массив из 100 целых чисел один раз, так что не беспокойтесь.
Ищите наихудшие случаи в ваших алгоритмах и, если возможно, старайтесь их избегать. Если у вас в целом быстрый алгоритм, но с очень плохим наихудшим случаем, рассмотрите возможность обнаружения этого наихудшего случая и решения его с помощью другого алгоритма, который обычно медленнее, но лучше для этого отдельного случая.
Рассмотрим компромиссы между пространством и временем. Если вы можете позволить себе память, чтобы получить лучшую скорость, вероятно, нет причин не делать этого, особенно если вам действительно нужна скорость. Если вы не можете позволить себе память, но можете позволить себе быть медленнее, сделайте это.
Если можете, используйте существующие библиотеки. Не катите свою собственную библиотеку мультиточности, если вы можете использовать GMP, например. Для C ++ такие вещи, как boost и даже контейнеры и алгоритмы STL, работали в течение многих лет целой армией людей и, скорее всего, лучше, чем вы можете сделать в одиночку.