지난 수십 년 동안 인류에게 중요한 알고리즘은 무엇입니까? [닫은]


40

지난 수십 년 동안 어떤 세계에서 가장 중요한 알고리즘이 인류에게 가장 큰 기여를 했습니까?

나는 이것이 개발자가 알아야 할 일반적인 지식이라고 생각했다.

업데이트 :
가능하면 특정 프로그래밍 알고리즘에 대한 답변을 유지하십시오 .
가장 중요한 것의 목록을 얻고 싶습니다. 답 당 하나의 알고리즘 만 있습니다.
알고리즘이 중요하고 중요한 이유를 설명하십시오.


2
지금까지 4 명이 "진짜 질문이 아니라"고 생각하기 때문에 문을 닫았습니다. 아마도 중요한 프로그래밍 알고리즘이 무엇인지 실제로 알지 못하기 때문일 것입니다.
David Thornley

2
주제가 아닌 것일 수도 있지만 실제 질문입니다.
제레미

1
+1 좋은 질문입니다. 나는 cstheory.stackexchange.com에이를 다시 물어 보시기 바랍니다
알렉산드르 Levchuk

1
왜 자신의 질문에 대답합니까? 여러번?

2
오답 없음 + 무제한 답변 수 + "답 당 하나"를 요구하는 모호하지 않은 설명 + 저자는 자신의 답변 중 몇 개를 게시 함 = 비 구조적 질문의 교과서 사례. 나는 그것이 오래되었다는 것을 알고 있지만 이것을 닫으십시오.
Aaronaught

답변:


59

공개 / 개인 키 암호화는 매우 중요합니다. 인터넷 상거래는 그것 없이는 어디에나있을 수 없습니다.


4
+1하고 답변에 추가하려면 RSA.
sange

암호화 코드 (RSA와 같은)를 실용적인 솔루션으로 전환하는 데 관련된 전체 알고리즘 그룹과 모범 사례가 있습니다.
Donal Fellows

37

Dijkstra의 알고리즘

알고리즘 은 네트워크의 두 노드 간 최상의 경로 를 식별하기 위해 전 세계 모든 라우터 에 존재 합니다.


확실합니까? 대부분의 라우터는 IP 번호가 해당 IP 주소에 속하고이를 로컬 네트워크의 시스템으로 전달하거나, 기본 라우터 인 패킷을 해당 라우터로 보내는 라우터를 더 잘 알고있는 라우터를 알고 있습니다. 큰 라우터는 IP 주소 범위 X1-Y1의 경우 패킷이 라우터 R1로 이동하고, 범위 X2-Y2의 경우 패킷이 라우터 R2로 이동해야한다는 것을 알 수 있습니다. 이와 관련된 Dijkstras 알고리즘은 없습니다.

2
@ Thorbjørn Ravn Andersen : 그러나 라우터가 정보를 알기 위해서는 어느 시점에서 누군가 Dijkstra의 알고리즘을 사용해야했을 것입니다. 예, 실제로 각 개별 패킷을 라우팅하는 데는 사용되지 않지만 대규모 네트워크에서 라우팅 테이블을 결정하는 데 사용됩니다. +1.
Billy ONeal

@Billy, Dijkstra 알고리즘이 실제로 누구에 의해 사용될 것으로 정확히 기대하십니까?

@ Thorbjørn Ravn Andersen : 내 이해를 위해, 그것은 소규모 네트워크를위한 올바른 경로를 선택하는 기초 인 OSPF에서 역할을합니다. 대규모 네트워크 간의 연결은보다 정책 기반 인 BGP를 사용합니다. BGP가 Dijkstra의 알고리즘을 사용하는지 확실하지 않습니다.
Billy ONeal

3
@Billy, 그러나 나의 반대는 " 세계의 모든 라우터에 존재하는 것"이었다 . 제 생각에는 분명히 틀 렸습니다.

30

FFT (고속 푸리에 변환)

FFT는 샘플링 된 신호 에서 유용한 정보를 추출 하는 데 매우 중요하고 널리 사용되는 방법입니다 .

FFT (고속 푸리에 변환)는 이산 푸리에 변환 (DFT)과 그 역을 계산하는 효율적인 알고리즘입니다.


