Beshere
@Beshere
Инженер-программист

Понятность против оптимальности — что лучше?

Как лучше писать алгоритмы: понятно или оптимально.

Пример, задача - переверните массив целых чисел. Понятный подход: создать новый массив, пробежать исходный массив с конца, заполняя новый. Оптимальный подход: пробежать массив до середины, меняя крайние элементы местами (0<->N-1;1<->N-2...), а еще там можно обмен сделать не через переменную, а вычитанием/сложением.

P.S. Когда оптимизация нужна, выбор, очевиден. Вопрос про общий случай, когда пишется программа, которая не ждет на входе террабайты данных.
  • Вопрос задан
  • 218 просмотров
Решения вопроса 3
gbg
@gbg
Баянист. Тамада. Услуги.
Когда говорят "оптимально" я спрашиваю "по какому критерию". Потому что беготня по массиву до середины оптимальна по памяти, но не факт что компилятор осилит правильно подстроить чтение и запись под ширину кэш-линий.
А уж про то, что обмен через xor или сложение-вычитание лучше - легенда тянется со времен машин, где не было инструкции xchg и этот фокус позволял обменять местами два регистра, не задействуя третий.

"Понятность" кода - это просто еще один критерий оптимальности, а уж когда какой выбирать - зависит от корпоративного стандарта написания кода.
Ответ написан
angrySCV
@angrySCV
machine learning, programming, startuping
понятнее всегда лучше, тк это позволяет в дальнейшем развивать код, у которого ВСЕГДА короткий жизненный цикл, тоесть вы его будете не один раз переделывать и переписывать, и в рамках этого понятность предпочтительней чем сиюминутная "эффективность" которая в длительной перспективы никогда не эффективна.
Ответ написан
@AlexSku
Программист по автоматике
Сначала - понятный. А если видно запаздывание, то - оптимизируйте. Только надо находить самое медленное звено.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@wulfdog
Все это слишком асбтрактно и относительно. Что для одного непонятно для другого просто.
Я думаю лучше код хорошо комментировать, тогда не будет возникать вопроса и даже если что-то непонятно - то будет возможность разобраться.
Я не профи а начинающий, для меня сейчас все непонятно. Попросив помощи в описании что делается в этом скрипте я получил некий набор описаний действий. На его основе уже изучил информацию и понял как это работает. Этот принцип также масштабируется и на сложный код.
Ответ написан
longclaps
@longclaps
Нехорошо это. Оба способа обращения массива тривиальны. Это примерно как сказать: вот буква О, пишется тривиально, а вот буква Ж - это же высший пилотаж! Какую букву выбрать для написания "Войны и мира" и других оптимальных шедевров?
Не торопитесь с шедеврами, разберитесь сперва с буквами.
Ответ написан
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
подобные низкоуровневые задачи обычно решаются методами/функциями языка. если таковые отсутствуют (что бывает крайне редко), то лучше сделать их оптимальными, за понятность путь отвечает комментарий (docBlock)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы