데이터 구조 및 알고리즘 학습을위한 프로그래밍 언어 선택 [닫기]


79

프로그래밍 어떤 언어 당신은 추천 할 것입니다 배울 수 에 대한 데이터 구조와 알고리즘 에?

다음 사항을 고려하십시오.

  • 개인적인 경험
  • 언어 기능 (포인터, OO 등)
  • DS & A 개념 학습에 적합

프로그래밍 언어에 구애받지 않는 (수학적 관점에서 작성하고 의사 코드를 사용하는) 책이 있기 때문에 물어 봅니다. 이 중 하나에서 배우면 알고리즘을 코딩하고 실행할 프로그래밍 언어를 선택하고 싶습니다.

그런 다음 특정 프로그래밍 언어로 작성된 예제와 함께 DS & A 개념을 소개하는 다른 책이 있습니다.이 알고리즘도 코딩하고 싶습니다. 따라서 어느 정도 언어도 책을 선택합니다.

어느 쪽이든, 나는 언어를 선택해야하며, 전체적으로 하나를 고수하는 것을 선호합니다. 개인 언어 기본 설정을 제쳐두고이 목적에 가장 적합한 것은 무엇입니까?


특정 경우를 제외하고는이 질문에 답할 수있는 방법이 없으며 더 많은 정보가 필요합니다.
David Thornley

@David Thornley : 조금 개방적이기는하지만 정말 훌륭한 답변을 많이 받았습니다!
bguiz

알고리즘 및 데이터 구조의 에너지 (예전 : 시간) 효율성에 대해 많은 고민이 있습니다.이를 측정하려면 의미있는 숫자를 재현 가능하고 (쉽게) 얻을 수있는 시스템을 찾으십시오.
greybeard 2014

답변:


88

이 질문에 대한 답은 정확히 무엇을 배우고 싶은지에 달려 있습니다.

Python과 Ruby

Python 및 Ruby와 같은 고급 언어는 높은 수준이고 구문이 읽기 쉽기 때문에 종종 제안됩니다. 그러나 이러한 언어에는 모두 공통 데이터 구조에 대한 추상화가 있습니다. 자신의 버전을 학습 연습으로 구현하는 것을 막을 수는 없지만 다른 고수준 데이터 구조 위에 고수준 데이터 구조를 구축하고 있다는 것을 알 수 있습니다. 이는 반드시 유용하지는 않습니다.

또한 Ruby와 Python은 동적 형식의 언어입니다. 이것은 좋지만 초보자에게는 혼란 스러울 수 있으며 일반적으로 런타임까지 분명하지 않기 때문에 오류를 포착하기가 더 어려울 수 있습니다.

C는 다른 극단에 있습니다. 메모리 관리 방법과 같은 매우 낮은 수준의 세부 정보를 배우고 싶은 경우 좋지만 메모리 관리는 malloc () / free ()의 올바른 사용과 같이 갑자기 중요한 고려 사항입니다. 그것은 산만해질 수 있습니다. 또한 C는 객체 지향이 아닙니다. 그것은 나쁜 것은 아니지만 단순히 주목할 가치가 있습니다.

C ++

C ++이 언급되었습니다. 댓글에서 말했듯이 이것은 끔찍한 선택 이라고 생각합니다 . C ++는 단순한 사용법에서도 엄청나게 복잡하고 우스꽝스러운 양의 "잘못"이 있습니다. 또한 C ++에는 공통 기본 클래스가 없습니다. 이것은 해시 테이블과 같은 데이터 구조가 공통 기본 클래스에 의존하기 때문에 중요합니다. 명목상의 기본 클래스에 대한 버전을 구현할 수는 있지만 약간 덜 유용합니다.

자바

Java도 언급되었습니다. 많은 사람들이 Java를 싫어하고 언어가 매우 장황하고 더 현대적인 언어 기능 (예 : 클로저)이 부족하다는 것은 사실이지만 그 어느 것도 실제로 중요하지 않습니다. Java는 정적으로 유형이 지정되고 가비지 콜렉션이 있습니다. 즉, Java 컴파일러는 동적으로 입력 된 언어 (런타임까지)가 수행하지 않는 많은 오류를 포착하고 세분화 오류를 처리하지 않습니다 (Java에서 메모리 누수를 할 수 없다는 것은 아닙니다. 당연히 가능합니다). Java가 좋은 선택이라고 생각합니다.