4
수십 년 전에 PDP-11을 위해 일련의 FFT 기능을 작성한 보스가있었습니다. 그는 인기있는 과학의 뒷면에 광고와 함께 그 기능을 가진 펀치 카드 데크를 판매하고 꽤 심각한 은행을 만들었습니다. 분명히 그는 신호 처리에서 주식 시장 예측에 이르기까지 모든 사람이 자신의 코드를 사용하도록했습니다.
Dan Ray

26

페이지 랭크

PageRank는 Google 인터넷 검색 엔진 에서 Larry Page의 이름을 따서 명명 한 링크 분석 알고리즘으로, 해당 웹 사이트를 "측정"하기 위해 월드 와이드 웹과 같은 하이퍼 링크로 연결된 문서 세트의 각 요소에 숫자 가중치를 지정합니다. 세트 내에서의 중요성.


haha, 우리의 대답은 2 초 간격으로 떨어져있었습니다, 죄송합니다 :)
Maksee

전혀 문제 없습니다! :)
Amir Rezaei

36
나는 그것이 Larry Page의 이름을 따서 명명 된 것을 결코 깨닫지 못했다. 나는 항상 그 이름이 웹 페이지와 관련이 있다고 생각했습니다.
JohnFx

1
@ JohnFx Whoa, 농담 없음!
Mark C

+1 : 그러나 실제 알고리즘이 인류에게 알려지지 않은 경우 자격이 있습니까? (IIRC 위키의 근사값이다)
스티븐 에버스

22

데이터 압축 알고리즘

컴퓨터 과학 및 정보 이론에서, 데이터 압축 또는 소스 코딩은 특정 인코딩 방식을 사용하여 인코딩되지 않은 표현이 사용하는 것보다 적은 비트 (또는 다른 정보 보유 단위)를 사용하여 정보를 인코딩하는 프로세스입니다.


2
정확하고 기본적인 압축 알고리즘 LZW는 소프트웨어 엔지니어링에서 가장 아름다운 알고리즘 중 하나라고 생각합니다.
mojuba

"가능한 경우 특정 알고리즘의 이름을 지정하십시오"

14

스미스 워터맨 (그리고 니들 먼 운슈)

너무 많이 가져올 수 있으므로 의견을 말 해주세요.

Smith-Waterman : 서열 정렬 알고리즘

그러한 예 중 하나가 Smith-Waterman 및 Needleman-Wunsch 알고리즘과 근사치라고 생각합니다. 그들 모두 본질적으로 같은 일을하고 있습니다 : 그들은 둘 이상의 문자열 (시퀀스)정렬 합니다. 생물학에는 의미가 있습니다. DNA 또는 단백질 서열이 정렬되면 구조적, 기능적 및 진화 적 유사성의 영역이 드러난다.

Smith-Waterman의 자손 인 BLAST

Smith-Waterman과 비슷한 휴리스틱은 BLAST입니다. 생물학적 유사성을 위해 큰 데이터베이스의 시퀀스를 검색 할 수 있습니다. BLAST의 인기는 정말 대단합니다. 생물학에서 가장 널리 사용되는 알고리즘 일 것입니다. Bioinformatics 및 Genomics의 새로운 영역에는 BLAST보다 더 정확한 Smith-Waterman / Needleman-Wunsch 알고리즘의 새롭고 더 나은 근사가 있습니다.

Smith-Waterman의 후손으로 게놈 어셈블리

BLAST보다 빠른 Smith-Waterman과 Needleman-Wunsch의 고 처리량 근사법은 샷건 시퀀싱에서 게놈을 조립하는 데 사용됩니다. 시퀀서 기계의 제품은 게놈의 임의 부분에서 대량의 DNA 판독 (수십)을 얻습니다. 매우 짧음 (50 내지 100 개 뉴클레오티드). 이 접근법은 인간 게놈 프로젝트를 완료하는 데 사용되었습니다. 모든 현대 시퀀싱은 이런 식으로 수행됩니다.

Smith-Waterman의 확장 된 다중 시퀀스 정렬

