알고리즘과 데이터 구조를 어떻게 배우나요? [닫은]


38

이것은 알고리즘과 데이터 구조를 배울 필요가 있는지 묻는 이전의 질문 과 계속됩니다 . 예라고 생각합니다.

이제는 실험이나 실습 또는 과제를 통해 배울 수없는 환경에서 일합니다. 알고리즘과 데이터 구조를 배우기 위해 6 개월 또는 1 년 또는 2 년을주기 위해 할 수있는 올바른 책, 올바른 종류의 문제, 올바른 종류의 리소스와 같은 올바른 접근 방법은 무엇입니까? 또한 문제를 데이터 구조 및 알고리즘과 관련시킬 수있는 방식으로 내 마음을 형성합니다.


3
Cormen은 당신의 친구입니다 :)
Lukasz Madon

1
@lukas : 그래도 아직 끝나지 않았지만, 거기에 익숙하지 않은 수학이 많이 있습니다. 그것은 알고리즘, 데이터 구조 및 분석에 대한 나의 지식에 훨씬 많은 도움을주었습니다. :)
Matthieu M.

당신은 또한 (구조, 방법, 알고리즘) ... 거의 모든 기사 souce에 코드를 위키 피 디아보다 더 노골적 인기 알고리즘과 데이터 구조에 대해 설명하고이 들어 내 프로젝트, 시도 할 수 en.algoritmy.net
malejpavouk

답변:


40

읽다.

아냐, 진짜 읽어봐

찾을 수있는 알고리즘 및 디자인에 대한 모든 것을 읽으십시오. 거기에는 경이로운 책이 있습니다. Sedgewick 알고리즘 북이 좋습니다. Skiena의 알고리즘 디자인 매뉴얼도 좋습니다. 이 책들은 신화적인 남자-월과 함께 내가가는 모든 직장에서 모든 책장에서 나를 따라 온다.

그런 다음 물어보십시오.

존경하는 사람들과 대화하십시오. 그들에게 어떤 결정 포인트가 있었으며 왜 그들이 결정을했는지 물어보십시오. 좋은 사람들은 항상 당신에게 "이런 방식으로 A, B보다 낫기 때문에 X를 선택했다.

다음으로하세요.

물건을 만드십시오. 절대 사용하지 않을 물건을 만드십시오. 절대 필요하지 않은 것들을 만드십시오. 스도쿠 퍼즐을 해결하는 프로그램을 작성하십시오. 이제 다시 해봐 다시 한번. 완전히 다른 방식으로 5 가지를 구축하십시오. 스도쿠 퍼즐을 생성하고 솔버에 공급하는 프로그램을 빌드하십시오. 가장 빠른 솔버를 찾으십시오. 그리고...

왜 그런지 찾아라.

"무엇"은 거의 중요하지 않습니다. 그렇습니다. 프로젝트를 마무리하는 것이 중요합니다. 그러나 "왜"를 모르고 "무엇"을 알고 있다면, 처음에는 절대하지 않았을 것입니다. 이력서에 총알이 있습니다. 쿠키를 구해서 축하해. "왜"는 "무엇"보다 훨씬 중요합니다.

그리고 기록을 위해 스도쿠는 예입니다. 나는 Kongregate의 많은 논리 퍼즐로 그 운동을하면서 많은 자유 시간을 보냈고 길을 많이 배웠습니다.

http://www.amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X/ http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/


정말 좋은 답변입니다! 나는 당신이 당신의 조언을 표현하는 방식을 좋아합니다!
paxRoman

나는 또한 Sedgewick과 Skienna 책을 어디서나 가지고 다닙니다! 그게 내가 당신의 대답을 사랑한 또 다른 이유 일 것입니다!
paxRoman

그리고 코멘을 섞어주세요.
AruniRC 2019

1
인터넷 정보가 점점 더 증가하는 시대에 책을 읽는 것은 물론 (독점적으로는 아닙니다) 추가하는 것이 중요합니다 . 2-3 개의 광고로 분리 된 HTML 페이지보다 긴 문제에 대한 일관성 있고 일관된 소개는 A Good Thing ™입니다 ! 과소 평가하지 마십시오 (물론 전자 책은 괜찮습니다).
Joachim Sauer

