저는 CS 학생이며 솔직히 Knuth의 책을 이해하지 못합니다.


52

나는 빌 게이츠의 인용문을 우연히 발견했다. "모든 내용을 읽을 수 있다면 반드시 이력서를 보내야한다." 그는 The Art of Programming 서적 에 대해 이야기하고있었습니다 . 그래서 나는 매우 호기심이 많았고 모든 것을 읽고 싶습니다. 그러나 솔직히, 나는 그것을 이해하지 못한다.

난 정말 그렇게 지적되지 않습니다. 이것이 내가 이해할 수없는 이유 여야하지만 배우고 싶어합니다. 현재 기본 알고리즘에 관한 1 권을 읽고 있습니다. 저와 같은 초보자 / 느린 사람들에게 친숙한 책이 있습니까? 나중에 Knuth의 책을 쉽게 읽을 수 있도록 지식을 쌓는 데 도움이 될까요?


흠 나는 그것을 이해한다고 말하고 (너도 나도 추측한다), 많은 시간이 걸리고 요즘에는 더 쉬운 책들이있다 ..
Nils

22
읽기 어려울 수도 있고 쉬운 책이있을 수도 있지만 어쨌든 읽어야합니다. 나는 지금까지 첫 번째 책을 읽었으며 그 안에있는 모든 것을 이해하지 못합니다! 그러나 그만한 가치가 있습니다. 컴퓨터 과학은 어렵다 . 당신이 그것을 이해하기에 충분히 똑똑하지 않다는 것을 빨리 알수록, 그것을 배우는 방법을 빨리 배울 수 있습니다.
Michael K

2
그들은 수학 프로그래머에게 기울어 진 수학입니다. CS는 최근 몇 년간 진화했으며 수학적으로 유용하지 않은 많은 유익한 영역이 있습니다. 더 발전하려는 방향은 무엇입니까? 그것이 알고리즘과 같은 것이라면, 아마도 잘 읽히고, 다른 영역이라면, 당신의 시야를 넓힐 것이지만, 일부 생물학 주제에 관한 책을 읽는 것만큼이나. 따라서 지역에 따라 미션 크리티컬에서 거의 쓸모없는 곳까지 어디든지있을 수 있습니다.
Coder

1
프로그래머는 언제 빌 게이츠의 권위를 고려합니까?
Giorgio

2
Coursera 에는 알고리즘 (알고리즘 파트 1 및 2, 알고리즘 설계 및 분석 파트 1 및 2, 분석 조합 파트 1 및 2)에 대한 6 개의 무료 코스가 있습니다.
Anthony

답변:


39

심지어 Knuth의 책은 약간 발전되어 이해하기 어렵다고 생각합니다. 이 책들은 확실히 연구 수준의 알고리즘 전문가 IMHO를위한 것입니다.

저와 같은 초보자 / 느린 사람들에게 친숙한 책이 있습니까?

CLRS의한 알고리즘 소개 는 훨씬 간단합니다.

편집 :

여전히 Knuth의 책을 읽으 려면 먼저 콘크리트 수학을 거쳐야합니다 . Knuth는 학생들 이 알고리즘 분석 의 기본 수학 부분을 알고 싶어 합니다.


5
알고리즘 디자인 매뉴얼은 더 쉽고 더 접근하기 쉬워 – 읽기 재미에 가깝습니다
Martin Beckett

알고리즘 소개는 훌륭한 책입니다. 우리는 이것을 첫 번째 CSE 알고리즘 과정에 사용했고 그것을 좋아했습니다. 비록 내가 그것을 이해한다고 말하기 위해 동일한 예제를 통해 많은 반복을 보냈다고 말해야하지만.
Chris

4
@SidCool : 12 개의 새로운 섹션 이있는 CLRS 3 판이 있습니다.
Bill the Lizard

10
크 누스의 책은 프로그래밍의 전쟁과 평화입니다. 그것들은 훌륭하지만 대부분 책꽂이를 인상적으로 보이게하는 데 사용됩니다.
Gaurav

6
"Knuth의 책이 약간 발전된 것 같아?" 겸허 eh :)
occulus