수많은 다중 시퀀스 정렬 알고리즘이 존재합니다.이 알고리즘은 다중 시퀀스 버전의 Smith-Waterman / Needleman-Wunsch와 비슷합니다. 다수의 서열은 서로 동시에 그룹으로서 정렬된다. 쌍으로 대응하는 것보다 훨씬 어려운 문제이지만 솔루션은 생물학적 기능, 구조 및 관련 서열의 진화 이력에 대해 훨씬 더 많은 통찰력을 제공합니다.


프로그래머 여러분 안녕하세요! 투표 및 정렬을 용이하게하기 위해 이와 같은 목록 질문에 대한 관례에 따라 여기에 제시하는 각 알고리즘에 대해이 답변을 하나씩 나눌 수 있습니다.
Yi Jiang

@Yi Jiang : 내 판테온! 귀하의 의견을 "구토 촉진"으로 잘못 읽었습니다. :-/
Dr Hannibal Lecter

여기에 단 하나의 알고리즘 주장 - 스미스 - 워터맨 (그리고 그것의 변형 니들-분쉬)
알렉산드르 Levchuk

13

시암은 다음을 20 세기의 가장 중요한 알고리즘으로 명명했습니다.

1946 : Monte Carlo의 대도시 알고리즘 . 임의의 프로세스를 사용하여이 알고리즘은 너무 복잡하여 정확하게 해결하기 어려운 문제에 대한 해결책으로 효율적으로 넘어갈 수 있습니다.

1947 : 선형 프로그래밍을위한 단순한 방법 . 계획 및 의사 결정에서 일반적인 문제에 대한 우아한 솔루션입니다.

1950 : Krylov 부분 공간 반복 방법 . 과학 계산에 풍부한 선형 방정식을 빠르게 풀기위한 기술.

1951 : 행렬 계산에 대한 분해 접근법 . 수치 선형 대수에 대한 기술 모음.

1957 : 포트란 최적화 컴파일러 . 고급 코드를 컴퓨터가 읽을 수있는 효율적인 코드로 변환합니다.

1959 : 고유 값 계산을위한 QR 알고리즘 . 또 다른 중요한 매트릭스 작업은 신속하고 실용적이었습니다.

1962 : 정렬을위한 퀵 정렬 알고리즘 . 큰 데이터베이스를 효율적으로 처리합니다.

1965 : 고속 푸리에 변환 . 아마도 오늘날 가장 보편적으로 사용되는 알고리즘은 파형과 같은 파형을 주기적 구성 요소로 나눕니다.

1977 : 정수 관계 감지 . 관련이없는 것처럼 보이는 숫자 모음으로 만족하는 간단한 방정식을 발견하는 빠른 방법입니다.

1987 : 빠른 다중 극 방법 . n-body 계산의 복잡성을 다루는 획기적인 기술로, 천체 역학에서 단백질 접힘에 이르기까지 다양한 문제에 적용됩니다.

개인적으로 Integer Relation DetectionPageRank바꿉니다 .


1
이 목록에, 나는 그들이 더 많은 20 세기의 "가장 중요한 정리"에 대해 있었지만,이 책을 추가 할 것 : 다섯 골든 규칙 amazon.com/Five-Golden-Rules-20th-Century-Mathematics/dp/... 하고, 5 가지 더 많은 황금률. amazon.com/Five-More-Golden-Rules-20th-Century/dp/0471395285
Tangurena

Monte Carlo 기술은 여전히 ​​원래 형태로 사용됩니다. 이것은 FFT와 Quicksort에서도 마찬가지입니다. 내가 익숙하지 않은 나머지 대부분은 LP의 Simplex 방법은 최신 방법에 비해 전혀 확장되지 않습니다.
David Thornley

9

PageRank는 그것을 좋아하거나 싫어하지만, 매일 전세계 인터넷 검색을하는 수백만의 사람들의 결정과 행동에 영향을 미칩니다.


9

오늘 컴퓨터에서 가장 많이 사용되는 3 가지 주요 알고리즘을 나열해야한다면 다음과 같이 말할 것입니다.

  1. 이진 검색
  2. 퀵소트
  3. Dijkstra의 알고리즘

이진 검색 알고리즘은 정렬 된 목록 내에서 항목을 좁힐 지속적으로 사용되는 대부분의 인덱스 조회는 어떤 점에서이 라인을 따라 뭔가를 사용합니다. 이 알고리즘은 o (log n) 시간에 정렬 된 목록을 검색합니다.

