데이터 구조와 알고리즘에 계속 투자해야합니까? [닫은]


28

요즘에는 데이터 구조와 알고리즘에 많은 투자를하고 프로그래밍 퍼즐을 풀려고 노력하고 있습니다.
Java 및 Clojure로 코딩하고 해결하려고합니다.

나는 시간을 낭비하고 있습니까? 더 깊이있는 지식을 얻고 더 빠르게 코딩 할 수 있도록 이미 알고있는 기술과 프레임 워크에 더 많이 투자해야합니까?

데이터 구조와 알고리즘을 연구함으로써 더 나은 프로그래머가됩니까? 아니면 그 과목이 대학 시절에만 중요합니까?


5
어떤 데이터 구조와 알고리즘을 사용하고 있습니까? 어떤 프로그래밍 퍼즐을 사용하고 있습니까?
oosterwal

해시 테이블, 맵, 힙, 그래프, 트리 및 관련 알고리즘 (트래 싱, 해싱, 검색, 삽입, 삭제 및 일부 정렬 알고리즘)을 작업하려고합니다. 퍼즐은 TopCoder 및 Google Code Jam 대회에서 나온 것입니다.
Chiron

답변:


24

알고리즘 및 데이터 구조에 대한 최소한의 지식만으로도 대부분의 경력 전체를 중요하고 유용한 작업에 소비 할 수 있습니다.

최소 순서 알고리즘과 데이터 구조체에 대한 지식의 수준에 당신이 필요합니다, 성공합니다 :

  • 그들 중 대부분을 알고 있어야합니다 (때때로 새로운 것을 읽는 것을 포함하여)
  • 잘 테스트되고 작동하는 구현을 찾을 수있는 곳을 알 수 있습니다.
  • 알고리즘과 그 유용성을 비교할 수있다
  • 약간의 조정만으로 오픈 소스 예제에서 특정 환경으로 올바르게 복사 할 수 있습니다.

* 최대 *없습니다 . 원한다면 박사 학위 수준 이상의 연구를 할 수 있습니다. 유용성은 관심있는 직종과 가장 흥미롭고 보람있는 직종과 직접 관련이 있습니다.

즉, 대략적인 (절대적이지는 않지만) 지침으로 작업중인 언어, 프레임 워크 및 응용 프로그램의 수준이 낮고 자원 집약적이며 자동화 수준이 낮을수록 필요한 기술 수준이 높아집니다. 알고리즘 및 데이터 구조. 예를 들어, 어셈블리에서 Ukkonen의 알고리즘 을 구현 하면 알고리즘 및 데이터 구조에 대한 마스터 수준의 이해를 원할 것입니다.

Java 개발 배경에서 iO 작업에 이르기까지 특정 상황에서는 알고리즘과 데이터 구조에 대한 일반적인 이해가 약간 더 높아질 것으로 예상됩니다. 사용 가능한 리소스가 적은 장치에서 효율적으로 실행할 수 있습니다. 또한, 무기고에 두 가지 새로운 카테고리를 추가 할 것으로 예상됩니다. 특히, 메모리 관리에 대해 더 알고 싶습니다.


2
매우 동의합니다. 필요한 대부분이 이미 기본 라이브러리에 포함되어 있기 때문에 알고리즘을 직접 처리 할 필요가 거의 없습니다. 그러나 특정 사용 사례에 적합한 알고리즘이나 구조를 선택하기에 충분한 성능 특성을 이해하지 못하면 문제가 발생할 수 있습니다. 당신이 알고리즘에서 일하고 싶어하지 않는 한 영업 이익은, 당신은 많이 얻을 수있는 많은 , 많은 다른 라이브러리와 도구와 기술을 배우기 보낸 시간에 대한 투자에 더 나은 수익을.
quentin-starin의

1
어쨌든 파이썬으로 Ukkonen의 알고리즘을 작성하는 것은 어렵습니다. 조립에서 알고리즘을 수행하는 것을 상상할 수 있습니다.
rjzii

2
이것은 "알고리즘 비교"요점에 속하지만 공간과 시간의 복잡성 사이의 균형점을 알아야한다는 것을 설명하고 싶었습니다. 속도로 인해 데스크탑에서 일반적으로 사용되는 많은 알고리즘은 큰 데이터 구조가 필요하기 때문에 iOS에서 실행 가능하지 않을 수 있습니다.
Karl Bielefeldt

3
동의하지 않습니다. 간단한 이유는 누군가가 알고리즘이나 디자인 또는 아키텍처를 배우는 데 시간을 할애 할 때 단지 언제 / 어떻게 사용할 것인지가 아닙니다. 그것은 사람을 더 똑똑하게 만들고 다른 문제를 해결하면서 학습을 사용할 수 있습니다. 또한 일을 최적으로 수행하는 감각을 장려합니다. 예를 들어. 모든 것을 위해 손으로 만든 알고리즘이 없을 수도 있지만 많은 것을 알고 있기 때문에 독자적으로 특별한 것을 얻을 수 있습니다.
Geek

14

