배포 된 핵심 알고리즘


307

알고리즘의 중요성을 증명하기 위해 (예 : 이론을하지 않거나 전혀 다른 분야의 학생이나 교수에게), 핵심 알고리즘이 상용, 정부, 또는 널리 사용되는 소프트웨어 / 하드웨어.

다음 기준을 충족시키는 그러한 예를 찾고 있습니다.

  1. 알고리즘을 사용하는 소프트웨어 / 하드웨어가 현재 널리 사용되고 있습니다.

  2. 예는 구체적이어야합니다. 특정 시스템 및 특정 알고리즘에 대한 참조를 제공하십시오.
    예를 들어, "알고리즘 X는 이미지 프로세싱에 유용하다"에서 "이미지 프로세싱"이라는 용어는 충분히 구체적이지 않다; "Google 검색에서 그래프 알고리즘 사용"에서 "그래프 알고리즘"이라는 용어는 구체적이지 않습니다.

  3. 알고리즘은 전형적인 학부 또는 박사 과정에서 가르쳐야합니다. 알고리즘 또는 데이터 구조의 클래스. 이상적으로 알고리즘은 일반적인 알고리즘 교과서에서 다룹니다. 예를 들어, "잘 알려진 시스템 X는 거의 알려진 알고리즘 Y를 사용한다"는 좋지 않다.


최신 정보:

큰 답변과 링크에 다시 한번 감사드립니다! 어떤 사람들은 핵심 알고리즘이 널리 보급되어 특정 용도를 가리 키기가 어렵 기 때문에 기준을 충족시키기가 어렵다고 말합니다. 어려움을 봅니다. 하지만 때문에 내 경험으로 말하는 사람들이 구체적인 예와 함께 올 가치가있다 생각한다 "그들이 있기 때문에 알고리즘이 중요 봐, 거의 모든 곳에서 !" 작동하지 않습니다.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Bjørn Kjos-Hanssen

답변:


473

제 생각에 시스템 배후의 주요 동인 인 알고리즘은 비 알고리즘 과정에서 쉽게 찾을 수있는 것과 같은 이유로, 즉각적인 응용 프로그램이있는 이론은 순수한 수학 과정이 아닌 응용 수학에서 쉽게 찾을 수 있습니다. 실제 문제가 강의에서 추상 문제의 정확한 구조를 갖는 것은 드 rare니다. 논쟁의 여지가 있기 때문에 Strassen의 곱셈, AKS 원시성 테스트 또는 Moser-Tardos 알고리즘과 같은 세련된 알고리즘 코스 자료가 비디오 데이터베이스, 최적화 컴파일러, 운영 체제 구현의 저수준 실제 문제와 관련이있는 이유는 없습니다. 네트워크 혼잡 제어 시스템 또는 기타 시스템. 이 과정의 가치는 효율적인 솔루션을 찾기 위해 문제의 구조를 이용하는 복잡한 방법이 있다는 것을 배우는 것입니다. 고급 알고리즘은 또한 분석이 사소한 간단한 알고리즘을 충족시키는 곳이기도합니다. 이런 이유로 간단한 무작위 알고리즘이나 PageRank를 무시하지 않습니다.

큰 소프트웨어를 선택하고 기본 및 고급 알고리즘을 구현할 수 있다고 생각합니다. 사례 연구로서 Linux 커널에 대해이 작업을 수행했으며 Chromium의 몇 가지 예를 보여주었습니다.

리눅스 커널의 기본 데이터 구조와 알고리즘

github소스 코드에 대한 링크 입니다.

  1. 연결 목록 , 이중 연결 목록 , 잠금없는 연결 목록 .
  2. 교과서에서 찾을 수없는 것을 알려주는 주석이있는 B + 나무 .

    비교적 간단한 B + Tree 구현. B + Trees의 작동 방식을 이해하기 위해 학습 연습으로 작성했습니다. 유용한 것으로 판명되었습니다.

    ...

    교과서에는 일반적으로없는 트릭이 사용되었습니다. 가장 낮은 값은 왼쪽이 아니라 오른쪽에 있습니다. 노드 내에서 사용 된 모든 슬롯은 왼쪽에 있고 사용되지 않은 모든 슬롯에는 NUL 값이 있습니다. 대부분의 작업은 모든 슬롯에서 한 번만 반복되고 첫 번째 NUL에서 종료됩니다.

  3. 뮤텍스 , 드라이버 등에 사용되는 우선 순위 정렬 목록

  4. 레드-블랙 트리는 스케줄링, 가상 메모리 관리, 파일 디스크립터 및 디렉토리 엔트리 등을 추적 하는 데 사용됩니다 .
  5. 간격 나무
  6. 기수 나무 에 사용되는 메모리 관리 , NFS 관련 조회 및 관련 기능을 네트워킹.

    기수 트리의 일반적인 용도는 포인터를 저장하여 페이지를 구성하는 것입니다.

  7. 문자 그대로 교과서 구현 인 우선 순위 힙제어 그룹 시스템 에서 사용됩니다 .

    CLR을 기반으로하는 포인터가 포함 된 간단한 삽입 전용 정적 크기 우선 순위 힙 (7 장)

  8. Knuth 및 용지를 참조하는 해시 함수

    Knuth는 곱셈 해싱을위한 기계어로 표현할 수있는 최대 정수에 대한 황금 비율의 소수를 권장합니다. 척 레버는이 기술의 효과를 검증했습니다.

    http://www.citi.umich.edu/techreports/reports/citi-tr-00-1.pdf

    이 소수는 비트 스파 스로 선택됩니다. 즉, 소수에 대한 연산은 곱셈이 느린 기계의 곱셈 대신 시프트 및 덧셈을 사용할 수 있습니다.

  9. 이 driver 와 같은 코드의 일부 부분은 자체 해시 함수를 구현합니다.

    Rotating Hash 알고리즘을 사용하는 해시 함수

    Knuth, D. 컴퓨터 프로그래밍 기술, 3 권 : 정렬 및 검색, 6.4 장. 애디슨 웨슬리, 1973

  10. inode , 파일 시스템 무결성 검사 등 을 구현하는 데 사용되는 해시 테이블
  11. 비트 배열 은 플래그, 인터럽트 등을 처리하는 데 사용되며 Knuth Vol. 4.

  12. 세마포어스핀 잠금

  13. 이진 검색인터럽트 처리 , 레지스터 캐시 조회 등에 사용됩니다.

  14. B- 트리를 이용한 이진 검색

  15. 디렉토리 구성에 사용되는 깊이 첫 검색 및 변형 .

    start_handle에 의해 지정된 노드에서 시작하고 끝나는 네임 스페이스 트리의 수정 된 깊이 우선 보행을 수행합니다. 콜백 함수는 type 매개 변수와 일치하는 노드가 발견 될 때마다 호출됩니다. 콜백 함수가 0이 아닌 값을 반환하면 검색이 즉시 종료되고이 값은 호출자에게 반환됩니다.

  16. 너비 우선 검색 은 런타임시 잠금의 정확성을 확인하는 데 사용됩니다.

  17. 링크 된 목록의 병합 정렬가비지 수집 , 파일 시스템 관리 등에 사용됩니다.

  18. 버블 정렬 은 드라이버 라이브러리에서도 놀랍게 구현됩니다.

  19. 크 누스 - 모리스 - 프랫 문자열 일치 ,

    Knuth, Morris 및 Pratt로 인해 선형 시간 문자열 매칭 알고리즘을 구현합니다 [1]. 그들의 알고리즘은 전이 함수 △의 명시적인 계산을 완전히 피한다. 그것의 매칭 시간은 O (n)이며, n은 길이 (텍스트)이며 보조 함수 PI [1..m]만을 사용하고 m은 길이 (패턴)이며 시간 O (m)의 패턴으로부터 사전 계산됩니다. 어레이 PI는 전이 함수 (DELTA)가 필요에 따라 "즉시"효율적으로 계산 될 수있게한다. 대략적으로 말하면 SIGMA의 상태 "q"= 0,1, ..., m 및 모든 문자 "a"에 대해 PI [ "q"] 값에는 "a"와 독립적 인 정보가 포함되며 Δ ( "q", "a") 2 계산. 배열 PI에는 m 개의 항목 만 있고 DELTA에는 O (m | SIGMA |) 항목이 있으므로 | SIGMA | DELTA 대신 PI를 계산하여 전처리 시간.

    [1] Cormen, Leiserson, Rivest, Stein Introdcution to Algorithms, 2 판, MIT Press

    [2] 유한 자동화 이론 참조

  20. 대안을 선호하는시기에 대한 참조 및 권장 사항과 일치하는 Boyer-Moore 패턴 .

    Boyer-Moore 문자열 일치 알고리즘을 구현합니다.

    [1] 빠른 문자열 검색 알고리즘, RS Boyer 및 Moore. 컴퓨팅 기계 협회의 통신, 20 (10), 1977, 762-772 쪽. http://www.cs.utexas.edu/users/moore/publications/fstrpos.pdf

    [2] 정확한 문자열 매칭 알고리즘 핸드북, Thierry Lecroq, 2004 http://www-igm.univ-mlv.fr/~lecroq/string/string.pdf

    참고 : BM (Boyer-Moore)은 오른쪽에서 왼쪽으로 일치하는 항목을 검색하므로 여러 블록에 걸쳐 일치하는 항목이 분산 될 수 있습니다.이 경우이 알고리즘은 일치하는 부분을 찾지 못합니다.

    그러한 일이 발생하지 않도록하려면 KMP (Knuth-Pratt-Morris) 구현을 대신 사용하십시오. 결론적으로, 설정에 따라 적절한 문자열 검색 알고리즘을 선택하십시오.

    필터링, NIDS 또는
    이와 유사한 보안 목적으로 텍스트 검색 인프라를 사용하고 KMP를 사용한다고 가정하십시오 . 그렇지 않으면 실제로 성능에 관심이있는 경우 QoS (Quality of Service) 정책을 적용하기 위해 패킷을 분류한다고 가정하고 여러 조각에 분산 될 수있는 일치 항목에 대해서는 신경 쓰지 말고 BM으로 이동하십시오.

Chromium 웹 브라우저의 데이터 구조 및 알고리즘

Google 코드소스 코드에 대한 링크가 있습니다 . 몇 가지만 나열하겠습니다. 검색 기능을 사용하여 선호하는 알고리즘 또는 데이터 구조를 찾아 보는 것이 좋습니다.

  1. 플레이 트리 .

    트리는 할당 정책 (Allocator)에 의해 매개 변수화됩니다. 이 정책은 C 비어있는 상점 또는 영역에 목록을 할당하는 데 사용됩니다. zone.h를 참조하십시오.

  2. Voronoi 다이어그램 은 데모에 사용됩니다.
  3. Bresenham의 알고리즘에 기반한 태빙 .
Chromium 코드에 포함 된 타사 코드에는 이러한 데이터 구조 및 알고리즘도 있습니다.

  1. 이진 나무
  2. 레드 블랙 나무

    줄리안 워커의 결론

    붉은 검은 나무는 재미있는 짐승입니다. 그것들은 AVL 나무 (그들의 직접적인 경쟁자)보다 간단하다고 생각되며, 언뜻보기에는 삽입이 산들 바람이기 때문에 이것은 사실 인 것 같습니다. 그러나 삭제 알고리즘을 사용하기 시작하면 빨간색 검은 나무가 매우 까다로워집니다. 그러나 이러한 추가 된 복잡성에 대한 균형추는 단일 패스, 하향식 알고리즘을 사용하여 삽입 및 삭제를 모두 구현할 수 있다는 것입니다. 삽입 알고리즘 만 하향식으로 작성할 수있는 AVL 트리에는 해당되지 않습니다. AVL 트리에서 삭제하려면 상향식 알고리즘이 필요합니다.

    ...

    빨간 검은 나무는 기발한 이름을 가진 대부분의 데이터 구조로 인기가 있습니다. 예를 들어, Java 및 C ++에서 라이브러리 맵 구조는 일반적으로 빨간색 검은 색 트리로 구현됩니다. 레드 블랙 트리는 AVL 트리와 속도가 비슷합니다. 균형이 그리 좋지는 않지만 균형을 유지하는 데 필요한 작업은 일반적으로 빨간색 검은 색 트리에서 더 좋습니다. 주위에 떠 다니는 몇 가지 오해가 있지만 대부분의 경우 붉은 검은 나무에 대한 과대 광고가 정확합니다.

  3. AVL 나무
  4. 압축에는 Rabin-Karp 문자열 일치 가 사용됩니다.
  5. 오토 마톤의 접미사를 계산합니다 .
  6. Apple Inc.에서 구현 한 블룸 필터
  7. Bresenham 알고리즘 .

프로그래밍 언어 라이브러리

나는 그들이 고려할 가치가 있다고 생각합니다. 프로그래밍 언어 설계자들은 일부 엔지니어들이 이러한 데이터 구조와 알고리즘을 구현하여 다른 사람들이 필요로하지 않는 시간과 노력이 필요하다고 생각했습니다. 라이브러리의 존재는 C로 작성되었지만 Java 응용 프로그램에서는 덜 작성된 소프트웨어에서 기본 데이터 구조를 다시 구현할 수있는 이유 중 하나입니다.

  1. C의 ++의 STL은 대한리스트, 스택, 큐,지도, 벡터, 및 알고리즘을 포함 , 정렬 검색 및 힙 조작 .
  2. Java API 는 매우 광범위하며 훨씬 더 많은 것을 다루고 있습니다.
  3. 부스트 C ++ 라이브러리는 보이어 - 무어와 크 누스 - 모리스 - 프랫 문자열 매칭 알고리즘과 같은 알고리즘을 포함한다.

할당 및 스케줄링 알고리즘

