책의 알고리즘.


358

폴 에르 도스는 하나님이 각 수학 정리의 가장 우아한 증거를 유지하는 "책"에 대해 이야기했습니다. 이것은 심지어 책 (내가 지금 제 4 판에 있다고 믿는다) : 책의 증거에서 영감을 얻었습니다 .

하나님이 비슷한 알고리즘 책을 가지고 있다면 어떤 알고리즘이 후보라고 생각합니까?

가능한 경우 클릭 가능한 참조 및 작동하는 핵심 통찰력을 제공하십시오.

답변 당 하나의 알고리즘 만 사용하십시오.


11
좋은 질문입니다! [편집 :} 하나의 질문입니다. 알고리즘과 데이터 구조 사이의 선을 어디에서 그리나요? 알고리즘에 대한 주요 통찰력이 데이터 구조와 밀접한 관련이있는 경우 (예 : 역 Ackermann 함수의 UNION FIND)?
로스 스나이더

4
훌륭한 출처이자 아마도 그러한 책의 후보는 "알고리즘 백과 사전" springer.com/computer/theoretical+computer+science/book/…
Marcos Villagra

21
다른 사람들이 꽤 까다로운 알고리즘 (KMP, 선형 접미사 배열)을 "책에서"가져온 것으로 간주한다는 것에 약간 놀랐습니다. 나에게 "책에서"는 단순하고 명백하지만 의미는 오직 후시입니다. 다른 사람들이 "우아한"을 어떻게 해석하는지 궁금합니다.
Radu GRIGore

49
@supercooldave 당신은 신을 믿지 않아도되지만 그의 책을 믿어야합니다. ;-)
Ross Snider

10
Erdős는 1985 년 강의에서 "신을 믿지 않아도되지만 책을 믿어야합니다"라고 말했습니다.
Robert Massaioli

답변:


116

Union-find 는 최고의 알고리즘 / 데이터 구조 ( Disjoint Set Forest )가 스파게티 스택을 기반으로하는 아름다운 문제입니다 . 지능적인 어린이에게 설명하기에는 매우 간단하고 직관적이지만 런타임에 밀접한 관계를 갖기까지 몇 년이 걸렸습니다. 궁극적으로 그 행동은 역행 Ackermann 함수와 관련이있는 것으로 밝혀졌다.이 함수는 계산에 대한 관점에서 변화가 일어났다 (실제로 Hilbert의 On the Infinite에 포함되어 있음 ).

Wikipedia는 Disjoint Set Forests에 대한 좋은 소개를 제공합니다 .


109

Knuth-Morris-Pratt 문자열 일치. 지금까지 볼 수있는 가장 매끄러운 8 줄의 코드입니다.


4
그것은 언젠가는 분명하지 않았으며, 지금까지 생각해 냈기 때문에 지금은 분명하다는 것을 깨달았습니다. 저는 Carr의 역사 이론을 수학과 컴퓨터 과학에 적용해야한다고 생각합니다 .
Ritwik Bose

1
설명에 따르면 이것이 Boyer-Moore 빠른 하위 문자열 검색과 관련이 있다고 말할 수 있습니다.
bart

2
@Mechko이 알고리즘이 별도의 사람들에 의해 동시에 독립적으로 발견되었다는 사실은 어느 정도 명백하다는 것을 나타냅니다. "명백한"것은 프로젝트 제약과 더 넓은 프로그래밍 환경의 함수입니다. (1) 빠른 텍스트 검색 및 (2) 진정한 O (n) 알고리즘의 중요성을 알고 있고 (3) 이전에 부분적으로 일치하는 텍스트를 발견 한 경우 (4) 시간이 있습니다 "올바른"일을하기 위해서는이 알고리즘이 명백 할 것입니다.
Matt Gallagher

에서 인터뷰 크 누스는 알고리즘에 대한 아이디어는 스티븐 쿡의 연구에서 나온 것이라고 말했다 양방향 유한 자동 기계를 회문을 위해.
Kaveh