57

이것을 포함하여 모든 Gates의 인용문을 읽으십시오.

"나는 그것을 읽을 수있는 엄청난 훈련과 몇 달이 걸렸다. 나는 20 페이지를 공부하고, 일주일 동안 버리고 다시 20 페이지를 다시 찾아왔다. 세상이 깊고 복잡하다는 것을 이해하도록 도와주십시오. "

그들은 쉬운 책이 아니며 의도 된 것이 아닙니다. Knuth의 목표 중 하나는 컴퓨터 과학에 수학적 엄격함을 제공 하는 것이 었습니다 . 알고리즘에 대해 무언가 를 증명 하고 싶을 때 좋지만 작동 방식을 알고 싶을 때는 그리 좋지 않습니다.

Michael Dorfman은 Stackoverflow에 대한 (현재 삭제 된) 질문에 대한 답변에서 책을 읽는 데 도움 이되는 몇 가지 유용한 팁을 제공합니다. . 담당자가 10k가 아닌 경우에도 웨이 백 머신 에서 질문과 답변을 볼 수 있습니다 .

많이 읽음으로 무엇을 얻을 수 있습니까? 컴퓨터 과학의 훌륭한 기초. 로직 게이트부터 컴파일러까지 컴퓨터가 작동하는 방식을 이해합니다. 당신은 당신이 정말로 알지 못했던 문제가 문제라고 생각할 것입니다 (즉, 가장 빠른 곱하는 방법은 무엇입니까?).

나는 "소프트웨어 제작에 관해 읽지 않고 소프트웨어를 구축하라"고 말하는 사람들에 대해 완전히 동의하지 않습니다. 소프트웨어 공학과 컴퓨터 과학의 학문에는 차이가 있습니다. TAOCP는 후자에 관한 것입니다.

아직 시작하지 않은 경우 몇 가지 권장 사항이 있습니다.

먼저, 4 권으로 시작하고 싶을 수도 있습니다. 매우 흥미로운 최신 자료이며 Knuth의 유머 감각이 빛납니다. 또한 Knuth가 다양한 섹션을 설명하는 비디오 (Stanford SPCD 사이트 또는 Stanford iTunes)를 사용할 수 있습니다. 이 비디오는 적극 권장됩니다. Volume 4의 Fascicles 0, 1, 2, 3 및 4는 별도의 페이퍼 백으로 제공됩니다. 함께 출판 된 V4 자료는 처음 3 권 중 어느 것보다 크지 만 한 입 크기의 간식으로 나뉩니다. (각각의 책이 단일 장의 단행본 형태로 출판 된 경우, 1 ~ 3 권이 사람들에게 덜 무서운 것처럼 보일지 궁금합니다 ...)

수학 배경에 따라 1 장을 처음으로 훑어보고 필요에 따라 다시 시작하는 것이 좋습니다. 실제로, 당신은 아마도 각 부분을 (최소한) 두 번 읽는 것이 좋을 것입니다. 첫 번째로 빨리, 논쟁의 직관과 요지를 이해하고 천천히 각 단계를 이해하는 것이 좋습니다.

MIX의 이전 섹션 대신 MMIX의 Volume 1, Fascicle 1을 읽으십시오. MMIX는 여러면에서 더 좋으며, 두 세계를 모두 가로 지르는 것보다 텍스트의 MIX를 MMIX로 변환하는 것이 좋습니다.

일반적인 규칙 : 연습을 건너 뛰지 마십시오. 질문과 답변에는 좋은 자료가 많이 있습니다. 당신이 할 수있는 한 많은 운동을; 그러나 그것들을 모두 읽으십시오 (문제에 대해 총을 맞았거나 합격하기로 결정한 후에는 답변을 읽으십시오).

마지막으로, 실제로 버그를 발견하면 색인을 읽으십시오. 많은 농담이 숨겨져있었습니다.

당연히 StackOverflow는 문제가 발생하면 텍스트에 특정 질문을 게시하기에 좋은 장소입니다 ....