휴리스틱 (heuristics)이라고하더라도 사용하는 정책에 따라 필요한 알고리즘 및 데이터 구조 유형이 결정되므로 스택과 큐에 대해 알아야하기 때문에 이러한 흥미로운 점이 있습니다.

  1. Least Recent Used는 여러 가지 방법으로 구현할 수 있습니다. Linux 커널 의 목록 기반 구현 입니다.
  2. 다른 가능성으로는 First In First Out, Least Frequently Used 및 Round Robin이 있습니다.
  3. VAX / VMS 시스템에서는 FIFO의 변형을 사용했습니다.
  4. 시계 알고리즘 에 의해 리처드 카는 리눅스에서 페이지 프레임 교체에 사용됩니다.
  5. 인텔 i860 프로세서는 무작위 교체 정책을 사용했습니다.
  6. Adaptive Replacement Cache 는 일부 IBM 스토리지 컨트롤러에서 사용되며 특허 문제로 인해 PostgreSQL에서도 사용되었습니다 .
  7. 버디 메모리 할당 알고리즘 TAOCP 권 누스에 의해 설명된다. 1은 Linux 커널에서 사용되며 jemalloc 동시 할당자는 FreeBSD 및 Facebook 에서 사용됩니다 .

* nix 시스템의 핵심 유틸리티

  1. grepawk는 모두 정규식으로 NFA의 Thompson-McNaughton-Yamada 구성을 구현하여 Perl 구현을 능가합니다 .
  2. tsort 는 토폴로지 정렬을 구현합니다.
  3. fgrepAho-Corasick 문자열 일치 알고리즘을 구현합니다 .
  4. GNU 그렙은 , 보이어 - 무어 알고리즘을 구현 저자 마이크 Haertel에 따라.
  5. Unix의 crypt (1)는 Enigma 컴퓨터에서 암호화 알고리즘의 변형을 구현했습니다.
  6. James Hunt와 공동으로 작성한 프로토 타입을 기반으로 Doug McIllroy가 구현 한 Unix diff 는 Levenshtein 거리를 계산하는 데 사용되는 표준 동적 프로그래밍 알고리즘보다 성능이 우수합니다. 리눅스 버전은 최단 편집 거리를 계산한다.

암호화 알고리즘

이것은 매우 긴 목록 일 수 있습니다. 암호화 알고리즘은 안전한 통신 또는 트랜잭션을 수행 할 수있는 모든 소프트웨어에서 구현됩니다.

  1. 머클 트리 , 특히 Tiger Tree Hash 변형은 GTK GnutellaLimeWire 와 같은 피어 투 피어 애플리케이션에 사용되었습니다 .
  2. MD5 는 소프트웨어 패키지에 대한 체크섬을 제공하는 데 사용되며 * nix 시스템 ( Linux 구현 )의 무결성 검사에 사용 되며 Windows 및 OS X에서도 지원됩니다.
  3. OpenSSL 은 AES, Blowfish, DES, SHA-1, SHA-2, RSA, DES 등 많은 암호화 알고리즘을 구현합니다.

컴파일러

  1. LALR 구문 분석 은 yacc 및 bison에 의해 구현됩니다.
  2. Dominator 알고리즘은 SSA 양식을 기반으로 가장 최적화 된 컴파일러에 사용됩니다.
  3. lexflex는 정규식을 NFA로 컴파일합니다.

압축 및 이미지 처리

  1. GIF 이미지 형식에 대한 Lempel-Ziv 알고리즘은 * nix 유틸리티 부터 복잡한 프로그램으로 변환 하는 이미지 조작 프로그램에서 구현됩니다 .
  2. 실행 길이 인코딩은 PCX 파일 (원래의 Paintbrush 프로그램에서 사용), 압축 된 BMP 파일 및 TIFF 파일을 생성하는 데 사용됩니다.
  3. Wavelet 압축은 JPEG 2000의 기본이므로 JPEG 2000 파일을 생성하는 모든 디지털 카메라는이 알고리즘을 구현합니다.
  4. 리드 솔로몬 오류 수정은 Linux 커널 , CD 드라이브, 바코드 리더 에서 구현 되며 Voyager의 이미지 전송을위한 컨볼 루션과 결합되었습니다.

갈등 중심의 절 학습

2000 년 이래로 산업 벤치 마크 (일반적으로 하드웨어 산업에서 사용되지만 다른 소스도 사용됨)에서 SAT 솔버의 실행 시간은 매년 거의 기하 급수적으로 감소했습니다. 이 개발에서 매우 중요한 부분은 Davis Logemann과 Loveland의 원본 논문에 있는 Boolean Constraint Propagation 알고리즘과 제약 프로그래밍 및 인공 지능 연구에서 시작된 조항 학습 기술 을 결합한 Conflict Driven Clause Learning 알고리즘입니다 . 특정 산업 모델링의 경우 SAT는 쉬운 문제로 간주됩니다 ( 이 토론 참조).). 나에게 이것은 최근 몇 년 동안 널리 퍼진 알고리즘 진보, 영리한 공학 아이디어, 실험 평가 및 문제를 해결하기 위해 공동의 노력을 결합하기 때문에 가장 큰 성공 사례 중 하나입니다. Malik과 ZhangCACM 기사 는 잘 읽었습니다. 이 알고리즘은 많은 대학에서 가르치고 있지만 (사례가있는 곳에서는 4 곳을 다녔지 만) 일반적으로 논리 또는 형식적 방법 수업입니다.

SAT 솔버의 응용 프로그램은 다양합니다. IBM, Intel 및 기타 여러 회사에는 자체 SAT 솔버 구현이 있습니다. OpenSUSE 의 패키지 관리자 는 SAT 솔버도 사용합니다.


5
@HuckBennett, CDCL은 휴리스틱에 의해 매개 변수화 된 알고리즘이지만 그 자체가 휴리스틱이 아닙니다. 최악의 경우 지수 행동을 나타내지 만이를 보여주는 것은 쉽지 않습니다. 또한 우리는 더 잘할 수없고 실제로 수행 할 수있는 최선의 방법이므로 모든 컴퓨터 과학자들이 이에 대해 알아야한다고 생각합니다! LRU, FIFO 등은 휴리스틱이지만 ARC와 마찬가지로 구현하기 위해 영리한 알고리즘이나 데이터 구조가 필요할 수 있습니다.
Vijay D

9
그러한 주석은 Simplex에 적용되지 않았습니까? 처음에는 잘 이해하지 못하고 나중에 지수로 표시되었지만 실제로 작동하며 훨씬 나중에 다항식으로 매끄럽게 복잡해 보입니까? CDCL은 알고리즘 분석에 흥미 롭습니다. 최악의 경우 동작을 나타내는 수식 패밀리를 도출하기 위해 증명 복잡성을 거쳐야하며, 일부 변형 변형보다 기하 급수적으로 간결 할 수 있음을 보여 주어야합니다. 이러한 분석이 여전히 열려있는 대칭 파괴 및 자폐 기술과 같은 다양한 확장이 있습니다.
Vijay D

28
이것은 학생을위한 보물입니다
neo1691

2
@EmanueleViola, 몇 가지 예를 더 추가했습니다. 게시물이 오래되어서 확장하고 싶지 않습니다. 어쩌면 Linux, Chrome, 웹 서버 등과 같은 실제 시스템의 일부로 Dijkstra, Simplex, Bloom 필터 구현에 대해 새로운 질문을해야 할 수도 있습니다. 구체적으로 대답하면 더 좋은 답변을 얻을 수 있다고 생각합니다.
Vijay D

4
해커 뉴스 및 r / 프로그래밍.
Vijay D

40