@Kaveh 원래 KMP 용지에서 섹션 7 (역사적 비고)을 읽으십시오. 대단한 발언이 있습니다. Morris는 "시스템의 다른 구현 자들이 이해하기에는 너무 복잡했습니다"라는 텍스트 편집기를 작성했습니다. Knuth에 대하여 "Komath의 경험에서 처음으로 automata 이론은 이전에 해결할 수있는 것보다 실제 프로그래밍 문제를 더 잘 해결하는 방법을 가르쳐주었습니다". 그리고 "Knuth는 Morris가 Cook의 정리를 알지 못하고 알고리즘을 이미 발견했다는 사실을 알게되었습니다." 장난.
Hendrik 1

93

블룸, 플로이드, 프랫, Rivest에, 그리고 Tarjan의 알고리즘은 할 수 찾기 K 정렬되지 않은리스트의 요소 일 아름다운 알고리즘 선형 시간을, 그리고 숫자이기 때문에에만 작동 바로 마스터 정리에 맞게. 다음과 같이 진행됩니다.

  1. 5 개 요소의 각 순서를 정렬하십시오.
  2. 각각의 중앙값을 선택하십시오.
  3. 이 목록의 중앙값을 찾기 위해 반복합니다.
  4. 중간 값의 중앙값을 피봇 팅 (Quicksort에서와 같이)
  5. 목록에서 올바른면을 선택하고 해당 목록에서 위치를 정한 후 반복하십시오.

3
이것은 내가 가장 좋아하는 알고리즘 중 하나입니다. 그룹의 중간 값의 집합 : 나는 Chazelle의 불일치 책에서 배운 그것에 대한 직관처럼 된 객체처럼 ε의 입력 번호의 정렬 된 목록의 간격에 대한 -net을. 따라서 알고리즘은 일반적인 패러다임을 따릅니다. ϵ- net을 빠르게 계산하고 , 네트에서 문제를 해결하고, 입력의 일부를 재귀하여 정확한 솔루션을 얻을 때까지 솔루션을 세분화하십시오. 그것은 매우 유용한 기술입니다1/ϵϵϵ
Sasho Nikolov

5
BTW 일단 그룹의 크기를 매개 변수화하면 상수는 그렇게 마 법적이지 않습니다. 그들은 물론 마스터 정리에서 옳은 일을하도록 최적화되었습니다
Sasho Nikolov

Ruby 구현, gist.github.com/chadbrewbaker/7202412 (일정한, 로그) 공간을 사용하는 알고리즘 버전이 있습니까, 아니면 중앙값을 유지하기 위해 선형 스크래치 공간을 사용해야합니까?
Chad Brewbaker

2
"이 숫자는 마스터 정리에 딱 맞기 때문에 작동합니다"라는 주장은 사실이 아닙니다. 당신이 번호를 교체하는 경우 큰 숫자로 N ,이 두 숫자 이하로 정리해 볼 쉬운 일이 수렴 3 / 40 , 그래서 모든 충분히 큰 n 개의 작업을. 5 는 작동하는 첫 번째 숫자 일 뿐이며 유일한 숫자는 아닙니다. 5n13/40n5
Will Sawin

88

이진 검색 은 내가 본 것 중 가장 단순하고 아름답고 유용한 알고리즘입니다.


나는 우아함을 직관적으로 바꿀 것입니다. 그것에 대해서는 그다지 우아하지 않습니다. 단순함은 진정한 아름다움입니다.
로버트 마사이 올리

@Robert Massaili : 나는 우아함을 아름답게 바꿨습니다. 당신이 옳았어요
michalmocny

2
그리고 정확하게 작성하기가 어렵습니다
jon