씨#

C # 언어 는보다 최신 버전의 Java와 같습니다. Java와 마찬가지로 가상 머신에서 실행되는 관리 (가비지 수집) 중간 컴파일 언어입니다. C / C ++를 제외하고 여기에 나열된 다른 모든 언어도 가상 머신에서 실행되지만 Python, Ruby 등은 바이트 코드로 컴파일되지 않고 직접 해석됩니다.

C #은 기본적으로 Java와 동일한 장단점을 가지고 있습니다.

Haskell (기타)

마지막으로 Haskell, OCaml, Scheme / Lisp, Clojure, F # 등과 같은 기능적 언어가 있습니다. 이들은 모든 문제에 대해 매우 다른 방식으로 생각하고 어느 시점에서 배울 가치가 있지만 다시 배우고 싶은 것에 따릅니다. 함수형 프로그래밍 또는 데이터 구조? 나는 문제를 혼동하기보다는 한 번에 한 가지만 배우는 것을 고수 할 것입니다. 어느 시점에서 기능적 언어를 배우는 경우 (내가 권장하는) Haskell은 안전하고 훌륭한 선택입니다.

나의 충고

Java 또는 C #을 선택합니다. 둘 다 무료로 제공되는 훌륭한 IDE (Eclipse, Netbeans 및 IntelliJ Community Edition for Java, Visual Studio Express for C #, Visual Studio Community Edition)를 사용하여 코드 작성 및 실행을 쉽게 할 수 있습니다. 배열보다 복잡한 기본 데이터 구조와 직접 작성한 객체를 사용하지 않는 경우 기본적으로 C / C ++에서와 동일한 것을 배우지 만 실제로 메모리를 관리 할 필요가 없습니다.

설명하겠습니다. 충분한 요소가 추가되면 확장 가능한 해시 테이블의 크기를 조정해야합니다. 모든 구현에서 백업 데이터 구조 (일반적으로 배열)의 크기를 두 배로 늘리고 기존 요소를 복사하는 것과 같은 작업을 수행해야합니다. 구현은 기본적으로 모든 명령형 언어에서 동일하지만 C / C ++에서는 무언가를 올바르게 할당하거나 할당 해제하지 않을 때 세분화 오류를 처리해야합니다.

동적 타이핑이 처음에는 문제가 될 수 있기 때문에 Python 또는 Ruby (어떤 것이 중요하지 않음)가 다음 선택이 될 것입니다.


1
@cletus : 합리적인 답변에 감사드립니다! 어떤 DS & A 책 / 기타 지침 자료 (Java 또는 Python 용)를 추천 하시겠습니까?
bguiz 2010

3
@bguiz에 대해 별도의 질문을 할 수 있습니다. stackoverflow.com/search?q=book+data+structures+algoritms 를 참조하기 위해이 주제에 대한 몇 가지 질문이 있습니다. 검색에 [java] 또는 [python]을 추가하여이를 구체화 할 수 있습니다.
cletus apr

2
나는 이것에 불필요한 엄격한 OO 지향성 때문에 주로 Java와 C #을 사용하지 않을 것입니다. 게다가 : 요점이 데이터 구조를 학습 할 때 누가 일반 코드를 작성하는 데 관심이 있습니까? 제 생각에는 스크립팅 언어 (Python)를 선택하고 높은 수준에 초점을 맞추거나 낮은 수준의 언어 C / C ++를 선택하고 시스템 수준에서 어떻게 구현되는지 확인하려고합니다. 중간에 중지하는 것은 그만한 가치가없는 것 같습니다.
Matthieu M.

3
파이썬이 먼저 바이트 코드로 컴파일되지 않습니까? 나에게 뉴스 : docs.python.org/release/2.5.2/lib/bytecodes.html
Adam Crossland