페이지 랭크 는 가장 잘 알려진 알고리즘 중 하나입니다. Google의 공동 창립자 인 Larry Page와 공동 저자가 개발 한이 프로그램은 Google의 원래 검색 엔진의 기반을 형성 했으며 당시 경쟁 업체보다 더 나은 검색 결과를 얻을 수있게 도와주는 것으로 유명 합니다.

웹 페이지에서 시작하여 무작위 링크를 반복해서 클릭하여 새 페이지로 이동하는 "랜덤 서퍼"를 상상해보십시오. 문제는 "서퍼가 각 페이지에서 몇 분의 시간을 소비합니까?"입니다. 서퍼가 페이지에서 더 많은 시간을 보낼수록 페이지가 더 중요하게 고려됩니다.

케이π0케이π0


7
나는 이것이 전형적인 알고리즘 자료라고 생각하지 않습니다.
Manu

14
우연히 알고리즘 클래스에서 PageRank에 대해 처음 알게되었습니다. 사실, 교수는 "실제로 사용되는 알고리즘"의 좋은 예 였기 때문에 교수가 그것을 선택했다고 생각합니다. 예제를 "CLRS의 전반"유형 자료로 제한하는 경우 예제 목록이 너무 길거나 너무 짧습니다. 퀵 정렬, B- 트리 및 Dijkstra의 알고리즘은 어디에나 있습니다.
uck 베넷

2
우리는 학부생들에게 PageRank를 가르칩니다.
Aaron Roth

6
나는 또한 학부들에게 (필요한 알고리즘 수업과 더 전문화 된 그래프 알고리즘 선택 과목)에게 가르칩니다.
David Eppstein

2
선택 과목에서 학부생으로 PageRank를 배웠습니다.
Vijay D

33

선형 프로그래밍 문제를 해결하기 위해 널리 사용되는 소프트웨어 CPLEX (또는 유사한) Simplex 방법 / 알고리즘 구현에 대해 언급하겠습니다. 경제 및 운영 연구에서 가장 많이 사용되는 알고리즘입니다.

"어떤 수학 문제가 세계에서 대부분의 컴퓨터 시간을 사용하고 있는지에 대한 통계를 취한다면 (정렬 및 검색과 같은 데이터베이스 처리 문제를 계산하지 않음) 대답은 아마도 선형 프로그래밍 일 것입니다. "(L. Lovász, A new 선형 프로그래밍 알고리즘이 심플 렉스 방법보다 낫거나 나쁜가? Math. Intelligencer 2 (3) (1979/80) 141-146.)

심플 렉스 알고리즘도 이론에 큰 영향을 미칩니다. 예를 들어 (Polynomial) Hirsch Conjecture를 참조하십시오 .

나는 전형적인 학부 또는 박사를 추측합니다. 알고리즘의 클래스는 단순 알고리즘 (가우스 제거 방법과 같은 선형 대수의 기본 알고리즘 포함)을 처리합니다.

(정렬을위한 Quicksort를 포함한 다른 성공적인 알고리즘 은 책의 알고리즘에 나열되어 있습니다.)


"경제 및 운영 연구"는 구체적이지 않습니다. CPLEX는 알고리즘의 구현 일 뿐이므로 필자가 찾고있는 예제 유형이 아닙니다. 예를 들어, gcc 컴파일러가 심플 렉스 방법을 사용한다면 다르게 될 것입니다.
Manu

12
"선형 프로그래밍 문제"는 경제와 OR에 관해 말할 때 충분히 구체적이라고 생각합니다. 또한 CPLEX는 구현 뒤에 알고리즘을 의미했습니다.
vb le

16
"오늘날, 대부분의 대기업은 선형 프로그래밍을 사용하여 제품 가격을 책정하고 공급망을 관리합니다. 운송 회사는이 솔루션을 사용하여 전 세계에 분산 된 공급 업체에서 생산 능력 제약이있는 먼 시장으로 많은 제품의 선적을 통합, 조정 및 배송하는 가장 저렴한 방법을 선택합니다. 산업은 탐사, 블렌딩, 생산 일정 계획 및 배포에 사용합니다. 철강 산업은 철광석을 평가하고 코크스로 추가 및 제품 선택을 위해이
Sasho Nikolov

감사. 그러나 나는 그 인용문이 매우 모호하다는 것을 안다. 나는 한 클래스의 학생들 앞에서 절반이 잠들 것이라고 말하면 ;-) 우리가 다음과 같이 말하면 다를 것입니다 : UPS는 다음과 같이 패키지를 배송하기 위해 LP를 사용합니다 ... 나는 그런 예를 말하지 않습니다 찾기가 쉽지만 "대부분의 대기업이 LP를 사용한다"는 점에서 적어도 하나를 가리킬 수 있기를 바랍니다 .
마누

10
2007 년부터 LAX (공항)는 Stackelberg 게임을 해결하기위한 소프트웨어를 사용하여 보안 담당자를 예약했습니다. 큰 LP를 해결하는 것은 전체의 일부입니다 (예 : teamcore.usc.edu/ARMOR-LAX 참조) . 게다가, 나는 당신의 운영 리서치 부서에 누군가에게 물어볼 것입니다 : 그들은 실제 생활에서 LP를 사용하는 것에 관한 많은 전쟁 이야기를 가지고있을 것입니다
Sasho Nikolov

30

알다시피, National Resident Matching Program 은 오랫동안 안정된 결혼 문제에 대한 게일 -Shapley 알고리즘 을 그대로 적용한 것입니다 . 이후 배우자 할당 (일명 "이체 문제") 등과 같은 추가 세부 사항을 처리하도록 약간 업데이트되었습니다.


안정적인 결혼이 일반적인 알고리즘 자료인지 확실하지 않습니다.
Manu

16
Tardos and Kleinberg Algorithms Design 책과 Motwani의 Randomized Algorithms에도 있으며 두 책 모두 널리 사용됩니다. 안정적인 결혼은 알고리즘 과정에서 보편적으로 가르쳐지지 않을 수도 있지만, 많은 결혼에서 확실히 가르쳐지고 있습니다.
Sasho Nikolov

10
빠른 검색을 통해 버클리 CS70 , MIT 6.042 , UMD CMSC451 등에서
나타났습니다

1
흥미롭게도 배우자 할당을 추가하면 문제는 NP-complete : arxiv.org/abs/1308.4534가 됩니다. 그러나 실제로 이것은 너무 많은 문제를 일으키지 않는 것 같습니다 : en.wikipedia.org/wiki/…
Joshua Grochow

2
그것은 전통적으로 적용되지 않을 수 있습니다 동안 @EmanueleViola는 클라인 베르그 / Tardos 책에있는 그것의 포함은, 그것은 더 많은 인기를했다 (그렇지 않은 경우 그것은해야합니다!)
수레 쉬 벤 카트를

24

박사 수준의 자료도 포함하고 있다면 많은 (대부분의) 대학원 CS 프로그램에는 코딩 이론에 대한 코스가 포함됩니다. 코딩 이론에 대한 과정이 있다면 컴팩트 디스크의 작동 방식에 필수적인 Reed-Solomon 코드 와 JPEG, MP3 및 ZIP 파일 형식에 사용되는 Huffman 인코딩 을 확실히 다룰 것 입니다. 코스의 방향에 따라 GIF 형식으로 사용되는 Lempel-Ziv 도 다룰 수 있습니다 . 개인적으로 나는 학부 알고리즘 과정에서 Lempel-Ziv를 얻었지만 비정형 적이라고 생각합니다.