첫 번째 대학원 알고리즘 과정에서 15 분 동안 퀴즈를 풀면서 2-3 문제를 직접 해결해야했습니다. 첫 번째 퀴즈에는 이진 검색 트리와 힙에 대한 두 가지 질문이 포함되었습니다. 나는 이진 검색 문제가 잘못되었다는 것을 알게되어 창피하고 당황했다. 약 30 명의 수업에서 두 ​​가지 정답이 있다고 들었다. 그러나 전문 커뮤니티가 제대로되기까지 15 년이 걸렸다는 사실은 놀랍습니다.
Stella Biderman

84

모든 쌍의 최단 경로에 대한 Floyd-Warshall 알고리즘 이 보이지 않는 것에 놀랐습니다 .

d[]: 2D array. d[i,j] is the cost of edge ij, or inf if there is no such edge.

for k from 1 to n:
  for i from 1 to n:
    for j from 1 to n:
      d[i,j] = min(d[i,j], d[i,k] + d[k,j])

가장 짧고 분명한 사소한 알고리즘 중 하나이며 성능은 O ( nO(n3) 에지. 다이나믹 프로그래밍의 저의 포스터 아이가 될 것입니다!O(n2)


2
이 알고리즘은 정말 깔끔한 방식으로 일반화 될 수도 있습니다. 예 : r6.ca/blog/20110808T035622Z.htmlcl.cam.ac.uk/~sd601/papers/semirings.pdf
Mikhail Glushenkov


73

다소 다른 것처럼 보일 수 있지만 (특히 다른 답변과 비교할 때) Quicksort 는 정말 우아 하다고 생각합니다 . 처음 보았을 때 정말 복잡하다고 생각했지만 이제는 너무 단순 해 보입니다.


10
Quicksort는 또한 알고리즘의 본질이 무엇인지에 대한 흥미로운 질문을 제기합니다. 예를 들어, 표준 우아한 Haskell 구현 표준 의사 코드 정의와 똑같이 보이지만 점근 적으로 복잡성이 다릅니다. 그렇다면 Quicksort는 단지 분할 및 정복에 관한 것일까 요, 아니면 현명한 현장 포인터 인증이 Quicksort의 필수 부분입니까? Quicksort를 순전히 기능적인 설정으로 구현할 수 있습니까? 아니면 변경이 필요합니까?
Jörg W Mittag

2
알고리즘의 "본질"또는 "도덕"에 대한 아이디어는 물론 Melissa E. O'Neill ( cs.hmc.edu/~oneill/papers/Sieve-JFP) 의 아름다운 논문 The Eratosthenes의 진짜 체에서 나온 것입니다. pdf 및 quicksort 토론은 해당 논문에 대한 LtU 토론 ( lambda-the-ultimate.org/node/3127 ) 에서 비롯되며, 특히이 의견 부터 시작합니다 : lambda-the-ultimate.org/node/3127/#comment-45549
Jörg W Mittag

8
@ Jörg : 링크 된 목록에 퀵 정렬을 구현하는 것은 완전히 합리적이며 배열에 대한 자체 구현과 동일한 점근 적 실행 시간 을 갖습니다 (배열에 대한 순진한 외부 구현도 동일한 실행 시간을 가짐) – 둘 다에서 평균과 최악의 경우. 공간 사용량은 실제로는 다르지만 "in-place"버전에서도 일정하지 않은 여분의 공간 (호출 스택!)이 필요하다는 사실을 반드시 간과해야합니다.
Konrad Rudolph

또한 Vladimir Yaroslavskiy의 Dual-Pivot Quicksort도 언급 할 가치가 있습니다. 최소한 20 % 더 빠른 원본 퀵 정렬 permalink.gmane.org/gmane.comp.java.openjdk.core-libs.devel/…
SaveTheRbtz

이론적으로 Quicksort는 간단하며 (4 단계로 요약 할 수 있음) 고도로 최적화 될 수 있지만 실제로는 올바르게 코딩하기가 매우 어렵습니다. 그것이 내 투표를 얻지 못하는 이유입니다.
데니스


50

그만큼 밀러 - 라빈 소수 판별법 (및 유사한 시험) 책에 있어야합니다. 아이디어는 소수 (prime)가 아닌 수의 증인을 확률 적으로 찾아 내기 위해 소수 (prime)의 속성 (즉, Fermat의 작은 정리를 사용)을 이용하는 것입니다. 충분한 랜덤 테스트 후에 목격자가 없으면 숫자가 소수로 분류됩니다.

참고로 PRIMES가 P에 있음을 보여준 AKS 우선 순위 테스트 는 확실히 The Book에 있어야합니다!


49

Schwartz-Zippel lemma를 사용한 다항식 아이덴티티 테스트 :

누군가가 한밤중에 일어 났을 때 동일성에 대해 두 개의 일 변량 다항식을 테스트하도록 요청했다면 아마도 제품의 합산 일반 형태로 줄이고 구조적 정체성과 비교할 것입니다. 불행히도, 감소에는 지수 시간이 걸릴 수 있습니다. 부울 식을 분리형 일반 형식으로 줄이는 것과 유사합니다.

무작위 알고리즘을 좋아하는 사람이라고 가정하면, 다음 시도는 반례를 찾아 무작위로 선택한 지점에서 다항식을 평가하는 것입니다. 다항식이 충분한 테스트를 통과하면 다항식이 동일 할 가능성이 매우 높다고 선언합니다. Schwartz-Zippel lemma는 점수가 증가함에 따라 오 탐지 확률이 매우 빠르게 감소 함을 보여줍니다.

다항식 시간으로 실행되는 문제에 대한 결정 론적 알고리즘은 알려져 있지 않습니다.


이것은 오래 전에 제안되었을 것입니다! 감사!
arnab

1
이 책에서 눈에 띄는 장소에 합당한 다른 무작위 알고리즘이 몇 가지 있습니다. 이러한 경우 결정 론적 대안과 확률 론적 대안 사이의 대조는 눈에 띄지 않습니다. 결정 론적 알고리즘은 일반적으로 존재하지만 훨씬 더 복잡합니다.
당 Vognsen

누군가가 나에게 Schwartz-Zippel lemma가 아니라고 물을 때까지 몇 년 전에 논문을 작업하는 동안 독립적으로 동일한 알고리즘을 발명했습니다. 그리고 나는 말했습니다. :)
Helium

