Вижу, что предыдущий пост вызывает сомнения у некоторых подписчиков. Давайте я дам другое объяснение.
Итак, у нас есть функция f() которая считает время выполнения нашей программы в некотором окружении. Мы точно знаем,
что эта функция многих переменных, более того, мы точно знаем, что одна из переменных - это O(N), т.е. функция выглядит как-то так:
f(O(N), x1, ..., xn)
Проблема в том, что функция f() на каждом вычисляющем устройстве своя, т.е. на самом деле - это множество функций. И все что мы точно знаем, что O(N) - это тривиальное свойство этой функции, а x1..xn - это нетривиальные свойства, а по теореме Райса проверить наличие нетривиальных свойств функции - невозможно (эта задача неразрешима)
Таким образом, улучшить работу алгоритма гарантированным способом можно только через оптимизацию O(N), в остальных случаях надо брать и рассматривать каждый конкретный запуск отдельно, искать те x1...xn, которые нам нужны (откидывая ненужные) и оптимизировать что-то конкретное, при этом мы никогда не будем уверены, что запуск который мы отпимизировали будет быстрее, чем запуск, который мы не оптимизировали (всегда лотерея).
Собственно мой предыдущий пост как раз об этом - изучая алгоритмы вы получаете хороший инструмент улучшения своего кода, уповая на "технические" оптимизации вы будете в ситуации "может да, а может нет". Поэтому попытки выработать "общие рекомендации как технически улучшить ваш код", которые всегда работают - это утопия. Пишите код красиво и понятно, а не занимайтесь решением "неразрешимых задач".
Post #1819
9.38K
- 👍 71
- 🔥 19
- 💯 4
- 🤬 1