실제로 가장 자주 사용되는 알고리즘은 무엇입니까?


19

어떤 알고리즘이 가장 자주 사용됩니까?

답변 당 하나의 알고리즘을 작성하고 답변을 짧게 유지하십시오 (한 줄 또는 두 줄).


Kaveh, 당신은 너무 많은 공급하기 전에 응답을 기다려야합니까? :)
Suresh Venkat

1
@Suresh : 죄송합니다. :)
Kaveh

3
어떤 의미에서 가장 자주? (알고리즘을 구현하는 다른 컴퓨터 프로그램의 수, 알고리즘을 사용하는 설치된 소프트웨어의 수, 알고리즘의 실행 수, 알고리즘을 사용하여 처리 된 데이터의 양, 알고리즘에 사용 된 CPU 시간은?) (학계, 산업계, 가정용 PC?) 이와 같은 것을 추정 할 수 있습니까? 답을 뒷받침 할 데이터가 있습니까?
Jukka Suomela

1
Jukka Suomela가 지적했듯이 질문은 너무 모호합니다. 더 명확하지 않으면 답은 알고리즘 교과서의 목차보다 좋을 것입니다.
Ito Tsuyoshi

1
John MacCormick의 "미래를 변화시킨 9 가지 알고리즘 : 오늘날의 컴퓨터를 움직이는 독창적 인 아이디어"라는 최근 책이 있습니다. press.princeton.edu/titles/9528.html
Alessandro Jacopson

답변:


18

고속 푸리에 변환은 실제 컴퓨터 시스템에서 하루에 대부분의 시간에 해결되는 알고리즘 문제입니까? 가까워 야합니다. 그래서 Cooley-Tukey FFT 알고리즘을 추천하겠습니다 .


이런 내가, FFT는 기본적인 컴퓨터 과학 교육에서 간과되지만 이다 확실히 우리의 현대 사회에 엄청난 영향 알고리즘, 우리 주위에 많은 현대적인 것들의 모든 시간을 FFT를 재정하고 있습니다.
Jukka Suomela

14

곱셈.

아마도 가장 오래되지 않은 가장 오래된 알고리즘 중 하나이며 FFT보다 더 자주 해결되는 문제 일 것입니다.


곱셈은 ​​알고리즘이 아니며, 다양한 알고리즘으로 해결되는 많은 하위 문제가있는 문제입니다. 고정 크기 정수 및 부동 소수점, 하드웨어 또는 소프트웨어로 수행; 가변 크기의 큰 숫자 (모듈로 또는 아닙니다), 행렬, ...
Gilles 'SO- 악마 그만'

나는 현대 CPU의 하드웨어 곱셈 회로를 언급하고 있었다 (정수 및 부동 소수점 숫자의 경우이 두 가지는 결국 다르지 않다). 제 이해는 그것들이 동일한 기본 접근법의 "정확하게"매우 정교하게 설계된 버전 인 "롱 곱셈"알고리즘 인 경향이 있다는 것입니다. 이미 중세에 알려져있었습니다.
Jukka Suomela

뺄셈 (비교)은 곱셈보다 훨씬 자주 사용된다고 생각하며 곱셈이 알고리즘으로 계산되고 더하기 / 빼기가 아닌 이유를 알 수 없습니다. 그러나 이것이 답변으로 자격이되는지 모르겠습니다.
Ito Tsuyoshi

덧셈과 뺄셈은 곱셈보다 훨씬 자주 사용됩니다. 실제로 긴 곱셈 알고리즘은 본질적으로 곱셈에 대한 곱셈을 줄입니다. 그러나 여기서 추천 할 수있는 단일 더하기 / 빼기 알고리즘이 있는지 모르겠습니다.
Jukka Suomela

@ JukaSuomela : 2의 보수 덧셈과 뺄셈이 좋은 후보가 될 것입니다.
존 Gietzen

13

DijkstraBellman-Ford 최단 경로 알고리즘. 있다 적어도 각 AS 중 하나를 링크 상태 라우팅 프로토콜 (다 익스트라) 또는 거리 벡터 라우팅 프로토콜 (벨맨 - 포드)를 실행하는 2010 년으로 인터넷에 35,000 자율 시스템 (AS) 활성을. 하나의 AS 내에있는 라우터는 일반적으로 몇 분마다 주기적으로 테이블을 업데이트합니다 (예 : 10).