다른 자료를 위해, 나는 유명한 컴퓨터 과학 학교의 강의 계획서 탐색이 유용하다는 것을 알았습니다. 예를 들어, 알고리즘 클래스를 시작하기위한 교과서 :


SO에 대한 링크가 끊어졌지만 비슷한 게시물을 발견했습니다. stackoverflow.com/questions/1022167/…
asjohnson

Way Back Machine의 원래 게시물 및 해당 대학의 도서 목록 +1
Anthony

Volume 4, Fascicles 0, 1, 2, 3 및 4로 시작하고 MIX 대신 MMIX에 대해 읽는 것이 좋습니다. 결과적으로 Volumn 1, Fascicle 1로 시작하겠습니다. MMIX를 다루기 때문입니다.
Shaun Luttin

Java / c 프로그래머 인 저는 <Java의 데이터 구조 및 알고리즘 분석>이 이해하기 쉽고 연습하기 쉽다고 생각합니다.
Eric Wang

29

Knuth는 역사상 가장 존경 받고, 인용되고, 이야기되고, 존경받는 컴퓨터 과학 작가입니다. 그의 책은 모든 심각한 소프트웨어 개발자의 책장을 장식하며, 사람들이 성경과 예술의 전쟁을하는 것과 같은 수준의 존중으로 언급됩니다.

심지어 어떤 사람들은 크 누스의 책을 실제로 읽었다 고 들었습니다 .

대부분의 사람들은 단지 의도 합니다.

개인적으로 은퇴를 위해 저축하고 있습니다


22
그렇기 때문에 잘 사용 된 사본은 새로운 것보다 더 가치가 있습니다!
Martin Beckett

13
전쟁의 기술을 이해한다면, 사람들이 Knuth를 이해하지 못했을 때 이해한다고 생각하고, 반대로 Knuth를 이해하지 못한다고 생각하게 만들면된다는 것을 알게 될 것입니다. 그렇지 않다면 그렇지 않습니다. 그리고 5 개의 반지의 5 권 책을 이해한다면 Knuth에 대해 말할 필요도 없습니다. 그리고 ESR의 The Art of Unix Programming을 읽고 개념을 이해한다면, 복잡성의 장벽을 뛰어 넘어 Knuth가 필요하지 않습니다.
Christopher Mahan

20

Knuth의 책은 알고리즘 분야를 영원히 바꿔 놓았습니다. 그는 자신의 '내 책에있는 2 페이지는 누군가의 모든 경력 작업'이며 그의 책은 읽기가 어렵다고 말했다. 이 책에는 컴퓨터 과학 분야에서 수년간 일한 정보가 포함되어 있습니다.

이해할 수 없다면 기분 나쁘지 않아야합니다.

Prasoon이 말했듯이 CLRS는 읽기 쉬운 책입니다.

또한 이해하기 쉬운 Rajasekaran, Sahni 등의 알고리즘도 있습니다.


정말 놀랍습니다 .. 나는이 책을 읽는 데 어려움을 겪고있는 유일한 사람이라고 생각했습니다. 대단히 감사합니다
Rho

7
@Raymond Ho : 누구도 Knuth의 책을 읽는 것을 좋아하지 않는다고 생각합니다. 나는 선반을 인상적으로 보이게하기 위해 책장에 적어도 한 사람이 있다는 것을 알고 있습니다.
FrustratedWithFormsDesigner

12

내가 처음 졸업했을 때 나는 TAOCP의 첫 세 권을 자신에게주는 졸업 선물로 집어 들었고 그것을 직접 읽으려고 시도했다. 절대 관리하지 마십시오. 요즘 나는 처음 세 권의 1/3 (특정 순서는 생각하지 않았 음)을 통해 그것을 만들었습니다. 이 자료는 확실히 조밀하지만 많은 도움이 된 세 가지 팁이 있습니다.

먼저, 표지를 읽지 마십시오. TAOCP는 실제로 많은 참조 작업이며, 해결하려는 문제와 관련이있는 섹션을 읽는 것이 가장 좋습니다. 전 세계의 많은 것들과 마찬가지로 해결하려는 문제에 직면하면 솔루션을 이해하는 것이 훨씬 쉽습니다.