1
그리고 프로젝트에 필요한 학부생으로 허프만 인코딩에 대한 강의를 받았습니다.
브라이언 S

허프만은 CLRS의 첫 챕터 중 하나이므로 반드시 자격을 갖추어야합니다.
Sasho Nikolov

21

GNU grep 은 지정된 패턴과 일치하는 줄을 찾기 위해 하나 이상의 입력 파일을 검색하기위한 명령 줄 도구입니다. grep 이 매우 빠르다는 것은 잘 알려져 있습니다 ! 여기에 저자 (에서 촬영 마이크 Haertel에에서 인용의 여기가 ) :

GNU grep uses the well-known Boyer-Moore algorithm, which looks first for the
final letter of the target string, and uses a lookup table to tell it how far
ahead it can skip in the input whenever it finds a non-matching character.

19

더 일반적으로, Kanellakis상은 실제로 큰 영향을 미친 이론적 발견에 대해 ACM에 의해 수여됩니다.

2012 년 수상은 근거리에 민감한 해싱 (locality-sensitive hashing)으로 , 인접 이웃 문제에 대한 데이터 마이닝의 차원 축소를위한 방법으로 자리 잡았습니다.


나는 이것이 가르 칠 수 있지만 널리 가르쳐지지는 않는다고 생각합니다.
Manu

3
불행하지만 사실입니다. 그러나 LSH의 변형 (카운트-분 스케치 및 친척 등)이 "대형 데이터"또는 "데이터 마이닝"과정에 나타나기 시작했습니다. 예를 들어 알고리즘 클래스에서 블룸 필터를 가르칩니다.
Suresh Venkat

개인적인 경험으로 LSH는 "빅 데이터"(100mln 품목)의 인스턴스에서 우리를 위해 확장되지 않았습니다.
lynxoid

1
@lynxoid 그것은 별도의 토론 / 질문입니다 :). 이 곳의 충분한 사례가있다 않습니다 내가이 특정 질문에 관련이 생각하는 일이.
Suresh Venkat

18

데이터 스트리밍 알고리즘 의 CountMin SketchCount Sketch 는 산업 시스템에서 네트워크 트래픽 분석 및 매우 큰 비정형 데이터 분석에 사용됩니다. 이는 소량의 공간에서 수많은 항목의 빈도를 요약 한 데이터 구조입니다. 물론 그들은 대략 그렇게하고, 높은 확률로 모든 품목의 빈도는 대략 이내로 추정된다는 보장ε 의 총 "질량"의 분율 됩니다 (질량은 첫 번째 또는 두 번째 순간입니다) 주파수 벡터). 이것은 "트 렌딩"항목을 찾기에 충분하며 많은 응용 프로그램에서 필요합니다.

이러한 데이터 구조의 산업적 사용 예는 다음과 같습니다.

  • 비정형 데이터 분석을위한 Google의 Sawzall 시스템은 Count Sketch를 사용하여 '가장 인기있는 아이템'기능을 구현합니다.
  • 네트워크 트래픽 모니터링을위한 AT & T의 Gigascope "스트림 데이터베이스"시스템 은 CountMin 스케치를 구현 합니다.
  • 스프린트의 연속 모니터링 (CMON) 시스템 CountMin을 구현 합니다.

CountMin의 응용 프로그램에 대한 정보를 수집 하는 사이트 도 있습니다 .

가르치는 한 프린스턴에서 학부 이산 수학 과정의 기본 스케치 기법을 가르친다는 것을 알고 있습니다. 첫 알고리즘 과정에서 CountMin 스케치를 배웠습니다. 어쨌든 CountMin의 분석은 거의 모든 다른 무작위 알고리즘에 대한 분석보다 간단합니다. 이는 쌍별 독립성과 Markov의 불평등을 간단하게 적용하는 것입니다. 이것이 대부분의 알고리즘 과정에서 표준 자료가 아니라면 역사적인 이유로 생각합니다.


1
훌륭한 예 (지금은 핵심 핵심은 아니지만).
마누

16

지난 10 년 동안 다양한 신장 기증자 매칭 프로그램을 통해 신장 이식의 수 (및 품질, 제 생각에)를 늘리기 위해 알고리즘이 사용되었습니다. 나는 이것에 관한 최신 뉴스를 찾는 데 어려움을 겪었지만 여기에 적어도 몇 가지 조언이 있습니다.

  • 2007 년에 짝을 이루는 기부 동맹은 Abraham, Blum 및 Sandholm 의 알고리즘을 사용하고있었습니다 . 그들은 여전히 ​​그것을 사용하고 있지만 온라인으로 검색하여 찾을 수 없습니다. 이 알고리즘은 거의 "표준"과정에서 다루지 않지만, 일반적으로 NP-complete (Cycle Cover의 변형) 인 문제에 대한 충분한 알고리즘을 제공하기 위해 이러한 과정에서 반드시 배운 몇 가지 기본 아이디어를 결합합니다. ).

  • National Kidney Registry는 CPLEX를 포함한 일부 표준 알고리즘도 사용합니다. 이로 인해 실제로 60 명을 연결하는 이식 체인 이 만들어졌습니다 .

이것은 알고리즘의 성공뿐만 아니라 NP- 완전 문제에 대한 알고리즘 연구의 중요성에 대한 내가 가장 좋아하는 예제 중 하나입니다. 그들은 말 그대로 생명을 구할 수 있으며 이미 그렇게했습니다!


또한이 알고리즘의보다 간단한 버전은 보드 게임을 거래하는 데 사용됩니다 : okasaki.blogspot.co.uk/2008/03/what-heck-is-math-trade.html
Radu GRIGore

15

Viterbi의 알고리즘은 음성 인식 및 기타 여러 응용 프로그램에서 여전히 널리 사용됩니다. http://en.wikipedia.org/wiki/Viterbi_algorithm 알고리즘 자체는 기본 동적 프로그래밍입니다.

Wikipedia의 "Viterbi 알고리즘은 1967 년 Andrew Viterbi에 의해 잡음이 많은 디지털 통신 링크를 통한 컨볼 루션 코드의 디코딩 알고리즘으로 제안되었습니다. [1]이 알고리즘은 CDMA 및 GSM 디지털 셀룰러에 사용되는 컨볼 루션 코드를 디코딩하는 데 보편적 인 응용을 발견했습니다. 전화 접속 모뎀, 위성, 우주 통신 및 802.11 무선 LAN : 이제 음성 인식, 음성 합성, 키워드 검색, 전산 언어학 및 생물 정보학에서도 일반적으로 사용됩니다. 인식), 음향 신호는 관찰 된 일련의 이벤트로 취급되고, 텍스트 문자열은 음향 신호의 "숨겨진 원인"으로 간주된다. Viterbi 알고리즘은 음향 신호가 주어질 때 가장 가능성있는 텍스트 문자열을 찾는다. "


13
  1. A *는 많은 개인용 내비게이션 장치 (일명 GPS 장치)에서 사용됩니다.
  2. A *는 매우 잘 정의되어 있으며 매우 간단하게 구현되었습니다.
  3. A *는 완전히 사소한 것은 아니지만 박사 학위를받지는 않습니다. 그것을 이해합니다.

