나는 주로 Top Coder에서 많은 문제를 해결합니다. 나는 많은 사람들에게 답을 얻을 것이지만, 대부분 비효율적 인 솔루션으로 끝납니다.
실제 구현에서 문제에 대한 솔루션이 효율적이라는 것이 정말로 중요합니까? 그렇다면 어떻게 개선 할 수 있습니까?
나는 주로 Top Coder에서 많은 문제를 해결합니다. 나는 많은 사람들에게 답을 얻을 것이지만, 대부분 비효율적 인 솔루션으로 끝납니다.
실제 구현에서 문제에 대한 솔루션이 효율적이라는 것이 정말로 중요합니까? 그렇다면 어떻게 개선 할 수 있습니까?
답변:
최선의 해결책은 (중요도를 높이기 위해) 효율적이고 유지 보수 가능 하며 수행 되는 솔루션입니다 .
^^^ 이것이이 답변에서 실제로 필요한 유일한 것입니다. ^^^
효율성이 중요 합니다. 아마도 우리의 풍부한 하드웨어 때문일 수도 있지만 성능은 특징 입니다. 경쟁에서 효율성은 분명히 중요합니다. 효율적인 코드 작성 방법을 알아야합니다. 더 중요한 것은 애플리케이션의 적시성 또는 유지 관리 성을 희생하지 않고 효율적이고 우수한 성능의 코드를 생성하는 모범 사례를 알아야합니다. 이것은 실제로 플랫폼과 언어에 대한 심도있는 경험이 많은 수확량을 반환하는 곳입니다.
더 중요한 것은 (95 %의 경우) 완성되고 유지 보수가 가능한 솔루션을 보유하고 있다는 것입니다. 완제품이 없으면 솔루션의 효율성 또는 유지 관리 가 중요하지 않습니다 . 버그를 추적하고 수정하거나 새로운 기능을 추가하는 데 엄청난 시간이 걸리더라도 솔루션의 효율성은 중요하지 않습니다. 그러나 효율성과 성능은 다른 사람의 의견에 관계없이 의심 할 여지없이 중요합니다.
나는 Mike Cellini에 동의 할 것입니다.
"충분히 효율적인"것이 있습니까? 예를 들어, 사용자 관점에서 0.00001 초에 완료되는 함수와 0.1 초에 완료되는 함수 사이에는 차이가 크지 않지만 하나는 다른 것보다 훨씬 효율적입니다. 10 분 안에 완료되는 기능은 사용자에게는 12 분 안에 완료되는 것과 크게 다르지 않습니다. 두 경우 모두 사용자는 커피 한 잔을 받거나 다른 작업을 수행하게됩니다.
효율성은 효율적인 알고리즘이 아닌 "효율적인 사용자"로 보았습니다.
일반적으로 문제에 대한 가장 중요한 해결책은 실제로 존재하며 문제에 대해 존재하는 경우에 유효한 것입니다. 다른 말로하면, 비효율적 인 코드가 있거나 실제로 더 빠른 코드가 필요하다는 사실을 알 때까지 조기 최적화를 피하십시오 .
또한 응용 프로그램에 가장 적합한 솔루션이 일반적인 사례 솔루션이 아닐 수도 있습니다. 사례와 요점, 몇 년 전 교수는 우리 수업에 주어진 유형의 처음 10 숫자를 인쇄 해야하는 문제를 줬습니다 (죄송합니다, 유형에 대한 기억이 나에게 실패하지만 더 특이한 숫자 중 하나였습니다) 우리는 숫자가 주어진 유형인지 확인하기 위해 테스트를 받았습니다. 이것은 우리가 겪은 문제의 범위였으며 다음 날에 가장 효율적인 솔루션으로 신용을 얻었습니다. 다음 강의에서는 결과를 요약했습니다.
최종 솔루션은 교수가 가장 효율적으로 판단했습니다. 문제는 실제로 문제를 완전히 이해하고 외출하고 가장 효율적인 솔루션을 찾는 것이 아니라는 사실을 밝혀 냈습니다.
위의 요점은 효율적인 솔루션 문제를 찾을 때 일반적으로 코드를 시작하거나 작성하거나 코드를 최적화하기 전에 문제가 무엇인지 실제로 이해하도록 시간을 보내는 것이 좋습니다. 상수 배열에 일련의 참조 값을 저장할 수 있다면 멋진 알고리즘을 작성하는 것보다 성능 관점에서 수행하는 것이 좋습니다.
마찬가지로, 대부분의 응용 프로그램에서 비효율적 인 코드를 보는 경향이있는 사람들 (불필요하게 비효율적이지 않은 경우)은 개발자 자신이라는 것을 잊지 마십시오. 당신이해야 할 일을 정확하게하는 깨끗한 코드를 작성한다면, 사용자가 프로그램을 사용할 때와 언급 한 부분을 최적화 할 때 성능 문제를 느끼지 못할 확률이 높습니다. 당신.
즉, 대회의 구조에 따라 다르지만, 일반적으로, 예 : 성능이 고려에 따라, 대부분의 시간이다 자신의 문서 . 때때로, 나중의 링크에서와 같이 사냥을해야하지만 인용해야합니다.
깨끗하고 명확하며 효율적인 코드를 작성하십시오. 이를 위해 특별히 검토 광고 항목이 없지만 검토자는 읽고 이해하기 쉬운 코드에 더 잘 반응 할 가능성이 높습니다. 효율적인 코드를 사용하면 스트레스 및 벤치 마크 테스트에서 잠재적 인 성능 이점을 얻을 수있을뿐만 아니라 검토 자로부터 유용한 정보를 얻을 수 있습니다.
이를 개선하는 가장 좋은 방법은 이미 수행중인 효율적인 코드를 작성하는 것입니다. 작업을 완료하더라도 경쟁이 끝난 후에도 효율성을 개선하는 데 시간을 투자하면 그 결과를 얻을 수 있습니다.
알고리즘 관련 서적과 같은 이론에 투자 하여 특정 문제를 해결하는보다 효율적인 도구와 해결해야 할 문제를 식별하는보다 효율적인 메커니즘을 제공 할 수도 있습니다.
솔루션의 효율성은 여러 요인에 따라 다릅니다. 가장 큰 것은 사용자가 원하는 것을 아는 것입니다. 몇 가지 예가 있습니다.
코드를보다 효율적으로 만드는 방법 :
최적화에는 전 분야가 있지만 위의 두 가지 팁은 적어도 시작해야합니다.
경쟁을 위해서는 판사가 누구인지, 그들이 무엇에 관한 것인지 이해해야합니다. 훌륭한 코더를 찾고 있다면 더 효율적인 코드를 얻을 수 있습니다.
일반적으로 현실 세계에서는 중요하지 않습니다. 소프트웨어 개발의 핵심 아이디어 중 하나는 "최적화 필요를 모르는 것을 최적화하지 마십시오", "필요한 것으로 입증 된 경우에만 최적화"입니다.
많은 실무자들은 이것이 쉽게 고칠 수없는 부풀어지고 비효율적 인 코드로 이어지고 어떤 경우에는 (대부분의 코더들이 매일 매일하는 것처럼 울부 짖는) 경우가 맞다고 주장합니다. 그러나 소프트웨어 개발 프로젝트는 많지 않지만 "성능 : 필요 이상으로 빠름, 비용 : 누가 돌보고, 배달 시간 : 몇 십 년", 실제로는 "저렴한 것을 원합니다. 어제 원합니다." 작동합니다. "