dydsj0920   6년 전

저는 알고리즘 학습 내용들을 좀 더 빠르게(?) 익히기 위해서 강의를 활용하고 있는데요. (혼자 공부하시는 분들 대단하십니다)

보면 내용들이 상당히 많습니다

특히 그래프만해도 크루스칼, 프림, 최소 스패닝트리, 벨만포드, 다익스트라..등등...

이런것들을 머릿속에 전부 저장하시고 계신가요? 아니면 어떤 문제에 직면했을때 아! 그때 배웠던게 생각난다 하시면서

다시 살펴보시는 편인가요? 컴퓨터처럼 모든 내용을 전부 집어넣어서 외우고 싶지만..쉽지가 않네요..

완강할때 쯤이면 앞에있는 내용들을 까먹기도 하구요..어떻게 공부하시고 기억하시나요? 노하우가 있을까요?

저는 완강하고 한번 더 빠르게 복습하는 편이지만...기억이 잘 안날때가 많은것 같습니다.

subinium   6년 전

그 과정들을 반복하면서 자연스럽게 외우게 되는 것 같아요

저도 너무 부족하고 아직 한참 멀었지만 위에 말한 기본 알고리즘은 하다보니 외우게 된게 대다수인것같네요 이런 식으로 하다보면 어려운 알고리즘도 외울 수 있지않을까요

그런 과정들이 PS를 공부하는 재미라 생각합니다ㅎㅎ

h0ngjun7   6년 전

알고리즘 혹은 자료구조를 새로 공부할 때, 가장 기본이 되는 것은 그 필요성과 원리를 이해하는 것입니다.

특정 자료구조나 알고리즘을 naive하게 구현했을 때에 어떤 성능을 보이고, 어떤 아이디어를 이용해서 보다 빠르게 계산하게 되는지 꼭 알아야합니다.

이러한 방법으로 학습을 하면 프림과 다익스트라의 차이점을 보았을 때, 전자는 힙에 간선의 가중치를 넣고, 후자는 경로의 가중치를 넣는 차이 밖에 없다는 것을 알게 되죠.

그리고 이 차이는 각각의 알고리즘이 해결하려는 문제의 정의(전자는 최소신장트리, 후자는 단일 시작점 최단경로)에서 비롯되기 때문에 암기할 필요도 없습니다.

그러면, 힙은 또 왜 쓰느냐... 매번 최소가 되는 간선 혹은 경로를 뽑아내는 연산을 빠르게 하기 위해서입니다.

끊임없이 "왜 이렇게 하면 알고리즘이 잘 작동하지?", "이 부분을 다른 사람들은 어떻게 구현했을까?", "이 부분을 저렇게 바꾸면 어떤 점이 달라질까?"를 고민하다보면, 여러 생각의 과정들이 간단하고 명료하게 정리가 되게 됩니다.

이렇게 정리가 된 사고(thinking)는, 문제를 풀 때에 정확하고 신속하게 문제의 본질에 접근하는데에 큰 도움이 됩니다.

dydsj0920   6년 전

조언 감사합니다!

댓글을 작성하려면 로그인해야 합니다.