다양한 알고리즘을 깊이 있게 마스터하고 싶다면 먼저 기초부터 닦으세요. 어느 정도 수준까지 닦은 다음 고급 알고리즘 책을 읽으세요.
저를 포함한 많은 사람들이 알고리즘이 그다지 중요하지 않다고 생각하는 경우가 있는데, 실생활에서 알고리즘에 대한 일반적인 코딩 작업은 요구 사항의 알고리즘 능력이 너무 낮다는 것을 인정해야 합니다. 사실 다양한 문제에 민감하고 다양한 기술을 잘 조합하는 것이 중요합니다.
프로그래밍은 데이터를 조작하고 결과를 출력하는 것입니다.
알고리즘과 데이터 구조는 서로 호환되며, 여러분이 마스터하고자 하는 주요 사항은 다음과 같아야 합니다:
어떤 알고리즘과 데이터 구조가 이 문제를 더 빨리 해결할 수 있는가?
이를 위해서는 일반적인 구조와 알고리즘에 익숙해야 합니다. 코드를 입력할 필요는 없습니다. 종이에 손으로 직접 작성하는 것이 더 빠른 방법입니다.
모르는 데이터 구조의 경우 주로 어떤 용도로 사용되는지, 사용 시나리오는 어떤 것인지 검색해야 합니다.
세세한 부분에서의 실수는 프로그래밍 언어에 익숙하지 않아서 생기는 문제이며 알고리즘을 알고 있는지 여부와는 무관합니다. 애플릿을 더 많이 작성해야 합니다. 암기식 코드는 멍청한 짓입니다.
사실, 너무 길을 잃은 것 같으니 차라리 stl 함수를 구현하는 게 낫겠네요.
제 경험은 시뮬레이션입니다(물론 시뮬레이션은 기본 알고리즘에 국한됩니다). 예를 들어 예전에 깊이 탐색과 재귀를 배운 적이 있는데, 수동으로 시뮬레이션을 해도 코드는 매우 간단하지만 스택이 포함되고 뇌는 짧은 시간에 스택 깊이의 몇 층만 저장하기 때문에 (임시 변수가 많을수록 뇌가 시뮬레이션 할 수있는 스택 깊이가 적습니다) 실제로 머리로 생각할 수 없습니다. 예를 들어 저는 처음에는 그래프 깊이 검색과 재귀를 배우는 것을 이해하지 못했습니다. 그래서 종이에 시뮬레이션을 해봤죠. 인접 테이블을 만든 후 코드 단계를 따라 펜과 종이를 이용해 단계별로 시뮬레이션하면서 점차 코드 워크플로우를 익혔습니다. 빠른 코딩을 배울 수 있나요? 물론 코드를 외워서 작성할 수도 있지만, 이해가 안 되고 금방 잊어버릴 수 있습니다. "알고리즘 입문"이라는 책에 자세한 구현이 포함되어 있습니다. 파티셔닝과 빠른 정렬 과정을 수동으로 시뮬레이션합니다. 처음부터 매우 간단한 사용 사례로 전체 프로세스를 직접 구현하면서 점차 이해하게 될 것입니다. 많은 알고리즘에는 루프 불변성이 있습니다. 코드가 논리적으로 정확하고 루프 불변성을 유지할 수 있다면 일반적으로 코드를 작성하는 것이 옳습니다.
알고리즘 또는 알고리즘 입문이라는 교과서를 구하는 것이 좋습니다. 알고리즘을 배운 후에는 알고리즘을 훑어본 다음 코드의 각 단계별 실행을 주의 깊게 분석하세요(종이와 연필로 시뮬레이션하거나 코드의 단일 단계 디버깅). 알고리즘을 제대로 이해했는지 확인한 후에는 코드를 보지 않고 직접 구현해 보세요.
물론 여러분이 많은 알고리즘을 작성하는 데 능숙하다고 생각하지는 않습니다. 요즘 대부분의 고급 언어는 반복해서 반복할 필요가 없으며, 여러분이 하는 작업의 품질은 라이브러리의 고수들보다 훨씬 낮습니다. 예를 들어 stl 소스 코드를 보면 코드 구현을 배울 수 있습니다. 실제 엔지니어링에 사용되는 코드와 일반적인 알고리즘 구현은 개선해야 할 점이 많습니다.
가장 중요한 것은 이러한 알고리즘을 작성할 수 있다는 것이 아니라 많은 아이디어를 배울 수 있다는 것입니다. 예를 들어 이분법, 재귀, 분할 및 정복, 동적 프로그래밍, 탐욕, 현실의 많은 데이터 구조의 추상화 등이 있습니다. 어려운 부분은 알고리즘을 배우는 것이 아니라 이러한 알고리즘 아이디어를 사용하여 문제를 해결하는 방법입니다.