문제

저는 초보자 C ++ 프로그래머이고 내 마음을 늘리기 위해 몇 가지 문제를 시도해 왔습니다. projecteuler.net. 학교에서의 수학에 대한 관심에도 불구하고, 나는 간소화되거나 우아한 것을 찾는 것이 아니라 문제에 대한 무차별적인 힘 솔루션을 자동으로 가고 있다는 것을 알게되었습니다.

이것은 나쁜 사고 방식처럼 들리나요? 나는 이런 식으로 그렇게하는 죄책감을 느낀다.

도움이 되었습니까?

해결책

나는 당신이 당신의 최종 목표가 무엇인지, 그리고 당신의 제약이 무엇인지 살펴 봐야한다고 생각합니다.

때로는 Bruteforce 방법이 50ms에서 모든 솔루션의 조합을 시도해 보면 "영리한"솔루션이 10ms에서 해결할 수 있습니다. 그 시점에서, 덜 영리하지만 이해하기 쉬운 솔루션은 영리한 솔루션을 능가합니다.

그러나 무차별 강제력이 부적절 할뿐만 아니라 단순히 작동하지 않는 몇 가지 문제가 있습니다. 순진하게 무력한 힘을 시도하면 그들을 해결하는 데 상당한 시간이 걸릴 수있는 많은 문제가 있습니다. 따라서 이러한 유형의 문제는보다 우아한 접근이 필요합니다.

그렇다면 왜이 프로젝트 euler 문제를 시도하고 있습니까? 배우기 위해하고 있습니까? 그런 다음 영리한 솔루션을 시도하는 것이 가장 큰 관심사 일지 모르지만 처음에는 무차별 인력 솔루션을 시도한 후에야 문제를 파악할 수 있습니다.

파이썬 챌린지 문제를 수행 할 때 나는 할 수있는 가장 간결한 방법으로 내 능력의 한계를 뛰어 넘으려고 노력합니다. 내가 그것을 해결 한 후에 나는 다른 사람들의 대답을 검토하고 나보다 영리한 사람들과 그들이 한 일에 대한 정신적 메모를한다. 어떤 사람들은 내가 생각하지 않은 데이터 구조를 특별하게 활용하여 작업에 더 적합하거나 알고리즘을보다 효율적으로 만들기 위해 사용하는 수학적 트릭이 거의 없습니다. 결국 나는 가능한 한 많은 영리함을 흡수하려고 노력하고 다음에 비슷한 성격의 문제를 제시 할 때 보여줍니다.

다른 팁

아니요, 이것은 나쁜 것이 아닙니다. 나는 너무 우아한 솔루션을 가지고 있었다.

초보자 프로그래머로서, 당신은 각 문제에 대한 영리한 해결책을 찾는 데 에너지를 소비하기보다는 C ++로 실제로 사물을 구현하는 방법을 알아내는 데 더 많은 정신 에너지를 소비 할 것입니다. 다양한 종류의 다양한 문제를 해결하면서 C ++의 다양한 영역을 탐색 할 수있는 기회를 제공하기 때문에 이것은 괜찮습니다.

C ++에 능숙 해지고 모든 작은 일을하는 방법에 대해 생각할 필요가 없으면 그 다음에 비 브루트 포스 솔루션을 발명하는 데 더 많은 시간을 할애 할 수 있습니다.

우아한 솔루션은 자발적으로 만들어지지 않았습니다. 이들은 현재 솔루션에서 더 빠른 속도 이하의 메모리 소비가 필요할 때 무차별 용액에서 파생되었습니다.

그래서 아니요, 그렇지 않습니다. 우아한 솔루션이 어떻게 생겼는지입니다.

나는이 진화를 겪었다 :

  1. 컴파일하십시오
  2. 예상대로 작동하게합니다
  3. 작동하는 하나의 솔루션을 알아 봅니다
  4. 좋은 솔루션 하나를 알아 내십시오
  5. 여러 솔루션을 파악하고 최고를 찾으십시오
  6. 여러 솔루션을 알아 내고이 상황에 가장 적합한 것을 찾으십시오.
  7. ?? 아직 거기에 없었습니다