1
동의했다. 일관성이 핵심입니다. 수십 개의 다른 소스에서 하나 또는 두 개를 얻을 때 데이터 구조를 파악하기가 어렵습니다. 책은 또한 더 나은 다이어그램을 갖는 경향이 있습니다 (일부 블로그 / 온라인 소스가 있지만 일반화 책이 더 좋습니다). Sedgewick 서적에는 코드와 설명을 따르기 쉬운 다이어그램이 특히 잘 혼합되어 있습니다.
Hounshell

10

알고리즘

열두 살 때 그룹 환경에서 마술 수업을 들었습니다. 마술사의 이름은 Joe Carota였습니다. 그는 한 번 트릭을했고 "어떻게 했니?" 그는 그날 이후로 나와 붙어있는 그 무언가를 말했다.

Joe의 답변 "마이클, 그 트릭이 어떻게 수행되는지 정말로 알고 싶다면 어떻게해야할지 스스로 알아 내야합니다."

물론 그것은 내가 듣고 싶었던 것이 아니지만 문제 해결에 집중했습니다. 이것은 내 관점에서 문제를 해결하는 것이 었습니다. 문제를 해결하기위한 첫 번째 시도에서 17 단계를 거쳐 실제로 문제가 발생한 경우 좋은 소식은 문제를 해결했다는 것입니다.

그런 다음 내가 개발 한 솔루션을보고 해당 솔루션을 개선하는 방법을 찾아서 최종 결과를 능률화하는 방법을 배우게됩니다. 나중에 컴퓨터 프로그래밍 생활에서 나는이 과정이 "단계적 개선 (Stepwise Refinement)"이라는 것을 알게되었다. 오늘은 리팩토링이라고합니다.

그것은 효과가 있었고 지금도 여전히 효과가 있습니다.





1

데이터 구조 및 알고리즘에 대한 학부 수준의 과정에 등록하려고 시도하면 다른 개념과 함께 이러한 개념을 배우는 것이 좋습니다.


저는 컴퓨터 공학을 전공했으며 그 후 6 년이 지났습니다. 나는이 주제에 집중하지 않았습니다. 웹, 유용성, 클라이언트 서버, 저를 끌어 들였고이 분야에서만 일하고 있지만 이제는 그것들을 배워야한다고 생각합니다. 당신의 생각은 무엇입니까?
sushil bharwani

돌아가서 리프레쉬 코스를
밟으십시오

1

온라인 에서 구와 같은 고전적인 문제를 해결하는 작업을 시작하십시오 .이 사이트는 그렇게 멋져 보이지는 않지만 소년은 오늘날 사용중인 많은 중요한 데이터 구조와 알고리즘이 필요한 고전적인 프로그래밍 문제입니다.

솔루션은 C / C ++에서 JavaScript, Lisp, Smalltalk, 어셈블러 + 약 40 개까지 다양한 프로그래밍 언어로 제출할 수 있습니다. 따라서 원하는 프로그래밍 언어로 문제를 해결하는 데 전적으로 집중할 수 있습니다.


1

CLRS

이것은 지금까지 내가 가장 좋아하는 리소스입니다. 학부 컴퓨터 과학 알고리즘 과정에서이 도구를 사용하고 4 년 후이 책을 구입하여 MS Comp Sci 과정을 준비하기 위해 혼자 읽었습니다. 어떤 방법으로도 쉽게 읽을 수는 없지만 제시된 수학 / 증거 중 일부를 이해하고 선호하는 언어로 의사 코드를 구현하려는 경우 다소 무거운 가격표의 가치가 있습니다. 다른 사람들이 언급 한 알고리즘 디자인 매뉴얼은 문제 식별 학습을위한 훌륭한 리소스이지만 CLRS가 순수한 세부 사항에 더 적합하다는 것을 알았습니다.


0

당신은 항상 다음과 같은 것을 시도 할 수 있습니다 : http://codekata.pragprog.com/

나는 항상 독서와 반대로 생각함으로써 더 잘 배웠습니다. 그러나 답을 찾을 수있는 문서 / 읽기 자료가 있어야합니다.


0

책을 사십시오 , 이것을 빌리십시오 또는 이것을 훔치십시오! 나머지는 따를 것이다 :)

Rivest와 Cormen의 알고리즘 소개. 소개에서 Mergesort에 대한 설명을 지나면 처음에는 따라하기가 매우 어려울 것입니다. 모든 것이 아름답게 펼쳐집니다.

또한 책에 주어진 문제를 해결하면 더 나아질 것입니다. 나는 대학원을 졸업 한 후에도이 책에 참여하고 싶지 않았습니다. 그거 좋아요

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.