이것은 의미가 없습니다. "해시 테이블과 같은 데이터 구조가 공통 기본 클래스에 의존하기 때문에 이것은 중요합니다." 해시 테이블은 해시 가능한 요소에 의존하지만 이것이 프로그래밍 언어에서 구현 될 수있는 방법에 대한 세부 사항은 데이터 구조의 추상적 인 정의와 관련이 없습니다.
pyon

45

Java주로 다음과 같은 이유로 추천합니다 .

  • 쓰레기 수거
  • 참조
  • 풍부한 컬렉션

편집 : 아래로 유권자는 설명하십시오.


3
왜 모두이 투표를하는 거죠?
Mantas Vidutis 2010

19
나는 당신이 자바를 좋아하지 않기 때문에 이것을 거부하는 것은 무책임하다고 생각합니다. Java를 좋아하지 않을 수도 있지만 학습 언어로 사용할 수있을만큼 간단합니다. 그래서 나에게서 +1.
cletus apr

7
+1. 내 선택은 아니지만 정말 끔찍하지 않습니다. 투표 점수는 COBOL을 제안한 것과 같습니다.
Rob Lachlan

4
초보자를위한 +1 이유 : 1. 정확히 메모리 할당 / 해제에 대해 걱정할 필요가 없습니다 (최소한 작은 프로그램의 경우). 그 대신에 지금 배워야 할 것에 집중할 수 있습니다. 2. 예, 교활한 포인터 나 포인터에 대한 포인터가 없습니다. 오해하지 마세요. 저는 C ++을 좋아합니다. 3. Java의 컬렉션은 아마도 내가 본 데이터 구조 중 가장 정제 된 집합 일 것입니다. 그들은 실제로 데이터 구조의 사전에 있어야합니다. :)
crunchdog

9
자신의 리소스 관리를 수행하는 방법을 이해하지 못한다면 데이터 구조에 대해 많이 배우지 않은 것입니다.
Alan

30