A *는 게임 디자인에서도 자주 사용됩니다. 현대의 3D 게임은 일반적으로 NPC 탐색에 A *를 사용 한다고 생각 하지 않지만 구형 게임뿐만 아니라 2D / 아이소 메트릭 게임도 알고리즘을 사용합니다.
브라이언 S

@BrianS 3D 게임에서 사용되는 길 찾기 알고리즘의 예, 특히 게임의 적 NPC (예 : 슈팅 게임 NPC)의 예를 알고 있습니다. 그리고 그것은 더 부드러운 움직임을 허용했습니다.
Goodwine

@Goodwine, 죄송합니다. 3D 게임에 실제 경로 찾기 알고리즘이 없습니다. 저의 개인적인 경험은 "큐브"와 같은 환경 (캐릭터, 기본적으로 2D, 3D 렌더링에도 불구하고 큐브로 구성된 맵)과 플레이어 캐릭터 테스트에 사용되는 더미 AI에 대한 경험이었습니다.
브라이언 S

12

칩 설계를위한 Jens Vygen의 프로젝트 BonnTools를 확인하십시오. http://www.or.uni-bonn.de/~vygen/projects.html 이것에 대해 몇 가지 이야기를 들었고 그들의 논문도 보았습니다. Raghavan-Thompson 스타일의 무작위 반올림과 대규모 다중 상품 흐름 LP를 해결하기위한 곱하기 가중치 업데이트 방법을 사용합니다. 그러나 다른 큰 프로젝트와 마찬가지로 엔지니어링도 필요하지만 방법론은 잘 알려진 알고리즘을 기반으로합니다.


살펴 보 겠지만 일반적인 알고리즘 자료처럼 들리지는 않습니다.
Manu

8
흠, 무작위 반올림은 일반적으로 박사 수준 알고리즘 과정에서 진행됩니다.
찬드라 체 쿠리

2
왜 무작위 반올림입니까? Sanjeev Arora, Elad Hazan 및 Satyen Kale은 mul 레벨의 가중치 업데이트 방법조차도 UG 수준에서 가르 칠 수있을 정도로 기본적이라고 생각합니다. "분할 및 정복, 동적 프로그래밍, 랜덤 샘플링 등과 함께 모든 알고리즘 학생들에게 가르쳤다." (cf. cs.princeton.edu/~arora/pubs/MWsurvey.pdf 참조 ).
Jagadish


10

나는 위의 모든 멋진 알고리즘으로 아무도 1977/78에서 발명 된 렘펠-지브 (Lempel-Ziv) 압축 알고리즘 패밀리를 언급하지 않았다는 사실에 놀랐습니다.

  1. 스트림 처리를 위해 이미지에서 텍스트로 사용됩니다. LZ *가 현재 가장 많이 사용되는 알고리즘 제품군 일 가능성이 큽니다.
  2. 사전 압축은 압축 이론에서 획기적인 발전이었으며 Shannon-Fano 스타일 접근 방식에서 크게 벗어났습니다.
  3. 제품군의 알고리즘은 다소 간단하고 이해하기 쉽습니다.

최신 정보

분명히 그것은 이미 간단히 언급되었습니다.


10

SVD ( Singular Value Decomposition )는 통계적 요인 분석 또는 주요 성분 분석 과 밀접한 관련이 있으며 학부 선형 대수학 또는 통계 클래스 내에서 이해할 수 있으며 많은 중요한 이론적 특성을 가지고 있습니다. 이미지 압축 알고리즘에서도 중요한 역할을합니다. Netflix $ 1M 상금 경연 대회 (역사상 가장 큰 규모의 데이터 마이닝 대회 중 하나) 에서 우승을 차지한 핵심 요소 로 자리 매김했으며, 현재 사이트에서 사용자 등급을 예측하기 위해 구현되었습니다. 또한 생물학적 이론에서 비롯된 Hebbian 자체 구성 신경 네트워크 와 관련이있는 것으로 알려져 있습니다 .

또한 몇 가지 연결이 하강 그라데이션 에 널리 사용되는 기계 학습인공 신경망 과 경우의 매우 보편적으로 적용되는 최적화 기법으로 뉴턴의 방법은 기본적인 2 차원 형태는. SVD를 얻기위한 경사 하강 알고리즘이있다.


10

Eulerian 경로를 찾는 것은 게놈 어셈블리의 기초에 있습니다-생물 유전체학, 의학, 법의학, 생태학에서 전체 게놈으로 작업 할 때 일반적으로 수행되는 작업입니다.

최신 정보 명백한 것을 잊었습니다. UPS, FedEx, USPS는 매일 밤마다 여행 세일즈맨 문제의 큰 사례를 해결해야합니다. 운전자가 최적의 경로로 운전자를 보낼 수 있도록 많은 시간과 비용을 절약합니다.

UPDATE2 최소 피드백 정점 세트 문제는 많은 OS에서 교착 상태 해결에 사용됩니다.


TSP가 택배 회사에서 해결하려는 문제라고 확신하십니까? 배낭과 다른 포장 문제가 더 큰 실제 과제라고 생각했습니다.
András Salamon

운전 기사 배정은 매일 바뀝니다 (즉, UPS 직원은 매일 같은 집을 방문 할 필요가 없습니다). 경로는 매일 업데이트해야합니다. 그것은 순수한 TSP가 아닙니다. 일방 통행 도로, U 턴 금지, 길 한쪽에 패키지 배달, 다른 한쪽에는 패키지와 같은 추가 제약이 있습니다.
lynxoid

그래도 포장도 중요합니다.
lynxoid

9

나는 최대 매칭 알고리즘을 기반으로 신장 이식으로 영국의 최대 생명을 구하는이 시스템을 좋아합니다. 짝 및 이타 적 신장 기부 . 그들은 일치하지 않는 친구 / 친척이 같은 상황에있는 다른 사람들과 최대로 기부하고자하는 신장을 필요로하는 사람들을 찾습니다. 그런 다음 기부 일에 모든 기증자가 동시에 기부 한 다음, 전국의 신장을 수령인에게 신속하게 운송합니다.


8

이 비교적 새로운 책은 편리하고 확장 된 / 수집 된 형태의 질문에 대한 완전 / 상세 답변으로서 알고리즘 클래스를위한 보충 자료로 사용될 수있는 가치가 있습니다. [이들 중 일부는 이미 언급되었습니다; 강한 중복 자체가 주목할 만하다.]


2 차 심판은 원래 미국 물리 연구소와 IEEE 컴퓨터 협회의 공동 발행물 인 과학 및 공학 컴퓨팅의 2000 년 1 월 -2 월호에서 발췌 한 것입니다. 게스트 편집자 테네시 대학의 잭 동 가라와 오크 리지 국립 연구소와 국방 연구소의 컴퓨팅 과학 센터의 프랜시스 설리반에 의해 컴파일
vzn


6

