Beshere
@Beshere
Разработчик

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

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

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

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

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

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

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