알고리즘은 마지막 회 (N ^ 2) 최악의 경우 평균 케이스와 O를 O로 분류 내려 (N N 로그) 할 수 있었다. 정렬은 컴퓨터에서 가장 일반적인 데이터 작업 중 하나이며 가장 비싼 작업 중 하나이므로 평균 사례 정렬을 개선하는 것이 효율성면에서 큰 발전이었습니다.

Dijkstra의 알고리즘 은 그래프 내에서 포인트 사이의 최단 경로를 생성합니다. 이것은 인터넷 자체와 관련하여 모든 방식의 라우팅 응용 프로그램에 널리 사용되며 얽힌 상호 연결된 라우터의 웹을 통한 가장 빠른 경로가 사용되도록합니다.


이진 검색은 매우 오래된 것이어야합니다 ... 제 말은 '과거에'공식화되었고 '수십 년'에 있었지만 수백 년 동안 존재했을 것입니다.
커크 브로드 허스트

@ Kirk Broadhurst : 여전히 컴퓨터에는 매우 중요한 알고리즘입니다. 인간이 처음 생각한시기에 관계없이.
Orbling

8

베이 즈 정리

받은 편지함에서 시간 낭비되는 스팸의 양을 관리 가능한 수준으로 유지하는 데 가장 큰 영향을 주었을 것입니다.

물론, 그것은 다른 많은 가치있는 응용 프로그램에서 사용되었지만 SPAM-killing이 가장 좋아합니다.


나는 당신에게 엄지 손가락을 줄 것이지만 이것은 알고리즘이 아닌 정리 (최고 중 하나)입니다. 그러나 많은 알고리즘이이 정리를 기반으로합니다.
Amir Rezaei

나는 그것들을 모두 일반적인 범주의 알고리즘으로 묶으려고했지만 기술적으로는 정확합니다.
JohnFx

@AmirR 기술적으로 정확하고, 최고의 종류입니다!
Mark C

7

팀 정렬

이것은 현재 Python , Java 7Android 에서 사용되는 정렬 알고리즘입니다.

원래:

  • O (N log N) 최악의 경우 (변성되지 않음)
  • 거의 정렬 된 목록에 대한 O (N) (실제로 N-1이미 정렬 된 목록에 있음)

그리고 그것의 아름다움은? 그것은이다 안정 ! 따라서 다양한 기준에 따라 멀티 패스 분류에 적합합니다.

그건 그렇고, 누구나 최적화 된 C ++ 구현을 가지고 있다면 ...


이미 정렬 된 목록에서 더 나은 동작을 나타 내기 때문에 Θ (NlogN) 일 수 없습니다. 여기에 O (NlogN)가 올바른 표기법입니다.
Donal Fellows

이것은 훌륭하지만, "지난 수십 년 동안 발명 된 가장 큰 알고리즘 중 하나"라고 부르지 않을 것입니다. Timsort의 기반이되는 Mergesort는 진정한 성과입니다.
Billy ONeal

6

3D 컴퓨터 애니메이션에서 가시성 문제를 해결하는 데 사용 된 모든 알고리즘은 나에게 중요한 것 같습니다.

화가의 알고리즘

우선 순위 채우기라고도하는 화가의 알고리즘은 3D 컴퓨터 그래픽의 가시성 문제에 대한 가장 간단한 솔루션 중 하나입니다. 3D 장면을 2D 평면에 투영 할 때는 어느 시점에서 어떤 다각형을 표시하고 어떤 다각형을 숨길지를 결정해야합니다.

Z 버퍼링

컴퓨터 그래픽에서 z- 버퍼링은 일반적으로 하드웨어, 때로는 소프트웨어에서 수행되는 3 차원 그래픽의 이미지 깊이 좌표를 관리합니다. 가시성 문제에 대한 한 가지 해결책입니다. 렌더링 된 장면의 어떤 요소가 표시되고 어떤 요소가 숨겨 지는지 결정하는 문제가 있습니다. 화가의 알고리즘은 효율성은 떨어지지 만 불투명하지 않은 장면 요소도 처리 할 수있는 또 다른 일반적인 솔루션입니다. Z 버퍼링은 깊이 버퍼링이라고도합니다.