매우 기본적인 알고리즘에 대한 생각

  1. 난수 생성기는 모든 곳에서, 특히 모든 게임에서 찾을 수 있습니다.
  2. 데이터베이스는 B +, 해시, 우선 순위 대기열, 정규 표현식, 암호 분석, 정렬 등을 포함한 많은 알고리즘으로 구성됩니다. 내 친구는 SGBD가 컴퓨팅 먹이 사슬의 최상위에 있다고 말합니다.
  3. 정렬은 Excel과 같은 모든 곳에서 사용됩니다. 실제로는 실생활에서 항상 사용되지만 일반적으로 인간은 애드혹 알고리즘을 사용합니다.
  4. 패리티 비트는 모든 곳에서 사용됩니다
  5. 허프만 인코딩은 압축 및 전송 소프트웨어
  6. 스택 (LIFO)은 모든 곳에서 사용됩니다. 내부 프로그래밍 언어, CPU 등

그들이 실제 생활에서 나타나는 것을 보여서 반갑습니다.

A. 많은 그룹들이 전화 목록을 계층 적 방식으로 사람들에게 나누어서 통신하기 위해 일종의 취재 트리 알고리즘을 사용합니다. 병원, 고객을 FIFO 알고리즘으로 구성


4
정렬은 알고리즘이 아닙니다. 작업, 즉 수행하고자하는 작업으로, 알고리즘을 설계하거나 실제로 선택해야합니다.
David Richerby

이들은 질문에서 요청한 특정 예가 아닌 것 같습니다.
Kaveh

SGBD == RDBMS 참고로 알지 못했습니다.
Autodidact

6

CT 스캔의 의학적 적용에서 매혹적인 알고리즘 문제가 발생한다. 컴퓨터 단층 촬영 (CT)에서 신체는 다른 각도에서 X- 선에 노출됩니다. 스캐너의 한 쪽 끝에는 X- 레이 송신기가 있고 다른 쪽 끝에는 센서가 있습니다. 이러한 일련의 스캔에서 의사가 검사 할 이미지가 재구성됩니다!

다시 여과 투영 알고리즘 스캔 세트의 이미지의 재구성을위한 기초이다. 이 알고리즘은 실제로 "신호"가 나이 퀴 스트 속도 미만으로 샘플링되는 근사 문제의 한 형태입니다. 이 알고리즘은 모든 병원에서 "뒤에서"사용되고 있으며 기본 필터링 된 역투 영은 푸리에 변환과 같은 학부 수학을 활용하여 푸리에 슬라이스 정리 를 달성합니다 .


6

FFT의 예

한때 FFT 알고리즘을 다른 시스템 언어로 이식하는 일을 도왔습니다.

이 알고리즘은 케이블 TV / 인터넷 / 전화의 동축 전달에서 라인 브레이크를 결정하는 데 사용되었습니다. 기본적으로 기술자는 고객 상자에 신호를 보내도록 요청하는 동시에 QoS, dB 등과 같은 특정 고객에 대한 통계를 실시간으로 표시합니다. 기술자는 데이터와 그래프는 부분적인 휴식이 있었던 집과 기둥 사이에서 몇 피트 이내에 결정됩니다 (또는 내가 말한 것처럼 여러 번의 휴식).

위에서 언급했듯이 FFT는 널리 사용되지만 실제로는 내가 본 것 중 가장 명백하고 명백한 이유 중 하나였습니다.

높은 수준을 유지해야해서 죄송합니다.


5

Bresenham의 라인 알고리즘은 제가 찾은 가장 유용한 단일 알고리즘입니다. 이해하기 쉬운 선 그리기에서 3D 캐스팅 엔진을위한 복잡한 스플라인, 복잡한 다각형 렌더러, 복잡한 애니메이션 및 스케일링 용도로 많은 응용 분야에 사용되었습니다.



2

Wikipedia에는 목록 에서 다소 분류 된 알맞은 알고리즘 / 응용 프로그램 모음이 있습니다. Microsoft는 가장 많이 인용 된 논문을 제공합니다 컴퓨터 과학이나 응용 분야에 대한 명시적인 설명없이 . Huang 교수가 편집 한 다른 CS 회의 _http : //jeffhuang.com/best_paper_awards.html_의 연대순 목록도 있습니다.

Spectral Clustering 은 이미지 분할을 위해 Jianbo Shi와 Jitendra Malik이 도입 한 Normalized cuts 알고리즘으로 알려진 우아한 클러스터링 알고리즘 입니다. 또한 데이터 클러스터링 응용 프로그램에서 잘 개발되어 두 커뮤니티 간의 좋은 교차점입니다.


-2

컴퓨터 과학에 뿌리를 둔 다른 두 개의 개인적으로 좋아하는 예가 있지만, 지난 수십 년 동안 막대한 / 변형 적 진보를 겪고 일상 생활에 막대한 / 실용적 / 적용적인 영향을 미쳤던 추상주의 이론가들이 쉽게 간과 할 수있을 것입니다. 이미 온 세대가 그들 없이는 세상을 알지 못하고 자랐습니다. 기본적으로 모델링 및 시뮬레이션 범주입니다 .

  • 물리 시뮬레이션 알고리즘 . 주로 뉴턴 법을 사용하지만 유체 역학과 같은 다른 법을 사용합니다. 엔지니어링 응용 프로그램, 비디오 게임 및 때로는 영화에 이르기까지 다양한 응용 프로그램에 사용됩니다. 이는 가상 / 테스트 설계를 시뮬레이션 된 스트레스에 적용하여 자동차 및 비행기의 안전, 효율성 또는 신뢰성을 크게 향상시키는 역할도합니다. 생물 정보학의 주요 관련 연구 분야 (예 : 약물 디자인, 질병 예방 등) : 단백질 접힘 / 구조 예측 . 또한 노벨 화학상은 Warshel의 Levitt Karplus 에게 화학 시뮬레이션 으로 수여되었습니다 . 물리 시뮬레이션 알고리즘은 핵무기 안전 / 시험예를 들어 Los Alamos 실험실에서.

  • 레이트 레이싱 / CGI 알고리즘 . 이것은 불과 몇 십 년 전 [친구가 레이트 레이싱 알고리즘을 쓰는 CS에서 석사 학위를 취득했습니다.] 연구 주제로 시작되었지만 게임 및 영화 제작 사업에 많이 적용되어 많은 양의 책임을 지니는 특별한 수준의 진실성에 도달했습니다. 영화의 특수 효과. 이러한 산업은 문자 그대로 수십억 달러가 투자되어이 알고리즘을 사용하고 있으며 전체 대기업은이를 활용하는 데 기반을두고 있습니다 (예 : Pixar) . 주로 공상 과학 영화에서 주로 사용되는이 기술은 현재 널리 퍼져 있으며 "일반적인"영화에서도 일상적으로 사용됩니다. 예를 들어 최근 위대한 개츠비 CGI 효과에 크게 의존하여 설득력이 있거나 스타일이 지정된 환경을 그리거나 영화 / 캐릭터 등을 수정합니다.


-3

Rosetta 코드는 Semantic MediaWiki와 함께 프로그래밍 작업 (692) 및 프로그래밍 언어 (518)에 의해 적용된 알고리즘을 나열합니다 .


이것이 어떻게 "상업용, 정부 또는 널리 사용되는 소프트웨어 / 하드웨어에 배포 된 핵심 알고리즘"의 예입니까?
David Richerby