따라서 하루에 Dijkstra & Bellman-Ford 실행 횟수는 5 백만 이상입니다. 그리고 그것은 라우터에서만 나옵니다.

Google지도에서 가장 짧은 경로 계산 및 10 배를 쉽게 계산할 수있는 계산은 포함하지 않았습니다. 하루에 50 억 건의 집행이 이루어지지는 않습니다.


하루에 50 억 건의 사형 집행이 많이 들릴지 모르지만이 지구상에 수십억 개의 휴대폰이 있다는 것을 명심 해 봅시다. 그 일들이 항상 무엇입니까? 아니면 각 전화 통화 중에 무엇을하고 있습니까? 나는 모른다. 그러나 나의 추측은 그들이 최단 경로보다 최소한 FFT를 더 많이하고 있다는 것이다.
Jukka Suomela

8

14
그런데 quicksort가 실제 세계에서 가장 일반적으로 사용되는 정렬 알고리즘 인 경우가 실제로 있습니까? 일반적으로 사용되는 프로그래밍 언어에서 범용 "정렬"기능의 구현에 대해 간단히 살펴 보았습니다. Perl : 최근에 quicksort에서 mergesort로 전환 한 것 같습니다. 파이썬 : Timsort (mergesort / insertion sort hybrid)를 사용합니다. Java : 요즘에는 팀 소트 (Missorts)였던 머지 소트 (mergesort)였습니다. 데이터베이스는 외부 정렬을 사용하는 경향이 있습니다. 퀵소트는 이미 멸종 위기에 처한 종입니까?
Jukka Suomela

나는 이것이 매우 좋은 지적이라고 생각합니다. 누군가가 답을 편집 할 수 있다면 좋을 것입니다.
Juan Bermejo Vega

@ Juan, Jukka가 언급 한 요점은 정확하지만 대답을 편집 할 이유가 없습니다.
Kaveh


7

가장 많이 사용되는 알고리즘은 모든 RAM 액세스에 표시되므로 패리티 검사 (또는 CRC 또는 일종의 오류 수정 코드)라고 생각합니다.


또한 모든 IP 기반 네트워크를 통해 전송되는 모든 패킷에 대해 적어도 한 번 사용
Claus Broch


4

k

보다 일반적으로 이론적이고 실질적인 아이디어가있는 아이디어 에 대해서는 Kanellakis 상 수상자 를 살펴보십시오 .


링크 주셔서 감사합니다, 그것은 매우 흥미로운 보인다. 이 질문에 대한 부분적인 동기는 사이트에 대한 멋진 알고리즘 이름을 찾는 것이 었습니다. :)
Kaveh

4

유한 automata로 변환하여 정규 표현식 일치-나는이 라인을 따라 grep 함수를 믿습니다.



3

현재의 TCP 구현에서 사용되는 알고리즘보다 더 널리 사용되는 알고리즘 , 즉 혼잡 방지 , 빠른 재전송 을 생각하기는 어렵습니다 . 그것은 알고리즘의 기준에 맞는 것을 결정하는 방법에 달려 있지만 ...


그러나 실제로이 목록에있는 FFT보다 TCP 알고리즘을 더 자주 사용할 수 있습니까? 컴퓨터가 단일 IP 패킷 (TCP 여부)을 보내면 일반적으로 전체 FFT 계산이 트리거되지 않습니까? 일반적으로 패킷은 WLAN, ADSL 및 GSM과 같은 기술을 사용하여 어느 시점에서 전송되며 대부분 FFT에 의존하는 변조를 사용한다고 생각합니다.
Jukka Suomela

내 생각 엔 당신이 맞다.
Lev Reyzin


2

SHA-1 (및 일반적으로 해시 함수). 실행 횟수 측면에서 대부분의 다른 알고리즘을 이길 수 있습니다.



2

스케줄링 알고리즘. 전세계 모든 사용자 장치 및 서버에서 사용됩니다. 많은 변형이 사용되고 있습니다. "다단계 피드백 대기열"에 대한 많은 참조가 있습니다.