숨겨진 표면 결정

3D 컴퓨터 그래픽에서 숨겨진 표면 결정 (HSR (숨겨진 표면 제거), Oclusion Culling (OC) 또는 가시 표면 결정 (VSD)이라고도 함)은 특정 관점에서 보이지 않는 표면과 표면의 일부를 결정하는 데 사용되는 프로세스입니다. 숨겨진 표면 결정 알고리즘은 3D 컴퓨터 그래픽 분야의 첫 번째 주요 문제 중 하나 인 가시성 문제에 대한 솔루션입니다. 숨겨진 표면 결정 프로세스를 숨기기라고하는 경우가 있으며, 이러한 알고리즘을 때로는 숨기기 도구라고합니다. 선 렌더링에 대한 아날로그는 은선 제거입니다. 가상 현실에서 벽을 볼 수 없도록 이미지를 올바르게 렌더링하려면 은선 결정이 필요합니다.


3

현재 문제를 해결해야하는 것


1
그것이 제가 말하려고하는 것입니다. 이제 말할 필요가 없습니다.
Robert Harvey

어느 쪽도 좋은 대답이 아닙니다. 어떤 알고리즘이 인류에게 중요하지 않은지.
Amir Rezaei

6
이것은 특정한 알고리즘이 아니며, 비록 그것이 비록 인류에게는 중요하지 않을 수도 있습니다.
Jason

3

Soundex 는 소리별로 이름을 인덱싱하기위한 발음 알고리즘입니다.


soundex는 어떻게 인류에게 기여 했습니까?
barjak

자연 언어를 사용하는 능력을 향상시켜 철자와 지역 발음의 사소한 차이를 수정했습니다.
sal

3

비터 비 알고리즘

원래 컨볼 루션 오류 수정 코드를 해독하는 데 사용 된이 기술은 이제 음성 인식에서 생물 정보학에 이르기까지 광범위한 인식 문제를 해결하는 데 사용됩니다. 여러 통신 및 저장 장치에서 찾을 수 있습니다.


+1 Viterbi 알고리즘이 매우 중요합니다. @ [Giacomo Verticale] 아마도 숨겨진 마르코프 모델 (HMM)과의 관계를 언급해야 할 것입니다.
Aleksandr Levchuk 5

3

MP3

특정 알고리즘보다 더 일반적인 용어이지만 MP3를이 손실 오디오 형식을 생성하기 위해 협력하는 다양한 알고리즘과 기술의 집합으로 언급했습니다.

"디지털 시대"에서 확실히 중요했습니다.


3

Runge-Kutta 수치 적분. 그것 없이는 많은 시뮬레이션이 불가능할 것입니다. 우주 프로그램, 원자력, 탄도, 스포츠 시뮬레이션, 방탄 조끼, 충돌 테스트 시뮬레이션, 유체 운동 시뮬레이션, 화학 상호 작용 시뮬레이션, 내진 건물 없음 등이 없습니다.


+1 @ j172이 점을 알고 있습니다. 수치 해석 및 시뮬레이션에 정말 유용합니다.
Amir Rezaei

2

정렬 알고리즘.


5
이것은 특정 알고리즘은 아니지만 ...
Justin L.

네, 저스틴 엘 (Justin L.)이 말한 것, 어떤 정렬 알고리즘?
Dr Hannibal Lecter

"특정 알고리즘"은 n lg n 정렬 중 첫 번째 병합 정렬이어야합니다.
Billy ONeal

2
@dr Hannibal Lecter : 물론 버블 정렬. 다른 모든 것은 조기 최적화입니다.
peterchen

2

1
왝! 사람들이 프로덕션 코드에서 퀵 정렬을 사용하지 않기를 바랍니다. 더 중요한 것은 mergesort가 더 일찍 왔고 거의 빠릅니다. (바람직하게 대부분의 코드는 Introsort에서 일부 변형을 사용합니다)
Billy ONeal

2
@Billy ONeal의 .NET 정렬은 모두 Quicksort입니다. 따라서 List <T> .Sort ()를 호출하는 모든 프로그램은 프로덕션에서 퀵 정렬을 사용합니다.
Steven Evers