46

깊이 우선 검색 . 그것은 많은 다른 알고리즘의 기초입니다. 또한 속임수도 간단합니다. 예를 들어, BFS 구현에서 큐를 스택으로 교체하면 DFS를 얻습니까?


1
또한 프롤로그 실행의 기초입니다!
muad

1
스택이없는 BFS의 요점은 무엇입니까? 나는 대답이 "네, DFS를 얻습니다"라고 생각했을 것입니다.
Omar Antolín-Camarena 2016 년

1
글쎄, 모두 가이 문제가 사소한 것이라고 생각하는 것 같습니다. 또한 모두가 대답이 "예"라고 생각하는 것 같습니다. 대답은 실제로 "시작하는 BFS 구현에 따라 다릅니다". cs.stackexchange.com/questions/329/… 참조 (이것은 CS.SE 의 베타 단계를 돕기 위해 게시 한 질문입니다)
Radu GRIGore

또한 간략히 설명한 것 : ics.uci.edu//~eppstein/161/960215.html
라두 고르

42

Dijkstra의 알고리즘 : 음이 아닌 모서리 경로 비용이있는 그래프의 단일 소스 최단 경로 문제. 그것은 모든 곳에서 사용되며 가장 아름다운 알고리즘 중 하나입니다. 인터넷은 그것 없이는 라우팅 될 수 없었습니다 – 라우팅 프로토콜 IS-IS와 OSPF (Open Shortest Path First)의 핵심 부분입니다.

  1. 모든 노드에 거리 값을 지정하십시오. 초기 노드의 경우 0으로 설정하고 다른 모든 노드의 경우 무한대로 설정하십시오.
  2. 모든 노드를 방문하지 않은 것으로 표시하십시오. 초기 노드를 현재로 설정하십시오.
  3. 현재 노드의 경우, 방문하지 않은 모든 이웃을 고려하고 (초기 노드에서) 임시 거리를 계산하십시오. 예를 들어, 현재 노드 (A)의 거리가 6이고 다른 노드 (B)와 연결되는 가장자리가 2 인 경우 B에서 A까지의 거리는 6 + 2 = 8입니다. 이 거리가 이전에 기록 된 거리보다 작 으면 (처음에는 무한대, 초기 노드의 경우 0) 거리를 덮어 씁니다.
  4. 현재 노드의 모든 이웃을 고려한 후에는 방문한 것으로 표시하십시오. 방문한 노드는 다시 점검되지 않습니다. 지금 기록 된 거리는 최종적이고 최소입니다.
  5. 모든 노드를 방문한 경우 완료하십시오. 그렇지 않으면 방문하지 않은 노드를 (초기 노드에서) 가장 작은 거리로 다음 "현재 노드"로 설정하고 3 단계부터 계속하십시오.