1

이 응답은 실제 CPU주기와 관련하여 "가장 자주"해석됩니다.

70 년대에 컴퓨팅을 배웠을 때 나는 대다수의 컴퓨터 (읽기 : 메인 프레임)주기가 분류에 전념했다는 것을 기억합니다. 비즈니스 응용 프로그램에는 분석 및보고를위한 광범위한 정렬이 필요합니다. 나는 그것이 크게 변했다고 생각하지는 않지만 전자 메일, 워드 프로세싱 등과 같은 다른 응용 프로그램의 출현은 혼합을 변경해야합니다. 이러한 정렬은 일반적으로 하위 정렬을 만들기 위해 연속 된 필드를 정렬해야하기 때문에 빠른 정렬이 아닌 안정적인 정렬입니다.

엄밀히 말하면, 가장 자주 사용되는 알고리즘은 의심의 여지없이 다른 일이 일어나지 않을 때 Windows 시스템 대기 프로세스에 의해 실행되는 모든 것입니다. ;-).


1

행렬 행렬 벡터 곱하기

... 거의 모든 선형 시스템 솔루션의 배후에있는 계산 작업량입니다. 결과적으로 언제든지 실행될 수 있습니다.

  • 과학자 / 엔지니어가 미분 방정식을 풀다
  • 통계 학자, 새로운 상관 관계 발견 (PCA)
  • 구글은 pagerank를 실행
  • 휴대 전화는 GPS, 가속도계, 셀 타워 위치에서 위치를 예측합니다.
  • 당신의 차는 당신의 서스펜션을 조정합니다
  • 기타....

슈퍼 컴퓨터 나 클러스터에있는 대부분의 FLOP는 스파 스 매트 내부에서 사용됩니다.


1

뉴턴의 방법. 그것은 제곱근 계산, 컴퓨팅 분할을 위해 사용됩니다. 선형 프로그래밍을 수행하는 데 사용할 수 있습니다. 더 일반적으로 (볼록한) 최적화의 핵심입니다. 동작 / 에너지를 최소화하여 물리학의 미분 방정식을 푸는 데 사용할 수 있습니다.


1

해싱 및 레드 블랙 트리.

그것들은 이미 STL (hash_map, map)으로 구현되었으며 모든 프로그래머는 임의의 데이터 유형으로 색인 된 일부 정보를 저장하려고 할 때마다 이러한 컨테이너가 매우 편리하다는 것을 알고 있습니다.



0

동적 프로그래밍 .

DP는 지금까지 조사에서 인용 된 다른 알고리즘보다 "더 자주"사용된다고 생각합니다. 나는 알고리즘 의 특정 구현이 몇 번이나 호출되었는지가 아니라, 사소한 알고리즘 개념이 실제의 프로그래머에 의해 얼마나 자주 구현 되는지에 대해 "더 자주"추론한다 .

DP는 다목적이며 많은 얼굴을 가지고 있습니다. 때로는 무의식적으로 그것을 사용하고 나중에 DP를하고 있음을 깨달았습니다.

물론 동적 프로그램보다 훨씬 일반적인 것이 있지만 대부분 데이터 구조 (배열, 링크 된 목록, 해시)입니다.


7
이것은 단지 하나의 알고리즘이 아니라 알고리즘 디자인 패러다임 (욕심 또는 기본 듀얼과 유사)이기 때문에 다른 제안과 약간 다릅니다.
Jukka Suomela

0

문자열 일치. 응용 프로그램 소프트웨어 및 데이터베이스 수준에서 항상 사용됩니다.

정확한 경우에, 서브 리니어 예상 런타임을 달성하는 몇몇 관련 알고리즘 (KMP, Boyer-Moore)이 있습니다. CS 관점에서 연구하는 것도 흥미 롭습니다.

대략적인 문자열 일치, 즉 정렬은 아마도 더 흥미로울 것입니다. "자동 수정"기능을 알고 있습니까? 또한 시끄러운 문자열 데이터 (예 : DNA)의 검색은 정렬을 사용하여 수행됩니다.

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