알고리즘은 잘 정의 된 계산 문제를 해결하기위한 특정 절차입니다. 을 개발하고 분석하는 알고리즘의 기본이의 모든 측면에 컴퓨터 과학 인공지능,데이터베이스,그래픽,네트워크 운영,시스템,보안 및입니다. 알고리즘 개발은 단순한 프로그래밍 이상입니다., 그것의 이해를 필요에 사용할 수 있는 대안을 해결하기 위한 전산 문제를 포함하여,하드웨어,네트워킹 프로그래밍 언어,그리고 성능의 제약 조건을 수반되는 특정 솔루션입니다. 또한 알고리즘이 손에있는 문제를 완전하고 효율적으로 해결한다는 의미에서”올바른”것이 무엇을 의미하는지 이해해야합니다.

수반되는 개념은 알고리즘을 효율적으로 실행할 수있는 특정 데이터 구조의 설계입니다., 의 중요성 데이터 구조에서 유래한다는 사실의 메인 메모리에는 컴퓨터(데이터가 저장된다),선형으로 구성된 시퀀스의 메모리 셀 순차적으로 번호 0, 1, 2,…. 따라서,간단한 데이터 구조는 선형 배열의 인접 원소가 번 연속된 정수는”인덱스”와 요소의 값에 의해 액세스하는 독특한 색인. 배열을 사용할 수 있습니다,예를 들어,목록을 저장의 이름과 효율적인 방법은 필요한 효율적으로 검색하여 특정에서 이름을 배열입니다., 예를 들어,목록을 정렬으로 알파벳 순서 허용하도록-라는 검색 기술을 사용하는의 나머지 부분에 목록을 검색 각 단계에서는 절반이 됩니다. 이 검색 기술은 특정 이름에 대한 전화 번호부를 검색하는 것과 유사합니다. 책이 알파벳 순서로되어 있음을 알면 원하는 이름이 포함 된 페이지에 가까운 페이지로 빠르게 전환 할 수 있습니다. 데이터 목록을 효율적으로 정렬하고 검색하기위한 많은 알고리즘이 개발되었습니다.,

지만 데이터 항목은 저장된 연속적으로 메모리에서 함께 연결 될 수 있습니다에 의해 포인터는(기본적으로 메모리에 저장된 주소로 항목을 나타내는 다음 항목 구조물에서 발견되는)그래서 데이터를 구성할 수 있는 방법으로 비슷한 사람들에게 그들이 액세스할 수 있습니다. 가장 간단한 구조를 이라고 연결 리스트에서는 noncontiguously 저장된 품목에서 액세스할 수 있습 pre-지정되기 위해 다음 포인터를 하나의 항목에서는 목록에 있습니다., 목록될 수 있으로,원형의 마지막 항목을 가리키는 첫째,또는 각 요소에 있는 포인터에서 양 방향으로 형성하는 이중 연결된 목록입니다. 알고리즘은 항목을 검색,삽입 및 제거하여 이러한 목록을 효율적으로 조작하기 위해 개발되었습니다.

포인터는보다 복잡한 데이터 구조를 구현할 수있는 기능도 제공합니다. 예를 들어 그래프는 항목 쌍을 연결하는 노드(항목)및 링크(가장자리라고도 함)집합입니다., 그래프 등을 나타낼 수 있습니다 설정의 도시와 고속도로 결합,그들의 레이아웃 회로 요소와의 연결선에서 메모리 칩,또는 구성에는 사람의 상호 작용을 통해 소셜 네트워크입니다. 전형적인 그래프 알고리즘은 다음과 같습니다 그래프 순회 전략 방법과 같은 링크를 따라서 노드 노드(아마 검색에 대한 노드를 특정 속성)방법에서는 각 노드가 방문했습니다. 관련 문제는 임의의 그래프에서 주어진 두 노드 사이의 최단 경로를 결정하는 것입니다. (그래프 이론을 참조하십시오., 는)문제가의 실제적인 관심에서 네트워크 알고리즘,예를 들어,를 결정하는 것이 얼마나 많은”broken”링크를 할 수 있는 용납되기 전에 통신이 실패하기 시작합니다. 마찬가지로,매우 큰 규모의 통합(VLSI)칩 설계 알고있는것은 중요하는지 여부를 그래프로 나타내는 회로는 평면,그 수 있는지 여부,그 두 가지 차원에서없이 모든 링크를 건너(선을 터치하).

(전산)의 복잡도 알고리즘은 측정의 금액을 컴퓨팅 리소스(시간과 공간)는 특정 알고리즘을 소모할 때 실행됩니다., 컴퓨터 과학자들이 사용하여 수학적 측정의 복잡성할 수 있는지 예측하기 전에 코드를 작성하는 방법,빠른 알고리즘 실행하고 얼마나 많은 메모리를 필요합니다. 이러한 예측은 실제 응용 프로그램을위한 알고리즘을 구현하고 선택하는 프로그래머에게 중요한 가이드입니다.,

전산 복잡성은 연속체에는 알고리즘을 필요한 선형 시간(즉,필요한 시간 증가 직접 번호와의 항목 또는 노드 목록에서,그래프,또는 네트워크 처리되는 것),하는 반면 다른 사람을 필요로 차거나 심지어 지수를 완료하는 데 시간(즉,필요한 시간이 증가한 항목의 수를 제곱 또는 지수의 번호). 이 연속체의 맨 끝에는 다루기 힘든 문제,즉 솔루션을 효율적으로 구현할 수없는 어두운 바다가 있습니다., 이러한 문제를,컴퓨터 과학자들이 찾아 휴리스틱하는 알고리즘 수 있는 거의 문제를 해결하고 실행에 합당한 양의 시간입니다.

더 멀리 여전히 사람들은 알고리즘 문제가 될 수 있는 명시되지 않은 풀 수 있는 것을 증명을 할 수 있는 프로그램을 작성할 수 있습 문제를 해결합니다. 의 전형적인 예는 해결 못하는 알고리즘 문제입을 중단하는 문제국이 없는 프로그램을 작성할 수 있습을 예측할 수 있는지 여부를 또는 어떤 다른 프로그램을 중지한 후에는 제한된 수의 단계가 있습니다., 정지 문제의 unsolvability 는 소프트웨어 개발에 즉각적인 실질적인 베어링을 가지고 있습니다. 예를 들어,그것은 것 경망을 개발하려고 소프트웨어 도구를 예측하는지 여부를 다른 프로그램 개발되고 있는 무한 루프에서 그것은(하지만 이러한 도구를 갖는 것은 대단히 도움이 될).