40

Gentry의 완전 동형 암호화 체계 (이상적인 격자 또는 정수 이상)는 매우 아름답습니다. 타사가 개인 키에 액세스하지 않고도 암호화 된 데이터에 대해 임의의 계산을 수행 할 수 있습니다.

암호화 체계는 몇 가지 예리한 관찰 때문입니다.

  • 완전히 동종인 암호화 체계를 얻으려면 덧셈과 곱셈에 대해 동종인 체계 만 있으면됩니다. 덧셈과 곱셈 (mod 2)은 AND, OR 및 NOT 게이트 (따라서 Turing Completeness)를 얻기에 충분하기 때문입니다.
  • 그러한 계획이 있었지만 약간의 제한으로 인해 유한 깊이의 회로에 대해서만 실행될 수 있다면, 동형으로 할 수 있습니다 키 사생활을 희생하지 않고 회로 깊이 한계를 재설정 할 수있는 암호 해독 및 reencyption 절차를 평가합니다.
  • 스킴에 대한 회로 해독 기능의 회로 버전의 깊이를 "스 쿼싱 (squashing)"함으로써, 원래 유한 한 얕은 회로로 제한되는 스킴을 임의의 수의 계산으로 가능하게 할 수있다.

그의 논문에서 크레이그 젠트리 (Craig Gentry)는 암호화에서 오랜 (그리고 화려한) 개방형 문제를 해결했습니다. 완전 동형 체계가 존재한다는 사실은 계산 가능성에 대한 고유의 구조가 있다는 것을 인식해야합니다.

http://crypto.stanford.edu/craig/craig-thesis.pdf

http://eprint.iacr.org/2009/616.pdf

http://portal.acm.org/citation.cfm?id=1666420.1666445



38

행렬 곱셈에 대한 Strassen의 알고리즘 .


그것이 최적인지 알 때까지 기다릴 것입니다.
Thomas Ahle

적어도 무의식적으로는 최적이 아닙니다 ... Strassen의 알고리즘을 포함하면 Karatsuba의 알고리즘을 먼저 포함시켜야한다고 생각합니다.
Timothy Sun


34

접미사 배열을 구성하는 선형 시간 알고리즘은 정말 아름답지만, 실제로 인정받을만한 가치는 없었습니다. http://www.cs.helsinki.fi/u/tpkarkka/publications/icalp03.pdf


내가 것이라고 생각 했다 당신이 다른 생각 만드는 것 - 그것은 가치가 인정을받은? 예를 들어, C ++ 시퀀스 분석 라이브러리 SeqAn에서 구현됩니다.
Konrad Rudolph