다음으로, 책 앞의 순서도는 유머가 아니라 실제로 유용한 팁입니다. 가장 중요한 개념부터 시작하여 부드럽게 수학에 대해 깊이 이해하면서 반복적으로 작업중인 섹션을 읽으십시오.

마지막으로, 좋은 구식 종이와 연필을 설명 된대로 알고리즘을 통해 작업하기에 편리하게 유지하고 몇 가지 쉬운 문제를 해결하십시오. 읽고있는 내용을 다시 강화하는 데 도움이됩니다.


10

걱정하지 마십시오. 대부분의 사람들은 TAOCP (Art of Computer Programming)를 이해하지 못합니다. 따라서 자신을 느리게 이해하거나 이해하지 못하는 초보자로 생각하지 마십시오. 당신은 그것을 이해하지 못하는 다른 99.99 %와 같습니다.

꽤 야심 찬 당신이 TAOCP 읽을 수있는 수준에 도달 할 경우 쉽게를 . 나 자신도 책을 버리기 전에 책을 훑어 보았다. 이 지구상에는 TAOCP를 이해하는 소수의 사람들 만이있을 것입니다.

게시물을 확인하십시오 : Books Programmers 는 Bill the Lizard 의 글을 읽지 않습니다 .

있다 다른 책의 많은 확실히 거기에 나열된 읽기 , 이해는 , 당신은 할 수 즉시 혜택 .

나는 개인적으로 좋아한다 :


8

빌 게이츠의 인용문을 우연히 발견했습니다. "모든 내용을 읽을 수 있다면 반드시 이력서를 보내야합니다." 그는 The Art of Programming 서적에 대해 이야기하고있었습니다. 그래서 저는 매우 궁금해서 책을 읽고 싶지만 솔직히 이해하지 못합니다 I'm really not that highly intellectual being. 그래서 .. 이것이 이해할 수없는 이유입니다. , 그러나 배우고 싶어합니다 .. 나는 현재 기초적인 알고에 관한 1 권을 읽고 있습니다. 저와 같은 초보자 / 느린 사람들에게 친숙한 책이 있습니까? Knuth의 책을 편하게 읽을 수 있기를 바랍니다.

자신을 not a highly intellectual being다음 과 같이 정의 하면 기대치가 낮아집니다. 문제가 될만한 일을하고 싶다면 그 정신을 빼야합니다. 무언가를 성취 할 수 있다는 것은 의심 할 여지가 없습니다. 또한 그것을 달성한다고해서 쉽게 달성한다는 의미는 아닙니다.

추구 할 가치가있는 것은 어렵고 진부한 것이 아닙니다. 소프트웨어, 엔지니어링, 일반적으로 인생에서 무언가를 달성하려면 어려운 일, 사람들이 피하는 일, 가장 낮은 공통 분모에 대해서는 정착하지 않아야합니다.

먼저, CS 배경이 무엇인지 명확하지 않습니다. 크 누스의 책은 어느 정도 성숙해야합니다. CS 학위를 가진 사람들은 쉽게 통과 할 수 없습니다. 방금 알고리즘에서 첫 번째 과정을 마친 CS 학생이 실제로 Knuth의 책 중 하나를 통과 할 것으로 기대하지는 않습니다. 그것을 얻는 데 필요한 성숙은 거기에 없으며 학생의 정신 능력과는 아무런 관련이 없습니다.

기본 알고리즘은 차갑고 명확해야하며, 벨트 아래에 상당한 양의 프로그래밍 (작업 및 / 또는 학력)이 있어야합니다. 또한 CS 수학을 확고한 기반에 두어야합니다.

이산 수학 (및 계산 이론)을 잘 이해하지 않고는 앞으로 나아갈 수 없습니다.

Knuth의 문제를 해결하기 위해 지식이 필요하지는 않지만 그러한 유형의 자료를 살펴볼 수있는 성숙도가 필요합니다.