아냐 방금 시작한 경우 UI 프로그래밍과 같은 큰 그림으로 들어 가려고하면 등이 막히게됩니다. 결국 거기에 가서 더 큰 프레임 워크를 배워야합니다. 다른 사람들이 작성한 데이터 구조와 알고리즘을 사용하는 방법. 제한된 범위의 문제를 고수하는 것이 좋지만 처음 시작할 때입니다.

알고리즘과 데이터 구조는 기본적으로 초보자 단계를 지나면 결코 자신의 것을 쓰지 않더라도 기본적으로 모든 것의 기초입니다. 그것들을 알고 있거나 최소한 알고 있으면 결국 더 나은 개발자가 될 것입니다. 작동 방식을 알기 때문에 각각을 언제, 왜 사용해야하는지 알 수 있습니다. 또한 알고리즘 및 데이터 구조를 일반화하여 인터페이스 X를 사용하여 모든 유형 또는 유형에서 작동 할 수 있도록하는 것은 실제로 경력의 나머지 부분에서 사용하는 것입니다.

나는 Ct에 대한 지식이 전혀없는 질문을하는 Qt와 같은 사람들을 너무 많이 보았습니다 (예 :). 너무 많은 단계를 건너 뛰려고하지만 결국 배우는 데 시간이 더 걸립니다. 나는 당신이 올바른 길을 가고 있다고 말하고 싶습니다.


저는 2007 년부터 전문적으로 Java 프로그래밍을 해왔습니다. 이제는 iOS 개발을하려고합니다.
Chiron

9

당신은 당신의 시간을 낭비하지 않습니다.

업무 중에 이전에 사용하지 않은 도구 또는 프레임 워크를 사용해야하는 경우이를 배우고 사용하게됩니다.

그러나 이전에 사용하지 않은 데이터 구조 또는 알고리즘을 사용해야하는 경우 데이터 구조 나 존재 여부를 알지 못할 가능성이 높으며, 더 많이 사용되는 끔찍한 차선책을 사용하여 문제를 해결할 수 있습니다. 노력과 비늘이 정말 심합니다.

내가 말하려는 것은, 이것은 단지 당신이 행함으로써 배우는 것이 아니라 , 학업 상황에서, 또는 개인적 노력으로 당신이 배우는 동안 배우면서 배울 필요가 있다는 것입니다. 지금하고 있어요


6

실제로 사용 가능한 데이터 구조, 복잡성 특성, 구현 방법 및 알고리즘 소개 사본을 보관하여 나중에 세부 정보를 찾아 볼 수있는 위치를 알고 있어야합니다 .


1

그것이 당신을 행복하게 만드는 것이라면, 반드시 그것을 고수해야합니다. 이론을 충분히 적용하지 못하는 것이 걱정된다면 이론이 많은 프로젝트를 고려하십시오. Potion 과 같은 작은 프로그래밍 언어 를 처음부터 작성하십시오. 완전한 구현에는 해시 테이블, 그래프, 트리 및 거대한 알고리즘이 사용됩니다. 흥미로워 보이는 경우 최적화, 기본 코드 생성 또는 사용자 확장성에 대해 자세히 알아볼 수 있습니다.

실용적이지만 약간 둔한 프로젝트를 수행 할 때가 아니라 관심과 집중력을 유지할 때 더 나은 프로그래머가됩니다.

토끼 구멍 아래로 도로시!


1

OpenGL을 사용하여 C / C ++에서 해킹하는 데 많은 시간을 보냈습니다. 나는 언어와 API를 충분히 알고 있습니다 ... 그리고 그 경험 때문에 합리적인 개발자와 프로그래머가되었습니다. 즉, 다양한 문제를 해결하는 데 필요한 실제 알고리즘 지식 은 실제로 파악할 수 없었습니다.

개인적인 경험에서 말하면 응용 프로그램 작성에 집중하는 것은 문제의 영역에 대한 이론을 모르는 경우 시간 낭비가 될 것입니다.

여러 종류의 소프트웨어의 경우, 이러한 영역은 고유 한 틈새 기반 이론 (예 : 컴퓨터 그래픽의 선형 대수, 암호의 숫자 / 정보 이론 등) 외에도 알고리즘 연구에서 배운 기본 사항에서 비롯됩니다.

당신은 반드시 모든 것 뒤에 계산적 위즈 키드가 될 필요는 없지만,이 포스트 시점에하고 있던 일을하는 것은 프로그래밍 여정에서 적어도 한 번 내려갈 수있는 매우 필수적인 경로입니다. 그들은 스스로 가르친 것이 아닙니다.


0

잘 모르면 사용 이유를 찾지 못할 것 같습니다. 나는 항상 그들을 위해 용도를 찾는 것 같습니다. 그러나 지난 반여 년 동안 제네릭의 개선으로 자신의 롤링 필요성이 점점 줄어들고 있음을 인정해야합니다. 그래도 사용 방법과시기를 아는 이점을 제거하지 못하고 복잡한 코드를 크게 단순화 할 수 있습니다.

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