이제 거의 다른 곳은 아니지만 실제로는 훨씬 더 빠를 수있는 다른 선형 및 비선형 시간 접미사 배열 구성 알고리즘이 많이 있습니다. 2008 년 6 월 12 일자 JEA (Journal of Experimental Algorithmics), 2008 년 6 월 12 일자, "접미어 분류에 대한 효율적이고 다양한 접근 방식"은 이러한 실험 결과를 보여줍니다.
Raphael

@Raphael : 나는 p. 그 JEA 논문의 3 가지에서, 그들은 "믿는 것"만이 O (n ^ 2 log n)의 "느슨한"경계를 제공합니다 ... 실제로 실제보다 더 빠른 선형 시간 알고리즘을 가진 논문을 알고 있습니까? 비대칭 알고리즘?
user651

32

가우시안 제거. 유클리드 GCD 알고리즘에서 Knuth-Bendix까지 일반화 시퀀스를 완료합니다.


BTW, 일반화 순서는 무엇이며 Grobner 기반의 Buchberger 알고리즘은 어디에 적용됩니까? (Knuth-Bendix와 유사 해 보이지만 어딘가 가우시안 제거를 일반화한다는 언급을 보았습니다…)
ShreevatsaR

6
순서는 Euclidean GCD-> Gaussian Elimination-> Buchberger-> Knuth-Bendix입니다. 또한 (가우시안 제거 대신) 일 변량 다항식 나누기와 모듈로를 넣을 수 있습니다 (일반화 순서에서 가우시안 제거와 '별도'임, GE는 다변량도 1, 다항식 반지는 일 변량 무제한도, Buchberger는 다변량 무제한도입니다. 일반화 점프는 변수의 추가로 인해 EGCD에서 GE 또는 다항식 고리로 가장 커지고 무제한 서명으로 인해 Buchberger에서 KB로 커집니다.
Mitch

+1 : 유클리드 알고리즘은 수학에서 가장 유명한 방정식 ax-by = 1을 해결합니다. CS에 더 자주 나타나지 않는 이유는 미스터리입니다.
Tegiri Nenashi

32

저수지 샘플링 과 그 증거에 대한 알고리즘을 처음 보았을 때 감동 했습니다. 그것은 매우 간단한 해결책을 가진 전형적인 "두뇌 티저"형 퍼즐입니다. 저는이 책이 알고리즘과 수학적 이론에 관한 책이라고 생각합니다.

이 책은 에르 도스가 죽고 하늘에 갔을 때 하나님을 만나라고 요청했습니다. 요청은 승인되었고 회의에 대한 Erdös는 단 하나의 질문 만 가지고있었습니다. "책을 봐도 될까요?" 하나님은 예라고 말씀 하시고 에르 도스를 이끌었습니다. Erdös는 당연히 다음과 같은 내용을보기 위해 책을 열었습니다.

정리 1 : ...
증명 : 명백하다.

정리 2 : ...
증명 : 명백하다.

정리 3 : ...
증명 : 명백하다.


4
정리 4 :… 증거 : 독자에게 운동을한다.
jon

31

거북이와 토끼 알고리즘 . 평생 동안 그것을 찾으려고 낭비하더라도 그러한 아이디어를 내놓을 방법이 없기 때문에 나는 그것을 좋아합니다.


6
동일한 무증상으로 문제를 해결하고 알고리즘 설계 패턴을 따르는 바보 알고리즘을 알고 있습니까? 반복적 심화에 대해 이야기하고 있습니다. n 번째 반복에서는 루트의 2 ^ n 후속 작업에서 시작하여 재귀를 찾기 위해 2 ^ n 후속 작업을 앞으로 찾습니다. 반복 할 때마다 일부 단계를 다시 추적하더라도 검색 반경의 기하학적 성장률은 점근에 영향을 미치지 않음을 의미합니다.
당 Vognsen

30

유클리드의 수많은 프라임에 대한 증거로서의 기본적이고 "사소한"예 :

MAX-CUT에 대한 2 근사 -각 정점에 대해 독립적으로 동일한 확률로 두 파티션 중 하나에 할당합니다.


6
예, 아주 좋은 알고리즘입니다. 덜 간단한 방법으로 2의 다른 요소를 대가로이 알고리즘 은 그래프 절단 기능뿐만 아니라 모든 하위 모듈 기능 을 최대화하는 데 에도 사용 됩니다. 이것은 FOCS 07의 Feige, Mirrokni 및 Vondrak의 결과입니다.
Aaron Roth

30

저는 항상 Christofides 알고리즘 에 부분적으로 적용되어 메트릭 TSP에 대해 (3/2) 근사치를 제공합니다. 사실, 제발 전화 해주세요.하지만 이전에 나온 2 근사 알고리즘 도 마음에 들었 습니다 . Christofides의 모든 가장자리를 복제하는 대신 홀수도 정점의 일치를 추가하여 Eulerian 트리에 최소한의 가중치를 적용하는 트릭은 간단하고 우아하며,이 일치가 무게의 절반을 넘지 않는다는 것을 확신하는 데는 거의 필요하지 않습니다. 최적의 여행.


실제로 적절한 근사치를 보장하는 다른 단순하고 우아한 근사 알고리즘도 많이 있습니다.
Janne H. Korhonen



25

선형 프로그래밍 알고리즘 : 심플 렉스, 타원체 및 내부 포인트 방법.

http://en.wikipedia.org/wiki/Linear_programming#Algorithms


그리고 실제로 이러한 문제에 대한 이해를 높이기 위해 여러 노벨상을 수상했습니다.
로스 스나이더

@Ross Kantorovich는 LP를 발명하고이를 자원 할당에 적용하여 노벨 경제학 상을 수상했습니다. 다른 어떤 상을 생각하고 있었습니까?
Mark Reitblatt

@Mark Koopermans는 Kantorovich와 함께 노벨상을 받았지만 여전히 "여러 가지"라고 말하는 것이 부정확했습니다.
로스 스나이더

22

특정 클래스의 SAT 인스턴스를 해결하기위한 Robin Moser 알고리즘. 이러한 인스턴스는 Lovasz Local Lemma에서 해결할 수 있습니다. 모저 알고리즘은 실제로는 정리의 진술에 대한 비 무작위 화이다.

나는 그의 알고리즘 (그리고 그 정확성 증명을위한 기술)이 몇 년 동안 잘 소화되고 책에서 알고리즘에 대한 가능한 후보가 될 정도로 개선 될 것이라고 생각합니다 .

이 버전 은 Gábor Tardos로 작성된 그의 원본 논문의 확장입니다.



21

Knuth의 알고리즘 X정확한 표지 문제 에 대한 모든 솔루션을 찾습니다 . 그것에 대해 마술은 그가 그것을 효율적으로 구현하기 위해 제안한 기술입니다 : Dancing Links .


20

가장 낮은 조상에게 대답하는 Schieber-Vishkin을 포함시켜야한다고 생각합니다. 쿼리는 일정한 시간에 쿼리에 하고 선형 시간에 포리스트를 전처리합니다.

제 4 권 Fascicle 1에서 Knuth의 설명과 그의 생각을 좋아 합니다. 그는 그것을 완전히 이해하는 데 이틀이 걸렸다 고 말했습니다. 나는 그의 말을 기억합니다.

나는 그것이 매우 아름답다고 생각하지만 놀랍게도 그것은 문학에서 나쁜 언론을 얻었습니다 (..) 그것은 나를 흥분시키는 수학을 기반으로합니다.


10
잠깐, 그것은 아름답지만, Knuth가 그것을 완전히 이해하기 위해 이틀이 걸렸다면 정말로 "책에서"인가?
ShreevatsaR

@ShreevatsaR이 책은 각주에 글씨가 인쇄되어 있습니다 :)
hsmyers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.