먼저 한 권의 책과 한 권의 책만 선택하십시오 (이전에 제안 된 CLRS의 책). 처음부터 끝까지 작업하십시오. 가능하면 알고리즘을 구현하는 프로그램을 수행하십시오. C ++이 아닌 Java 또는 C #을 사용하지 마십시오. 베어 본 C로 가서 베어 본 금속 스크랩으로 물건을 짓는 느낌을 얻으십시오.

이산 수학과 계산 이론을 배우지 않은 경우 "콘크리트 수학"에 대한 Knuth의 책을 얻으십시오. 그 책을 살펴 보는 것도 좋을 것입니다.

그런 다음 Knuth의 백과 사전, 하나의 주제, 한 번에 하나의 장을 다루십시오. 첫 번째 장을 잘 이해하지 않고 다른 장으로 가지 마십시오.

먼저 볼륨 I (기본 알고리즘), 볼륨 III (검색 및 정렬)을 수행하는 것이 좋습니다. 그것들은 당신의 즉각적인 목표가되어야합니다. 그런 다음 나중에 (더 나중에) 볼륨 IV (Combinatorial Algorithms), 볼륨 II (Semi-Numerical Algorithms)를 다룹니다.

처음에 이해가되지 않으면 기분 나빠하지 마십시오. 나는 몇 년 동안 (지금 10 년 동안) 볼륨 I과 III을 통과하려고 노력해 왔습니다.

그리고 당신은 그것에 너무 많은 무게를 두어서는 안됩니다. 누군가 나 자신에게 무언가를 증명하기 위해하지 마십시오. 당신이 있기 때문에 그것을 지적 그렇게 관심. CLRS의 서적 (또는 훌륭한 고급 서적 중 하나)을 사용하여 알고리즘에 능숙해질 수 있습니다.

실용적으로 휴식을 취하십시오. Knuth의 책을 훑어 보는 것은 CS 자료라는 즉각적인 증거가 아니라 장기적인 개인적인 야심으로 취급하십시오.)

;) 자신을 죽일 다른 중요한 것들이 있습니다 ()


2
참고 : 볼륨 III의 이름은 두 번이고 볼륨 II의 이름은 두 개의 다른 이름으로 지정되지 않습니다.
대안

알려 주셔서 감사합니다 (+1). 내가 의미 한 순서는 다음과 같습니다. 첫 번째 볼륨 I (기본 알고리즘), 다음 볼륨 III (검색 및 정렬), 볼륨 IV (조합 알고리즘) 및 볼륨 II (
반수

6
+1 우리가 감히하지 않는 것이 어렵 기 때문이 아닙니다. 우리는 그들이 어렵다는 것을 감히하지 않기 때문입니다. - 세네카
mouviciel

4

크 누스 (Knuth)를 시작하기 전에는 네 권의 다른 책을 훑어보아야했습니다. 처음 두 가지는 알고리즘에 관한 Sedgewick 책 입니다. 이 장에서는 대부분의 알고리즘과 데이터 구조를 실제 구현 된 형태로 보여 주므로 알고리즘의 정의와 작동 방식을 확인할 수 있습니다. 이 책들은 다른 언어 버전으로 제공됩니다. 저는 C로 읽었지만 iirc는 원래 Pascal로 작성되었으며 C ++ 및 Java 버전이 있습니다.

그 후 나는 알고리즘에 관한 Cormen 책의 많은 부분을 연구했으며 Sedgewick and Flajolet의 알고리즘 분석에 대한 소개를 Cormen 책보다 Knuth의 수학적 엄격함에 더 가깝기 때문에 무료 텍스트로 사용했습니다. 나는 아직도 이것들 중 하나를 끝내지 못했다. 주로 내가 생각하는 부분을 체리 따기.

그것들을 읽고 수학 학위를 얻은 후에 TAOCP의 일부 를 읽을 수는 있지만 읽기는 어렵습니다. 그것이 유용하지 않다고 말하는 것은 아닙니다. TAOCP는 가장 훌륭한 알고리즘 참조 매뉴얼 중 하나이지만,이를 사용하여 어떤 문제를 "완전히"이해할 수 있다고 생각하는 것은 다소 문제가 있습니다.

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