Является ли предпочтение решениям грубой силы плохим знаком? [закрыто]

StackOverflow https://stackoverflow.com/questions/418465

  •  03-07-2019
  •  | 
  •  

Вопрос

Я новичок в программировании на C ++, и, чтобы не напрягаться, я пытался решить некоторые проблемы на projecteuler.net. . Несмотря на интерес к математике в школе, я обнаружил, что автоматически выбираю решение проблем грубой силой, а не ищу что-то обтекаемое или элегантное.

Это звучит как плохое мышление? Я чувствую себя немного виноватым, когда делаю так, но иногда быстро и грязно - это нормально ...

Это было полезно?

Решение

Я думаю, вы должны посмотреть, какова ваша конечная цель и каковы ваши ограничения.

Иногда метод грубой силы может решить проблему за 50 мс, испробовав каждую комбинацию решений и «умный». Решение может решить это за 10 мс. В этот момент менее умное, но более простое для понимания решение превосходит умное решение.

Однако есть некоторые проблемы, когда грубое принуждение будет не только не элегантным, но и просто не будет работать. Существует много проблем, при которых, если вы попытаетесь наивно применить грубую силу, их решение займет значительное время. Очевидно, что к этим типам проблем нужен более элегантный подход.

Итак, спросите себя, почему вы пытаетесь решить эти проблемы Project Euler? Вы делаете это, чтобы учиться? Тогда, возможно, попытка найти разумное решение будет в ваших интересах, но только после того, как вы изначально попробовали решение методом грубой силы, чтобы помочь понять проблему.

При решении задач Python Challenge я стараюсь делать это максимально лаконично, расширяя свои возможности. После того, как я ее решу, я проверяю ответы других людей и делаю пометки людей, которые были умнее меня и того, что они сделали. Некоторые люди будут специально использовать структуру данных, о которой я не думал, что она больше подходит для задачи, или у них будут небольшие математические приемы, которые они используют, чтобы сделать свой алгоритм более эффективным. В конце я стараюсь впитать в себя как можно больше их хитрости и показать, когда в следующий раз мне представится проблема аналогичного характера.

Другие советы

Нет, это не плохо. У меня были решения, которые были настолько изящны, что они были не правы.

Как начинающий программист, вы будете тратить больше своей умственной энергии на то, чтобы понять, как на самом деле реализовать вещи в C ++, вместо того, чтобы тратить энергию на поиск умного решения каждой проблемы. Это хорошо, потому что это дает вам возможность исследовать различные области C ++, работая над различными типами проблем.

Когда вы станете опытным в C ++ и вам не нужно будет думать о том, как сделать каждую мелочь, тогда вы сможете тратить больше времени на изобретения решений без перебора.

Элегантные решения не были созданы спонтанно; они были получены из решений для перебора, когда от текущего решения требовалось больше скорости или меньшее потребление памяти.

Так что нет, это не так. Так появились элегантные решения.

Я вроде прошел эту эволюцию:

<Ол>
  • Получить его для компиляции
  • Сделайте так, чтобы он работал как положено
  • Найдите одно решение, которое работает
  • Найдите одно хорошее решение
  • Определите несколько решений и найдите лучшее
  • Определите несколько решений и найдите лучшее для этой ситуации
  • ?? еще не добрался там
  • Я бы сказал, что нет, это не плохой знак. На самом деле вы делаете себе одолжение, избегая преждевременных оптимизаций, что, безусловно, хорошо.

    Кен Томпсон: "Если сомневаешься, используй грубую силу"

    обучение - это перебор. Я бы не сказал, что это плохо. Пытаясь сделать что-то таким образом, вы можете заметить закономерность. Я думаю, пока вы думаете о чем-то и пытаетесь найти решения, вы будете учиться. Лишь немногие люди переходят на самые элегантные или эффективные решения.

    Было бы трудно убедить меня, что людей, которые пытаются учиться, можно назвать плохими. За исключением, может быть, злого ученого: P

    удачи.

    Подходите ли вы к 1-минутному правилу времени выполнения проблем? Если да, то ваша "грубая сила" Решение отвечает всем требованиям, и это на самом деле очень хороший признак того, что вы можете быстро придумать что-то, что работает!

    Проблемы такого рода поощряют микрооптимизацию и очень умные алгоритмы, но в целом очень понятная и понятная реализация будет намного легче поддерживать и будет пользоваться популярностью в деловом мире.

    Если возникает ситуация, когда "грубая сила" = & GT; & Quot; простой & Quot; и "элегантный" = & GT; «сложный», тогда побеждает грубая сила. И это очень часто так.

    Совсем нет. Решите проблему правильно и полностью, а затем сделайте ее более производительной или элегантной, если это необходимо.

    Это не значит, что вы должны игнорировать очевидные улучшения производительности ... Просто не сосредотачивайтесь на них, пока не поймете проблему лучше.

    Чтобы поместить это в другой контекст:

    Когда вы используете библиотеку, которую вы не очень хорошо знаете (например, для создания пользовательского интерфейса), вы можете решить простую задачу совершенно быстрым способом, хотя вы знаете, что есть «правильный путь». сделать это. Если вы любопытны и обеспокоены тем, что из-за вашего грубого кода вы выглядите как идиот, вы скоро найдете «правильный путь». сделать это (например, по выходным или во время сна). Тем временем, благодаря грубой силе у вас будет что-то, что работает.

    На самом деле я иногда забываю использовать грубую силу и начинать сканирование API на предмет "правильного" положения. решение. Это определенно ошибка во многих случаях. Если решение для грубой силы легко внедряется, масштабируется по мере необходимости (действительно, если оно работает), тогда забудьте о правильном решении. Вы найдете его достаточно быстро (и много раз уже знал это!), но тем временем вы решили проблему и смогли перейти к следующему.

    Дорожные заграждения ужасны при кодировании, и их определенно следует избегать не только путем грубых решений.

    Это определенно не плохой признак склонности к грубой силе, особенно для новичка, потому что вы можете не знать ничего лучше. Особенно с Project Euler, это плохой признак для реализации метода грубой силы, а не просматривать комментарии, чтобы изучить более эффективный метод.

    Я часто бываю в той же лодке, в которой вы находитесь, и именно поэтому я начал делать P.E. проблемы - я применял много подходов грубой силы и хотел подвергнуть себя более изящным решениям ...

    Вы взвесили свой вариант. Если решение методом грубой силы выполнит работу и будет работать нормально, это хорошее решение.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top