나는 아니요, 그것은 나쁜 신호가 아니라고 말할 것입니다. 사실 당신은 조기 최적화에서 멀어지면서 호의를 베풀고 있습니다. 이것은 확실히 좋은 일입니다.

Ken Thompson : "의심스러운 경우 무차별 인력을 사용하십시오"

학습은 무자비한 힘 과정입니다. 나는 그것의 나쁜 말을하지 않을 것입니다. 그런 식으로 무언가를하려고 할 때 패턴을 알 수 있습니다. 나는 당신이 무언가에 대해 생각하고 배우는 솔루션을 찾으려고 노력하는 한 생각합니다. 가장 우아하거나 효율적인 솔루션으로 점프하는 사람은 거의 없습니다.

배우려고하는 사람들이 나쁘게 불릴 수 있다고 확신하기는 어려울 것입니다. 악한 과학자를 제외하고 : p

행운을 빕니다.

문제에 대해 1 분 런 타임 규칙에 맞습니까? 그렇다면, "Brute Force"솔루션은 모든 요구 사항을 충족하며 실제로 효과가있는 무언가를 빨리 생각할 수 있다는 매우 좋은 신호입니다!

이러한 종류의 문제는 미세 최적화와 매우 영리한 알고리즘을 장려하지만 일반적으로 매우 읽기 쉬운 간단한 구현은 유지하기가 훨씬 쉽고 비즈니스 세계에서 선호 될 것입니다.

"Brute Force"=> "simple"및 "el 그리고 이것은 매우 종종 사실입니다.

전혀. 문제를 정확하고 완전히 해결 한 다음 필요에 따라 더 성능이 있거나 우아하게 만듭니다.

그것은 당신이 명백한 성능 개선을 무시해야한다고 말하는 것이 아닙니다. 문제를 더 잘 이해할 때까지 집중하지 마십시오.

이것을 다른 맥락에 넣으려면 :

잘 모르는 라이브러리를 사용하면 (예 : UI를 만들기 위해) 완벽하게 수행되는 방식으로 간단한 문제를 해결할 수 있지만, "올바른 방법"이 있다는 것을 알고 있습니다. 당신이 호기심이 많고 무차별 대표 코드가 당신을 바보처럼 보이게한다면, 곧 (예 : 주말 또는 잠을자는 동안) 할 수있는 "올바른 방법"을 찾을 수 있습니다. 그 동안, 무차별적인 힘을 통해, 당신은 작동하는 무언가를 가질 것입니다.

나는 실제로 때때로 무차별 힘을 사용하는 것을 잊고 "올바른"솔루션에 대한 API를 스캔하기 시작합니다. 이것은 많은 경우에 분명히 오류입니다. Brute Force 솔루션을 쉽게 구현할 수있는 경우 필요한 경우 (실제로 작동하는 경우) 비늘을 비축하면 올바른 솔루션을 잊어 버리십시오. 당신은 곧 그것을 찾을 수있을 것입니다 (그리고 당신이 이미 이미 알고있는 경우가 많았습니다!). 그 동안, 당신은 문제를 해결하고 다음 문제로 갈 수있었습니다.

코딩 할 때로드 블록은 끔찍하며 잔인한 힘 솔루션 이상을 피해야합니다.

더 나은 것을 알지 못할 수도 있기 때문에 특히 초보자로서 무자비한 힘을 추구하는 것은 나쁜 신호가 아닙니다. 특히 Project Euler의 경우 무차별 인력 방법을 구현하고보다 효율적인 방법을 배우기 위해 의견을 검토하지 않는 것은 나쁜 신호입니다.

나는 종종 당신이있는 같은 보트에서 끝나고 실제로 PE 문제를 시작한 이유입니다. 나는 많은 무차별적인 힘 접근 방식을 구현하고 있었고 더 우아한 솔루션에 나 자신을 노출시키고 싶었습니다 ...

당신은 당신의 옵션을 평가했습니다. Brute Force 솔루션이 작업을 완료하고 확인하면 좋은 솔루션입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top