@ SnOrfus : 그 진술에 대한 증거 가 있습니까? 내 이해 List <t> .Sort는 소개를 기반으로합니다.
Billy ONeal

3
@Billy ONeal : 직선 MSDN에서 - msdn.microsoft.com/en-us/library/b0zbh7b6.aspx
ysolik

3
@ Thorbjørn : 여전히 좋은 범용 알고리즘은 아닙니다. Introsort 퀵 정렬이지만 지정된 재귀 수준을 초과하면 힙 정렬로 전환됩니다. 이것은 퀵 정렬의 좋은 특성을 가질 수 있지만 알고리즘이 잘못된 피벗을 선택하더라도 항상 병리학 적 사례를 피합니다.
Billy ONeal

1

삽입 정렬

구현하기 쉽고 작은 목록에서 매우 빠르며 Merge Sort / Quicksort 구현에 사용되어 속도를 높입니다. 안정적이며 정렬 된 목록 (오름차순으로 정렬 된 경우)에서 O (n)으로 작동합니다.



1

칼만 필터

그것은 항법, 표적 추적 (거의 모든 센서 : 레이더, 소나, FLIR, 레이더)에 많이 사용됩니다. 한 교과서는 디스크 드라이브 컨트롤러의 응용 프로그램을 보여줍니다. 로봇 제어 시스템은 종종 칼만 필터를 사용합니다.


0

음성 및 서면 언어.

그것들은 현재 한 지식에서 다른 것으로 지식을 전달하는 가장 효율적인 알고리즘 중 하나입니다. 언어가 없으면 시민 사회는 존재할 수 없었으며 정보를 전달할 수 없었습니다.


5
-1 : 알고리즘은 자연어를 사용하여 표현할 수 있지만 자연어는 알고리즘이 아닙니다.
Steven Evers

2
압축 알고리즘이 알고리즘이 아니라고 말할 수 있습니까? 모든 언어는 소스에서 수용자로 전달되는 정보를 압축하는 것입니다. 다른 알고리즘과 마찬가지로 따라야 할 특정 규칙 (문법)이 있으며 입력 (경험)을 취하고 다른 출력 (지식)을 생성합니다. 언어를 알고리즘으로 생각할 수 없었습니다.
Malfist

많은면에서 알고리즘의 모든 표준 정의에 실패합니다.
James Reinstate Monica Polk

0

데이터 구조 및 힙 구축 및 유지 보수 관련 알고리즘.

그리고 퀵 정렬에 대한 존중을 보여주십시오. 그것이 항상 선택의 종류는 아니지만, 그것은 컴퓨터 과학의 역사적 발전에있어 기본적인 알고리즘 중 하나이며, 재귀와 알고리즘 분석을 이해하기위한 훌륭한 수단입니다. 아름답고 예, 좋아합니다.


0

B- 트리, B +-트리, 해시 인덱스, 이진 트리 인덱스 등과 같은 인덱싱 알고리즘. 엄청난 양의 데이터를 인덱싱합니다.



-1

무차별 대입 알고리즘!

많은 사람들이이 무차별 알고리즘을 과소 평가합니다. 실제로 패턴이없는 문제를 해결하는 데 주로 사용됩니다. 나는 그것을 아주 좋아합니다!


5
알고리즘이 아닙니다. 일종의 알고리즘입니다.
Adam Lear

암호화를 깨는 방법입니다.
Amir Rezaei

나는 또한 알고리즘으로 분류된다고 생각합니다. "x에서 y로 시작하여 무언가를하십시오." <--- 알고리즘 맞습니까?
xport

알고리즘은 특정 작업 을 수행하기위한 일련의 단계 입니다. 구체적이지 않습니다.
Anto

-5

버블 정렬!

거품 정렬은 Bogosort 만큼 나쁘지 않습니다 . 그래서 버블 정렬에 투표합니다.


1
알고리즘이 중요하고 중요한 이유를 설명하고 사람들이 Bubble Sort가 중요하고 중요한 이유에 대해 동의하지 않는 것 같습니다.
Tamara Wijsman

5
버락 오바마조차도 거품 정렬이 잘못된 길임을 알고 있다 .
Joey Adams

@TomWij, @Joey : 내 업데이트를 참조하십시오.
xport
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.