제 생각에는 C가 데이터 구조와 알고리즘을 배우는 데 가장 좋은 언어가 될 것입니다. 포인터, 동적 메모리 할당 및 연결 목록, 해시 테이블 등과 같은 인기있는 데이터 구조의 구현을 이해하도록 강요합니다.이 중 상당수는 상위 수준 언어 (Java, C # 등)에서 당연한 것으로 받아 들일 수 있습니다. ).


11
포인터와 동적 메모리 할당은 데이터 구조와 알고리즘에 대해 아무것도 가르쳐주지 않지만 달성하고자하는 것을 심각하게 방해합니다.
JD

1
나는 동의한다. 수십 개의 다른 언어를 다루고, 더 높은 수준의 고도로 추상화 된 언어를 먼저 배운 후 C / C ++를 배우기로 결심했을 때 고통 스러웠고 갑자기 나에게 설명되지 않은 많은 것들을 다루어야했습니다. 전에. C ++가 아닌 C를 먼저 배우는 것은 기계가 실제로 작동하는 방식을 보여주고 처음부터 데이터 구조를 만들도록 강제하는 모든 제한 사항이 있기 때문에 좋은 선택입니다. 모든 언어는 함수 (알고리즘 용)와 구조체 (데이터 구조용)입니다. 이론과 언어 간의 차이는 정말 작습니다.
Rafael Beckel

17

Python중대하다. 읽기 쉽고 모든 기능을 갖추고 있습니다. 의사 코드로 작업하려는 경우 Python은 매우 익숙해 보일 것입니다.

Python은 이미 UC Irvine 에서 선택한 알고리즘 언어 이며 다음과 같이 설명되어 있습니다.
" Python은 교육에 절실히 필요했던 알고리즘 지향 언어를 나타냅니다. Python의 장점은 실험을 장려하는 교과서와 같은 구문과 상호 작용을 포함합니다. . "

Python은 그래프 작성 도구 인 Gato 를 사용하여 초보자에게 친숙한 방식으로 작동합니다 . 학습 알고리즘 및 데이터 구조는 시각적으로 만들어 도움이 될 수있는 최고 중 하나입니다. Gato는 복잡한 그래프 라이브러리를 배우지 않고도 쉽게 할 수 있습니다.


@mvid : 당신이 추천하고 싶은 파이썬 기반 DS & A 책이 있습니까?
bguiz 2010

1
@bguiz : 개인적으로 읽지는 않았지만 Python에서 OO를 사용하는 알고리즘 및 데이터 구조에 초점을 맞춘이 무료 전자 책이 있습니다. brpreiss.com/books/opus7
Mantas Vidutis

파이썬은 굉장 할 수는 분리 문자로 공백 코딩 고려하는 경우에만 중대하다
Woot4Moo

구분자로서의 공백은 굉장합니다!
Marcel Valdez Orozco

나는 들여 쓰기의 구문 적 사용 때문에 파이썬을 개인적으로 싫어한다. 추가 nroff와 같은 정렬로 지원되는 중괄호 등에 기반한 구문보다 정렬 불량으로 인해 어리석은 버그를 찾는 것이 더 어렵다는 것을 알았습니다.
마이클

13

목적이 데이터 구조알고리즘 에 대해서만 배우는 것이라면 JavaScript라고 말하고 싶습니다. 브라우저에서 코드를 실행할 수 있습니다. 당신은 매우 유연한 객체 핸들링을 가지고 있으며, 당신이 배우고있는 실제 컴퓨터 과학에서 초점을 멀어지게 할 메모리 관리, 언어 구조 또는 다른 것들이 아닌 데이터 구조와 알고리즘에만 전적으로 집중할 수 있습니다.

또한 브라우저를 사용하여 DOM 및 캔버스를 사용하여 그래프와 트리를 렌더링함으로써 다양한 데이터 구조를 쉽게 시각화 할 수 있습니다.

수년에 걸친 CS 과정은 단순히 학습을 용이하게하는 새롭고 더 나은 언어 구현이 도착하여 실제 문제에 더 쉽게 집중할 수 있기 때문에 과목이 가르치는 언어를 변경하는 경향이 있습니다.


+1은 JavaScript를 통해 함수형 프로그래밍을 쉽게 배울 수 있고 웹 응용 프로그램을 개발할 수있는 광범위한 적용 가능성을 제공하기 때문입니다.
Dan Dascalescu

매우 사실입니다. 개발 도구 스 니펫에서 코드를 테스트합니다. 또한 비슷한 방식으로 데이터 구조를 작성할 수 있습니다. 연결된 목록이나 다른 구조가 내장되어 있지 않습니다. Eveything은 단지 객체입니다. 경쟁 프로그래밍을하지 않는 한 이진 검색, 시도 및 기타 모든 개념을 배우는 데 효과적입니다. 아니?
HalfWebDev

전적으로 동의합니다. 많은 의식과 뼈대없이 논리에 집중합시다.
jtroconisa

8

저항이 가장 적은 길을 가고 싶다면 Python. 불필요한 보일러 플레이트 등의 양은 최소화됩니다.

이상적으로는 C로 알고리즘을 배우고 싶습니다. 그래서 여러분은 메모리 수준에서 무슨 일이 일어나고 있는지 배울 수 있습니다. 또한 함수 언어로 알고리즘을 배우고 싶으므로 유사한 알고리즘이 영구 데이터 구조에서 어떻게 작동하는지 확인할 수 있습니다.

Knuth의 유명한 책 에는 많은 양의 (발명 된 플랫폼) 어셈블러 코드가 포함되어 있습니다. 슈퍼 하드 코어가되고 싶다면이 방법을 권장합니다. 하지만 개인적으로 알고리즘 수업을 진행할 때 C에서 일했습니다 (공개 : 불과 몇 년 전이었습니다). 나는 때때로 Knuth에서 몇 가지 문제를 해결하고 있지만, 알고리즘 학습을 위해 선택한 언어로 MMIX를 전적으로 사용할지 모르겠습니다. 약간 과잉이라고 느낄 것입니다.

편집하다 : 또한 당신이 익숙한 것에 달려 있습니다. 지금 알고리즘 텍스트를 통해 작업을 시작하고 C로 많은 작업을 해본 적이 없다면 Python이 정답입니다. 당신은 이것을 즐기고 싶기 때문에 언어가 극복하기위한 큰 장애물이되지 않기를 원합니다. 나도 알아.

마지막 요점 : 적어도 제가 알고리즘을 배우고있을 때 저는 종이 작업에 엄청난 시간을 보냈습니다. 나는 그것이 중요하다고 생각합니다. 무증상 등에 대해 배우고 싶다는 뜻입니다. 어떤 언어로든 알고리즘을 구현하는 데 모든 시간을 할애하는 것은 할 일이 아닙니다.


@Rob Lachlan : 추천하고 싶은 파이썬 기반 DS & A 책이 있습니까?
bguiz 2010

@bguiz : 내가 좋아하는 알고리즘에 관한 대부분의 괜찮은 책은 언어에 구애받지 않습니다-Cormen et al., Kleinberg 및 Tardos. 나는 정말로 언어를 기준으로 하나를 선택하지 않을 것입니다.
Rob Lachlan

8

나는 Ada를 제안 할 것이다. 범위 검사와 같이 다른 언어에서 찾을 수없는 데이터 구조를위한 기능 type Day is range 1 .. 31;도 있습니다. 또한 매우 엄격한 컴파일 타임 및 런타임 검사 (끄기로 선택하지 않는 한)가있어 구현에서 버그를 쉽게 찾을 수 있습니다.


8

Oberon-2 또는 Component Pascal . 마지막 항목은 첫 번째 항목의 상위 집합입니다.

아인슈타인은 "가능한 한 간단하게 만드십시오. 이 문구는 Niklaus Wirth 교수가 원래 Oberon 언어 보고서의 서문으로 선택했습니다. 그리고 위에서 언급 한 Oberon의 후손들도 마찬가지입니다.

프로그래밍 언어의 완전성에 관해서 저는 Antoine de Saint-Exupéry를 인용하고 싶습니다. "디자이너는 더 이상 추가 할 것이 없을 때가 아니라 더 이상 제거 할 것이 없을 때 완벽에 도달했다는 것을 알고 있습니다." . Wirth는 이것을 달성하지 못하더라도 올바른 길을 가고 있습니다. "Wirth programming languages ​​line"(Algol-> Pascal-> Modula-2-> Oberon-> Oberon-2)에서 각 후속 언어는 이전 언어보다 더 간단하고 동시에 더 강력합니다.

최소한의 놀라움의 원칙을 따르는 강력하지만 간단한 언어 . 강력한 정적 타이핑, 쉬운 객체 지향 기능, 가비지 콜렉션. 기능 목록은 크지는 않지만 생산적이면서 특히 초기 단계에서 일을 복잡하게하지 않는 것으로 충분합니다.

알고리즘과 데이터 구조를 배우고 싶다면 의미합니다. 그러나 언어가 "강력하다"면 (C ++, C #, Java, Python 등과 같은 많은 기능이 있음) 알고리즘과 데이터 구조가 아닌 언어 학습에 많은 시간을 낭비하게됩니다. 당신은 나무에 대한 숲을 볼 수 없습니다. =) 트리를 구문 요소 (및 기타 기능)로, 포리스트를 중요한 개념 (모든 알고리즘, 데이터 구조, OOP 등)으로 생각할 수 있습니다. 귀하의 언어로 된 기능 (트리)이 많을수록 뒤로 물러나서 개념을 이해하는 작업 (숲을보기 위해)이 더 복잡해집니다.

그러나 언어가 정말 강력하다면 (잘 입증 된 기능이 작음) 언어 자체가 2 위를 차지합니다. 나무가 너무 많지 않아서 몇 걸음 뒤로 물러날 수 있습니다. 그게 충분한 비유라고 생각합니다. =)

또한 알고리즘 및 데이터 구조에 대한 많은 책Algol / Pascal과 유사한 의사 코드를 사용하며이 언어로 예제를 쉽게 변환 할 수 있습니다. 그리고 Wirth의 "알고리즘 및 데이터 구조"책의 예제를 직접 사용할 수 있습니다. Oberon 에디션 (2004), PDF (1.2MB).

추가 링크 :


@kemiisto : uniuue, 소설, 답변 및 비유에 감사드립니다! Oberon-2도 살펴 보겠습니다.
bguiz 2010

2
속담의 영어 버전은 "나무를 위해 숲을 볼 수 없습니다."입니다.
Daniel Rose

6

"당신의 유일한 도구가 망치라면 당신의 모든 문제는 못처럼 보일 것입니다."

최소한 몇 가지 언어를 배우십시오.

또한 선택은 목적에 따라 다릅니다.

취미? Windows 세계에서 일하십니까? Linux / UNIX 제품군?

응용 프로그램 유형 : 비즈니스 대 과학; 하드웨어 드라이버 또는 응용 프로그램?

데스크탑 애플리케이션 또는 웹 애플리케이션?

몇 가지 제안이 있습니다.

(a) J (jsoftware.com에서 무료, APL의 후계자, J와 APL 모두 Turing 우승자 인 Ken Iverson의 창작물입니다. Turing상은 컴퓨팅 분야의 노벨상과 같습니다)을 확실히 배웁니다.

(b) Windows 세계에 있다면 .NET의 많은 부분이 c #에서 실행되기 때문에 c #으로 시작하십시오. 가능하다면 Microsoft Press에서 Tom Archer의 "Inside c #"사본을 받으십시오. Microsoft의 익스프레스 버전을 다운로드하여 무료 C # 개발 시스템을 얻을 수 있습니다.

(c) TDD / BDD 사용법을 배우십시오 ... 언어에 관계없이 먼저 단위 테스트라는 작은 테스트를 작성하십시오. 다음으로 단위 테스트를 통과하는 프로덕션 코드를 작성합니다. 한 번에 한 단계 씩 ... 사용하는 언어뿐 아니라 방법론이기도합니다.

(d) 어셈블러 언어 배우기 ... 어셈블러는 저수준이며 거의 기계어이므로이면에서 일어나는 일을 잘 이해할 수 있습니다.

(e) Windows 외부에서는 C ++를 권장합니다.

최고의 언어는 없습니다.

언어에 관한 것이라면 프로그래밍이 더 쉬울 것입니다.

매우 구체적인 알고리즘을 배우고 싶을뿐만 아니라 더 일반적인 패턴을 배우고 싶고 주어진 문제를 해결하기위한 접근 방식을 선택하는 데 도움이 될 수 있습니다.

한 가지는 확실합니다. 프로그래머가 되려고한다면 배울 것이 부족하지 않을 것입니다.


@bguiz 데이터 구조는 언어에 완전히 독립적 인 모든 의도에 사용할 수 있습니다. 이것이 다른 언어를 배우는 이유 중 하나입니다. 또한 좌절감과 슬픔을 유발할 수있는 미묘한 차이에 직면하게됩니다. 예를 들어, 데이터 유형 이름 지정 : SQL Server의 비트는 c #의 경우 bool이고 vb의 경우 부울입니다. 데이터 유형 크기도 다양합니다. 예를 들어 c #의 int는 32 비트로 고정되며 C ++에서는 크기가 플랫폼에 따라 달라집니다. 문자 세트는 데이터 구조 크기에도 영향을 미칩니다. 예, 7 비트 ASCII, 8 비트 ASCII, 유니 코드. 그런 다음 고정 크기 대 가변 등이 있습니다.
gerryLowry 2010

"데이터 구조는 언어와 완전히 독립적 인 모든 의도를위한 것일 수 있습니다." 가비지 컬렉션을 제공하지 않는 언어로 가장 순수하게 기능하는 데이터 구조를 구현하려면 기본적으로 가비지 수집기를 작성해야합니다. 그것은 심각한 장애입니다.
JD

OO에 능숙 해지면 선언적 프로그래밍을 다루도록하십시오.
수염이 희끗 희끗 한

4

표준 ML, OCaml, F # 또는 Haskell과 같은 대수 데이터 유형 및 패턴 일치를 사용하는 언어를 좋아할 것입니다. 예를 들어, 다음은 OCaml / F #으로 작성된 빨강-검정 이진 검색 트리를 재조정하는 함수입니다.

let balance = function
  | R(R(a, x, b), y, c), z, d | R(a, x, R(b, y, c)), z, d
  | a, x, R(R(b, y, c), z, d) | a, x, R(b, y, R(c, z, d)) ->
      R(B(a, x, b), y, B(c, z, d))
  | a, x, b -> B(a, x, b)

10
당신의 풍자에 감사드립니다.
ergosys

4

Lisp가 살펴볼 가치가 있다고 생각합니다.

나의 첫 번째 대학 프로그래밍 과정은 Lisp에있었습니다. 그 전에는 10 년 동안 여러 언어로 프로그램을 작성했습니다. 첫 번째 프로그래밍 과정이 지루할 거라고 생각했지만 틀 렸습니다.

Lisp는 구문이 매우 간단하기 때문에 매우 흥미로운 언어입니다. 초점은 구문에서 기능으로 이동합니다. 함수형 프로그래밍 스타일도 배우는 데 매우 가치있는 것입니다. Lisp 과정을 마친 후 Lisp가 가르쳐 준 새로운 개념 덕분에 완전히 새롭고 더 나은 방법으로 C ++로 프로그램을 작성하게되었습니다.

Lisp는 또한 코드와 데이터에 대해 동일한 표현을 사용하므로 코드를 즉석에서 생성 한 다음 실행하여 흥미로운 알고리즘 설계를 시작할 수 있습니다.


2

내가 틀렸을 수도 있지만 데이터 구조와 알고리즘이 프로그래밍 언어와 독립적이지 않습니까?

결국 데이터 구조는 데이터를 구성하는 방법 일뿐입니다. 모든 고급 언어가이를 지원합니다. 물론, 특정 언어에는 기본 데이터 구조 (예 : Java 또는 C ++ STL의 Collections Framework)를 구현하는 메커니즘이 있지만 선택한 프로그래밍 언어로 데이터 구조를 프로그래밍하는 것을 막지는 않습니다. 또한 알고리즘은 의사 코드로 작성되어 언어 독립적입니다.

나는 그것이 당신의 질문에 실제로 답하지 않는다는 것을 알고 있지만, 당신이 찾고있는 것을 파악하는 데 어려움을 겪고 있습니다. 데이터 구조 / 알고리즘 학습 또는 새로운 언어 학습.


1
@Pran : 알고리즘이 의사 코드에 있다는 것을 알고 있지만 의사 코드는 컴파일되지 않습니다. 저는 실습 형 학습자이므로 개념을 진정으로 이해하려면 컴파일하고 실행할 수있는 언어로 코딩해야합니다. 따라서 제 질문은 각 언어가 자신의 장단점을 가질 수 있다는 점에서 이것에 가장 적합한 언어가 무엇인지이며, 그중 일부는 다른 것보다 DS & A를 배우는 데 더 적합합니다.
bguiz 2010

@Pran : "내가 틀렸을 수도 있지만 데이터 구조와 알고리즘이 프로그래밍 언어와 독립적이지 않습니까?" 언어가 GC를 제공하지 않으면 작성해야 할 수도 있습니다.
JD


0

나는 C ++를 선호한다 :)


19
-1 C ++는 끔찍한 학습 언어입니다 (그리고 틀림없이 그 문장에서 "학습"한정자를 삭제할 수 있습니다).
클리 터스

4
그는 자신의 알고리즘을 C ++로 코딩하기 위해 C ++의 어두운 부분을 배울 필요가 없습니다. C ++는 완벽합니다.
Prasoon Saurav

9
따라서 C ++에서 DS에 대한 클래스를 시도하고 코딩하고 복사 생성자 대 등호 연산자 재정의, 참조 및 포인터가 범위를 벗어남, 잘못된 새 / 삭제로 인한 메모리 누수 간의 차이점을 파악하는 것이 좋습니다. 사용법 등? 이 모든 것이 C ++의 기본입니다.
클리 터스

5
하지만 요점은 파이썬이나 자바에서 그런 것들을 배울 필요가 없다는 것입니다. C ++는 훨씬 더 많은 초기 투자를 필요로하며 OP의 요청 된 기능에 더 가치가 없습니다.
Mantas Vidutis 2010

2
@cletus를 배우는 데 Javascript에 대한 유효한 이유가 권장되지 않습니까?
HalfWebDev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.