Wikipedia / DBpedia URI에 대한 다른 답변에 나열된 우수한 알고리즘 각각의 구현을 상호 참조하는 것이 유용합니다. 이 모든 알고리즘에 대한 Wikipedia / DBpedia URI는 없습니다. 그러나 Rosetta 코드 페이지가 있습니다.
웨스 터너

bigocheatsheet.com 은 또한 Big-O 복잡성을 나열하고 몇 가지 알고리즘에 대한 Wikipedia 기사 링크를 제공합니다.
웨스 터너

이 질문은 중요한 소프트웨어에 사용되는 핵심 알고리즘의 예를 묻습니다. "여기에는 백만 개 언어로 구현 된 알고리즘을 갖춘 웹 사이트가 있습니다"라는 질문에는 전혀 답이 없습니다. 실제로, 그것은 질문이 찾고있는 것과 정반대입니다.
David Richerby

그럼에도 불구하고 유용하고 상황에 맞는 참조.
웨스 터너

-5

이 시점에서이 관객들에게 관심있는 주요 / 선호 알고리즘이 모두 언급되었을 수 있습니다. 그러나 완전성에 대한 언급이 더 필요합니다. & 중요한 알고리즘으로 간주되는 것에 대한 분석이 여기에 관련됩니다.

CS 및 IT 분야에서는 AI에서 "목표 포스트 이동" 이라는 현상이 오래 전에 발견 된 것 같습니다 . 이것은 심리적 현상으로 현장이 비교적 빠르게 발전하지만 사람들은 정신적으로 "새로운 표준"에 신속하게 적응하고 달성 후 즉 다운 다운 또는 최소화 된 후의 일상적인 또는 획기적인 발전을 현실적으로 또는 획기적으로 발전시킵니다. 이것은 알고리즘이 R & D에서 "배치"로 이동하는 방식으로이 질문에서 잘 포착됩니다. 이후의 의견에서 질문의 저자를 인용 :

실제로, 작성되는 모든 코드의 무시할만한 부분은 알고리즘 관점에서 흥미로운 것을 구현하는 것입니다.

그러나 이것은 문제가되고 기본적으로 "알고리즘"이라는 단어의 TCS 중심 재정의입니다. 아마도 흥미로운 알고리즘이 발전했을 것입니다. 문제가 고급 알고리즘으로 축소되면 더 이상 "흥미로운"것이 아닙니까? "고급"은 분명히 움직이는 목표입니다. "알고리즘"을 좁게 또는 광범위하게 정의 할 수있는 방법이 있습니다. TCS 정의는 상황에 따라 변하는 것처럼 보이지만 TCS에서도 소위 "알고리즘 렌즈" 와 같은 광범위한 정의로 향하는 경향이 있습니다.

때로는 가장 보편적 인 알고리즘이 가장 간과되는 경우도 있습니다! 인터넷과 WWW는 알고리즘을위한 큰 환경 / 근방 생태학입니다. 약 20 년이 지나서 (1991 년 발명 된) 상대적으로 아직 젊지 만 단기간에 엄청난 양으로 기하 급수적으로 성장했습니다. WWW 사이트의 성장은 아마도 유명한 무 어스 법칙을 능가했을 것입니다.

인터넷 / WWW는 많은 정교한 알고리즘에 의해 지원됩니다. 인터넷에는 라우터에 내장 된 복잡한 라우팅 알고리즘이 있습니다 (시스코와 같은 수십억 달러 규모의 기업에 전력을 공급함). 라우팅 알고리즘과 같은 일부 고급 이론이 적용 가능하다 . 이 알고리즘은 수십 년 전에 새롭게 등장한 첨단 / 최첨단 연구의 주제 였지만 이제는 다소 미세하고 잘 이해되어 다소 보이지 않습니다.

우리는 수십 년 전에 인터넷 세계가 작동하는지 또는 가능한지 (초기 패킷 스위칭 연구, 이전의 회로 스위칭에서 벗어난 당시의 급진적 인 새로운 디자인 패턴에서 볼 수 있는지) 확신 할 수 없었으며, 몇 년 전조차도 어느 시점에서 확장이 실패하고 엄청난 양의 급상승으로 인해 실패하기 시작한다는 두려움이있었습니다.

또한 정교한 오류 감지 / 수정을 사용 합니다. 아마도 인터넷 가장 큰, 가장 결함 허용 시스템은 지금까지 아직도 성장, 인간에 의해 만들어.

다음으로 WWW에 전력을 공급하는 알고리즘을 발전시키는 강력한 사례가 있습니다. HTTP 및 웹 서버는 고도로 조정 / 최적화되었으며 고급 보안 / 암호화 프로토콜 (HTTPS)을 사용합니다. 웹 페이지의 렌더링 논리에 매우 고급되었다 HTML5 & 자바 스크립트 프로그래밍 언어 와 함께 CSS3 .

비교적 새로운 CSS는 재사용 성 및 상속과 같은 OOP 프로그래밍 과 유사한 다양한 원칙을 가지고 있습니다. 조판에 관해 말하면, TeX 는 Knuth가 발명 한 중요하고 내부적으로 복잡한 과학 조판 시스템입니다 (프로그래밍 언어와 다르지 않음). 이제 웹 페이지에서 렌더링 될 수 있습니다 (수십만 개의 과학 논문에서 사용 가능).

집단 지능에 기반을 둔 인터넷에 기반을 둔 비교적 새로운 알고리즘 영역이 여전히 등장하고있다 . stackexchange 소프트웨어 자체는 정교한 집단 지능 시스템의 예입니다. 소셜 네트워킹 은 집단 지능의 핵심 기능을 보여 주며 지능을 높이기 위해 기능이 지속적으로 추가되고 있습니다 (예 : 페이스 북 "좋아요"는 몇 년 전임). 등급 시스템 분야는 협업 필터링 알고리즘을 기반으로하며 새로운 연구 및 응용 프로그램을 기반으로 계속 발전하고 있습니다.

요컨대, 매일의 인간 경험을 변화시키는 모든 혁명적 인 성공은 실제로 "현장 목표"를 넘어서서 훨씬 멀리 있습니다. 질문의 제목으로 모든 핵심 알고리즘이 배포되었습니다 . 이제는 "배관의 일부"라는 IT 표현과 같은 것이 어디에서나 유비 쿼터하고 보이지 않습니다.


여기에는 많은 인용이 추가 될 수 있습니다. 여기에서 시작 하나입니다 : DARPA와 인터넷 혁명 Waldrop에 의해
vzn

인터넷 최적화, 다른 심판 대니 르윈의 전기 , 아카 마이의 공동 창업자 "인터넷 변형 천재"
vzn

-8

놀랍도록 성공적인 (하드웨어) 알고리즘은 전원 켜기 재설정입니다.

전원이 공급 될 때 컴퓨터가 알려진 상태에있는 시스템이 없으면 다른 일이 발생하지 않습니다 .

파워 온 리셋은 내장형이든 다른 방식이든 CPU가있는 모든 것이 작동하는 이유입니다.

다음에 프로그래머와 컴퓨터 과학자를위한 급수 구에있을 때 체리 소다 잔을 파워 온 리셋으로 올리십시오.


5
파워 온 리셋은 알고리즘이 아닙니다. 알고리즘을 설계해야하는 작업, 즉 수행하려는 작업입니다.
David Richerby
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.