폴 에르 도스는 하나님이 각 수학 정리의 가장 우아한 증거를 유지하는 "책"에 대해 이야기했습니다. 이것은 심지어 책 (내가 지금 제 4 판에 있다고 믿는다) : 책의 증거에서 영감을 얻었습니다 .
하나님이 비슷한 알고리즘 책을 가지고 있다면 어떤 알고리즘이 후보라고 생각합니까?
가능한 경우 클릭 가능한 참조 및 작동하는 핵심 통찰력을 제공하십시오.
답변 당 하나의 알고리즘 만 사용하십시오.
폴 에르 도스는 하나님이 각 수학 정리의 가장 우아한 증거를 유지하는 "책"에 대해 이야기했습니다. 이것은 심지어 책 (내가 지금 제 4 판에 있다고 믿는다) : 책의 증거에서 영감을 얻었습니다 .
하나님이 비슷한 알고리즘 책을 가지고 있다면 어떤 알고리즘이 후보라고 생각합니까?
가능한 경우 클릭 가능한 참조 및 작동하는 핵심 통찰력을 제공하십시오.
답변 당 하나의 알고리즘 만 사용하십시오.
답변:
Union-find 는 최고의 알고리즘 / 데이터 구조 ( Disjoint Set Forest )가 스파게티 스택을 기반으로하는 아름다운 문제입니다 . 지능적인 어린이에게 설명하기에는 매우 간단하고 직관적이지만 런타임에 밀접한 관계를 갖기까지 몇 년이 걸렸습니다. 궁극적으로 그 행동은 역행 Ackermann 함수와 관련이있는 것으로 밝혀졌다.이 함수는 계산에 대한 관점에서 변화가 일어났다 (실제로 Hilbert의 On the Infinite에 포함되어 있음 ).
Wikipedia는 Disjoint Set Forests에 대한 좋은 소개를 제공합니다 .
Knuth-Morris-Pratt 문자열 일치. 지금까지 볼 수있는 가장 매끄러운 8 줄의 코드입니다.
블룸, 플로이드, 프랫, Rivest에, 그리고 Tarjan의 알고리즘은 할 수 찾기 K 정렬되지 않은리스트의 요소 일 아름다운 알고리즘 선형 시간을, 그리고 숫자이기 때문에에만 작동 바로 마스터 정리에 맞게. 다음과 같이 진행됩니다.
이진 검색 은 내가 본 것 중 가장 단순하고 아름답고 유용한 알고리즘입니다.
모든 쌍의 최단 경로에 대한 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 ( n 에지. 다이나믹 프로그래밍의 저의 포스터 아이가 될 것입니다!
다소 다른 것처럼 보일 수 있지만 (특히 다른 답변과 비교할 때) Quicksort 는 정말 우아 하다고 생각합니다 . 처음 보았을 때 정말 복잡하다고 생각했지만 이제는 너무 단순 해 보입니다.
그만큼 밀러 - 라빈 소수 판별법 (및 유사한 시험) 책에 있어야합니다. 아이디어는 소수 (prime)가 아닌 수의 증인을 확률 적으로 찾아 내기 위해 소수 (prime)의 속성 (즉, Fermat의 작은 정리를 사용)을 이용하는 것입니다. 충분한 랜덤 테스트 후에 목격자가 없으면 숫자가 소수로 분류됩니다.
참고로 PRIMES가 P에 있음을 보여준 AKS 우선 순위 테스트 는 확실히 The Book에 있어야합니다!
Schwartz-Zippel lemma를 사용한 다항식 아이덴티티 테스트 :
누군가가 한밤중에 일어 났을 때 동일성에 대해 두 개의 일 변량 다항식을 테스트하도록 요청했다면 아마도 제품의 합산 일반 형태로 줄이고 구조적 정체성과 비교할 것입니다. 불행히도, 감소에는 지수 시간이 걸릴 수 있습니다. 부울 식을 분리형 일반 형식으로 줄이는 것과 유사합니다.
무작위 알고리즘을 좋아하는 사람이라고 가정하면, 다음 시도는 반례를 찾아 무작위로 선택한 지점에서 다항식을 평가하는 것입니다. 다항식이 충분한 테스트를 통과하면 다항식이 동일 할 가능성이 매우 높다고 선언합니다. Schwartz-Zippel lemma는 점수가 증가함에 따라 오 탐지 확률이 매우 빠르게 감소 함을 보여줍니다.
다항식 시간으로 실행되는 문제에 대한 결정 론적 알고리즘은 알려져 있지 않습니다.
깊이 우선 검색 . 그것은 많은 다른 알고리즘의 기초입니다. 또한 속임수도 간단합니다. 예를 들어, BFS 구현에서 큐를 스택으로 교체하면 DFS를 얻습니까?
Dijkstra의 알고리즘 : 음이 아닌 모서리 경로 비용이있는 그래프의 단일 소스 최단 경로 문제. 그것은 모든 곳에서 사용되며 가장 아름다운 알고리즘 중 하나입니다. 인터넷은 그것 없이는 라우팅 될 수 없었습니다 – 라우팅 프로토콜 IS-IS와 OSPF (Open Shortest Path First)의 핵심 부분입니다.
간단하고 직관적 인 Eratosthenes 의 체 .
나는 또한 Horner 's Algorithm 의 아름다움을 좋아한다 .
Gentry의 완전 동형 암호화 체계 (이상적인 격자 또는 정수 이상)는 매우 아름답습니다. 타사가 개인 키에 액세스하지 않고도 암호화 된 데이터에 대해 임의의 계산을 수행 할 수 있습니다.
암호화 체계는 몇 가지 예리한 관찰 때문입니다.
그의 논문에서 크레이그 젠트리 (Craig Gentry)는 암호화에서 오랜 (그리고 화려한) 개방형 문제를 해결했습니다. 완전 동형 체계가 존재한다는 사실은 계산 가능성에 대한 고유의 구조가 있다는 것을 인식해야합니다.
http://crypto.stanford.edu/craig/craig-thesis.pdf
행렬 곱셈에 대한 Strassen의 알고리즘 .
게일 - 샤플리 안정적인 결혼 알고리즘 . 이 알고리즘은 욕심 많고 매우 간단합니다. 처음에는 왜 작동하는지 분명하지 않지만 정확성의 증거는 다시 이해하기 쉽습니다.
접미사 배열을 구성하는 선형 시간 알고리즘은 정말 아름답지만, 실제로 인정받을만한 가치는 없었습니다. http://www.cs.helsinki.fi/u/tpkarkka/publications/icalp03.pdf
가우시안 제거. 유클리드 GCD 알고리즘에서 Knuth-Bendix까지 일반화 시퀀스를 완료합니다.
저수지 샘플링 과 그 증거에 대한 알고리즘을 처음 보았을 때 감동 했습니다. 그것은 매우 간단한 해결책을 가진 전형적인 "두뇌 티저"형 퍼즐입니다. 저는이 책이 알고리즘과 수학적 이론에 관한 책이라고 생각합니다.
이 책은 에르 도스가 죽고 하늘에 갔을 때 하나님을 만나라고 요청했습니다. 요청은 승인되었고 회의에 대한 Erdös는 단 하나의 질문 만 가지고있었습니다. "책을 봐도 될까요?" 하나님은 예라고 말씀 하시고 에르 도스를 이끌었습니다. Erdös는 당연히 다음과 같은 내용을보기 위해 책을 열었습니다.
정리 1 : ...
증명 : 명백하다.
정리 2 : ...
증명 : 명백하다.
정리 3 : ...
증명 : 명백하다.
거북이와 토끼 알고리즘 . 평생 동안 그것을 찾으려고 낭비하더라도 그러한 아이디어를 내놓을 방법이 없기 때문에 나는 그것을 좋아합니다.
유클리드의 수많은 프라임에 대한 증거로서의 기본적이고 "사소한"예 :
MAX-CUT에 대한 2 근사 -각 정점에 대해 독립적으로 동일한 확률로 두 파티션 중 하나에 할당합니다.
저는 항상 Christofides 알고리즘 에 부분적으로 적용되어 메트릭 TSP에 대해 (3/2) 근사치를 제공합니다. 사실, 제발 전화 해주세요.하지만 이전에 나온 2 근사 알고리즘 도 마음에 들었 습니다 . Christofides의 모든 가장자리를 복제하는 대신 홀수도 정점의 일치를 추가하여 Eulerian 트리에 최소한의 가중치를 적용하는 트릭은 간단하고 우아하며,이 일치가 무게의 절반을 넘지 않는다는 것을 확신하는 데는 거의 필요하지 않습니다. 최적의 여행.
정렬 병합 . 간단하고 우아하며 효율적입니다.
선형 프로그래밍 알고리즘 : 심플 렉스, 타원체 및 내부 포인트 방법.
Marcus Hutter의 잘 정의 된 모든 문제에 대한 가장 빠르고 가장 짧은 알고리즘 .
이러한 종류의 목록은이 목록의 다른 오퍼링의 정신에 위배됩니다. 이론적으로 만 실용적이지 않기 때문에 제목의 종류는 모든 것을 말합니다. 아마도 그것은 알고리즘의 점근 적 행동만을 보는 사람들에게주의적인 이야기로 포함되어야합니다.
Knuth의 알고리즘 X 는 정확한 표지 문제 에 대한 모든 솔루션을 찾습니다 . 그것에 대해 마술은 그가 그것을 효율적으로 구현하기 위해 제안한 기술입니다 : Dancing Links .
가장 낮은 조상에게 대답하는 Schieber-Vishkin을 포함시켜야한다고 생각합니다. 쿼리는 일정한 시간에 쿼리에 하고 선형 시간에 포리스트를 전처리합니다.
제 4 권 Fascicle 1에서 Knuth의 설명과 그의 생각을 좋아 합니다. 그는 그것을 완전히 이해하는 데 이틀이 걸렸다 고 말했습니다. 나는 그의 말을 기억합니다.
나는 그것이 매우 아름답다고 생각하지만 놀랍게도 그것은 문학에서 나쁜 언론을 얻었습니다 (..) 그것은 나를 흥분시키는 수학을 기반으로합니다.