집 >
기사 > 백엔드 개발 > 상위 10가지 프로그래밍 알고리즘은 프로그래머가 마스터가 되는 길을 안내합니다.
상위 10가지 프로그래밍 알고리즘은 프로그래머가 마스터가 되는 길을 안내합니다.
WBOY원래의
2016-08-08 09:27:43994검색
알고리즘 1: 퀵 정렬 알고리즘 퀵 정렬은 Tony Hall이 개발한 정렬 알고리즘입니다. 평균적으로 n개 항목을 정렬하려면 O(n log n) 비교가 필요합니다. 최악의 경우에는 O(n2) 비교가 필요하지만 이런 상황은 흔하지 않습니다. 실제로 퀵 정렬은 내부 루프가 대부분의 아키텍처에서 효율적으로 구현될 수 있기 때문에 다른 Ο(n log n) 알고리즘보다 훨씬 빠른 경우가 많습니다. 퀵 정렬은 분할 정복 전략을 사용하여 시퀀스(리스트)를 두 개의 하위 시리즈(하위 목록)로 나눕니다. 알고리즘 단계: 1 시퀀스에서 "피벗"이라는 요소를 선택합니다. 2 모든 요소가 피벗 값보다 작도록 시퀀스를 재정렬합니다. 베이스 앞에 위치하며, 베이스 값보다 큰 모든 요소는 베이스 뒤에 배치됩니다(양쪽에 같은 숫자가 들어갈 수 있음). 이 파티션이 종료된 후 베이스는 시퀀스의 중간에 있습니다. 이를 파티션 작업이라고 합니다. 3 기준 값보다 작은 요소의 하위 배열과 기준 값보다 큰 요소의 하위 배열을 재귀적으로 정렬합니다. 재귀의 가장 낮은 경우는 배열의 크기가 0 또는 1인 경우, 즉 항상 정렬된 경우입니다. 계속 반복되지만 이 알고리즘은 항상 종료됩니다. 왜냐하면 각 반복에서 최소한 하나의 요소를 최종 위치로 이동하기 때문입니다. 알고리즘 2: 힙 정렬 알고리즘 힙 정렬은 힙의 데이터 구조를 이용하여 설계된 방법을 말합니다. . 스태킹은 완전한 이진 트리에 근접하는 구조이면서 동시에 스태킹의 속성을 만족합니다. 즉, 자식 노드의 키 값이나 인덱스가 항상 부모 노드보다 작거나 큽니다. 힙 정렬의 평균 시간 복잡도는 Ο(nlogn)입니다. 알고리즘 단계: 힙 H[0..n-1] 생성힙의 헤드(최대값)와 테일을 교환3. 힙 크기를 1만큼 줄이고 Shift_down(0)을 호출하여 새 배열의 상위 데이터를 해당 위치로 조정합니다4. 힙 크기가 1이 될 때까지 2단계를 반복합니다. 🎜> 알고리즘 3: 병합 정렬병합 정렬(Merge Sort, 대만어 번역: 병합 정렬)은 병합 연산을 기반으로 하는 효과적인 정렬 알고리즘입니다. 이 알고리즘은 분할 정복 방법을 사용하는 매우 일반적인 응용 프로그램입니다. 알고리즘 단계: 1. 크기가 정렬된 두 시퀀스의 합이 되도록 공간을 적용합니다. 이 공간은 병합된 시퀀스를 저장하는 데 사용됩니다. 2. 두 개의 포인터를 정의합니다. 초기 위치는 정렬된 두 시퀀스의 시작 위치입니다 3. 두 포인터가 가리키는 요소를 비교하고 상대적으로 작은 요소를 선택하여 병합 공간에 넣은 후 이동합니다. 다음 위치에 대한 포인터 4. 포인터가 시퀀스의 끝에 도달할 때까지 3단계를 반복합니다. 5. 다른 시퀀스의 나머지 모든 요소를 병합된 시퀀스의 끝에 직접 복사합니다. > 알고리즘 4: 이진 검색 알고리즘 이진 검색 알고리즘은 정렬된 배열에서 특정 요소를 찾는 검색 알고리즘입니다. 검색 프로세스는 배열의 중간 요소에서 시작됩니다. 중간 요소가 검색할 요소인 경우 특정 요소가 중간 요소보다 크거나 작은 경우 검색 프로세스가 종료됩니다. 중간 요소보다 크거나 작은 배열을 선택하고 처음과 마찬가지로 중간 요소부터 비교를 시작합니다. 특정 단계에서 배열이 비어 있으면 찾을 수 없다는 의미입니다. 이 검색 알고리즘은 비교할 때마다 검색 범위를 절반으로 줄입니다. Half Search는 매번 검색 영역을 절반으로 줄여주며, 시간 복잡도는 Ο(logn)입니다. 알고리즘 5: BFPRT(선형 검색 알고리즘)BFPRT 알고리즘으로 해결한 문제는 매우 고전적입니다. 즉, k번째로 큰(k번째로 작은) 요소를 선택하는 것입니다. , 영리한 분석을 통해 BFPRT는 최악의 경우에도 시간 복잡도가 여전히 선형임을 보장할 수 있습니다. 물론 이 알고리즘의 아이디어는 퀵 정렬과 유사합니다. 물론 최악의 경우에도 알고리즘이 o(n)의 시간 복잡도를 달성하도록 하기 위해 5명의 알고리즘 작성자가 정교한 처리를 수행했습니다. 알고리즘 단계: 1. n 요소를 5개의 그룹으로 나누고 n/5(상한) 그룹으로 나눕니다. 2. 각 그룹의 중앙값을 취하고 삽입 정렬과 같은 정렬 방법을 사용합니다. 3. 선택 알고리즘을 재귀적으로 호출하여 이전 단계의 모든 중앙값 중 중앙값을 구하고 이를 x로 설정하고, 중앙값이 짝수인 경우에는 에서 더 작은 것을 선택하도록 설정합니다. 중간. 4. x를 사용하여 배열을 나누고, x보다 작거나 같은 숫자를 k, x보다 큰 숫자를 n-k로 둡니다. 5. i==k이면 x를 반환하고, i종료 조건: n=1일 때 작은 요소 i가 반환됩니다. 알고리즘 6: DFS(깊이 우선 검색) 깊이 우선 검색은 검색 알고리즘의 일종입니다. 나무의 깊이를 따라 나무의 노드를 횡단하여 가능한 한 깊은 나무의 가지를 검색합니다. 노드 v의 모든 가장자리를 탐색한 후에는 노드 v가 발견된 가장자리의 시작 노드로 검색이 역추적됩니다. 이 프로세스는 소스 노드에서 연결할 수 있는 모든 노드가 검색될 때까지 계속됩니다. 아직 발견되지 않은 노드가 있으면 그 중 하나를 소스 노드로 선택하고 모든 노드를 방문할 때까지 위 과정을 반복합니다. DFS는 블라인드 검색입니다. 깊이 우선 탐색은 그래프 이론의 고전적인 알고리즘입니다. 깊이 우선 탐색 알고리즘은 대상 그래프의 해당 위상 정렬 테이블을 생성하는 데 사용할 수 있습니다. 위상 정렬 테이블을 사용하면 여러 문제를 쉽게 해결할 수 있습니다. 최대 경로 질문 등 관련 그래프 이론 문제. 힙 데이터 구조는 일반적으로 DFS 알고리즘 구현을 지원하는 데 사용됩니다. 깊이 우선 순회 그래프 알고리즘 단계: 1. v의 방문하지 않은 인접 지점부터 시작하여 그래프에서 깊이 우선 수행; v에 연결된 경로가 있는 그래프의 모든 정점을 방문할 때까지 3. 아직 방문하지 않은 정점이 그래프에 있으면 방문하지 않은 정점부터 시작하여 깊이를 수행합니다. 우선 순위를 다시 그래프의 모든 정점을 방문할 때까지 탐색합니다. 위 설명은 상대적으로 추상적일 수 있습니다. 예: DFS는 그래프의 특정 시작 정점 v를 방문한 후 v에서 시작하고 인접한 정점 w1을 방문합니다. w1부터 시작하여 w1에 인접하지만 아직 방문하지 않은 정점 w2를 방문합니다. 그런 다음 w2에서 시작하여 유사한 방문을 수행하고... 모든 인접한 정점을 방문한 정점 u에 도달할 때까지 이 방식을 계속합니다. 그럼 지난번에 방문했던 꼭지점으로 한발 물러서서 아직 방문하지 않은 다른 인접 꼭지점이 있는지 살펴보세요. 있는 경우 이 정점을 방문하고, 이 정점에서 진행하여 위와 유사한 방문을 수행하고, 그렇지 않은 경우 한 단계 뒤로 돌아가서 검색합니다. 연결된 그래프의 모든 정점을 방문할 때까지 위 과정을 반복합니다. 알고리즘 7: BFS(Breadth-First Search) Breadth-First-Search는 그래프 검색 알고리즘입니다. 간단히 말해서 BFS는 루트 노드에서 시작하여 트리(그래프)의 너비를 따라 트리(그래프)의 노드를 순회합니다. 모든 노드를 방문하면 알고리즘이 중단됩니다. BFS도 블라인드 검색입니다. 큐 데이터 구조는 일반적으로 BFS 알고리즘 구현을 지원하는 데 사용됩니다. 알고리즘 단계: 1. 먼저 루트 노드를 대기열에 넣습니다. 2. 대기열에서 첫 번째 노드를 가져와 대상인지 확인합니다. 대상을 찾으면 검색을 종료하고 결과를 반환합니다. 그렇지 않으면 테스트되지 않은 모든 직계 하위 항목을 대기열에 추가합니다. 3. 큐가 비어 있으면 사진 전체를 확인했다는 뜻입니다. 즉, 사진에서 검색할 대상이 없다는 뜻입니다. 검색을 종료하고 "대상을 찾을 수 없음"을 반환합니다. 4. 2단계를 반복합니다. 알고리즘 8: Dijkstra의 알고리즘 Dijkstra의 알고리즘은 네덜란드 컴퓨터 과학자 Etzh가 개발했습니다. L. Dykstra가 제안했습니다. Dijkstra의 알고리즘은 음수가 아닌 가중치 방향 그래프의 단일 소스 최단 경로 문제를 해결하기 위해 너비 우선 검색을 사용합니다. 이 알고리즘은 최종적으로 최단 경로 트리를 얻습니다. 이 알고리즘은 라우팅 알고리즘이나 다른 그래프 알고리즘의 하위 모듈로 자주 사용됩니다. 이 알고리즘의 입력에는 가중 방향 그래프 G와 G의 소스 정점 S가 포함됩니다. G의 모든 정점 집합을 표현하기 위해 V를 사용합니다. 그래프의 모든 간선은 두 꼭짓점으로 구성된 순서화된 요소 쌍입니다. (u, v)는 정점 u에서 v로 연결되는 경로가 있음을 의미합니다. E를 사용하여 G의 모든 모서리 집합을 나타내고 모서리의 가중치는 가중치 함수 w: E → [0, ]로 정의됩니다. 따라서 w(u, v)는 정점 u에서 정점 v까지의 음수가 아닌 가중치입니다. 가장자리의 가중치는 두 정점 사이의 거리로 생각할 수 있습니다. 두 점 사이의 경로 가중치는 경로에 있는 모든 가장자리의 가중치의 합입니다. V에는 정점 s와 t가 있는 것으로 알려져 있으며, Dijkstra의 알고리즘은 s에서 t까지 가장 낮은 가중치 경로(예: 최단 경로)를 찾을 수 있습니다. 이 알고리즘은 정점 s에서 그래프의 다른 정점까지의 최단 경로를 찾을 수도 있습니다. 음수 가중치가 없는 유향 그래프의 경우 Dijkstra의 알고리즘은 현재 가장 빠른 것으로 알려진 단일 소스 최단 경로 알고리즘입니다. 알고리즘 단계: 1. 초기 명령 S={V0},T={나머지 정점}, T의 정점에 해당하는 거리 값, d(V0,Vi)는 호의 가중치입니다가 없으면 d(V0,Vi)는 입니다. 2. T에서 거리 값이 가장 작고 S에 없는 정점 W를 선택하고 S를 추가합니다3. T에 있는 나머지 정점의 거리 값을 수정합니다. W가 중간 정점으로 추가되면 V0에서 Vi까지의 거리 값이 짧아지고 이 거리 값을 수정합니다S가 모든 정점을 포함할 때까지, 즉 W=Vi가 될 때까지 위의 2단계와 3단계를 반복합니다알고리즘 9: 동적 프로그래밍 알고리즘동적 프로그래밍은 수학, 컴퓨터 과학, 경제학에서 원래 문제를 비교적 간단한 하위 문제로 분해하여 복잡한 문제를 해결하는 데 사용되는 방법입니다. 동적 프로그래밍은 중첩되는 하위 문제 및 최적의 하위 구조 속성이 있는 문제에 적합한 경우가 많습니다. 동적 프로그래밍 방법은 순진한 솔루션보다 시간이 훨씬 적게 걸리는 경우가 많습니다. 동적 프로그래밍의 기본 아이디어는 매우 간단합니다. 대략적으로 말하자면, 주어진 문제를 해결하려면 문제의 여러 부분(즉, 하위 문제)을 해결한 다음 하위 문제에 대한 솔루션을 결합하여 원래 문제에 대한 솔루션에 도달해야 합니다. 종종 많은 하위 문제가 매우 유사하므로 동적 프로그래밍은 각 하위 문제를 한 번만 해결하려고 시도하여 계산량을 줄입니다. 일단 주어진 하위 문제에 대한 솔루션이 계산되면 다음에 동일한 하위 문제가 필요할 경우를 대비해 기억되고 저장됩니다. 문제를 풀 때는 표를 직접 찾아보세요. 이 접근 방식은 반복되는 하위 문제의 수가 입력 크기에 따라 기하급수적으로 증가할 때 특히 유용합니다. 동적 프로그래밍의 가장 고전적인 문제는 의심할 바 없이 배낭 문제입니다. 알고리즘 단계: 1. 최적의 하위 구조 속성. 문제의 최적 솔루션이 최적인 하위 문제에 대한 솔루션을 포함하는 경우 문제가 최적의 하위 구조 속성을 갖는다고 말합니다(즉, 최적화 원칙을 충족함). 최적의 하부 구조 속성은 동적 프로그래밍 알고리즘이 문제를 해결하는 데 중요한 단서를 제공합니다. 2. 하위 문제의 성격이 중복됩니다. 하위 문제의 중첩 특성은 재귀 알고리즘을 사용하여 위에서 아래로 문제를 해결할 때 매번 생성되는 하위 문제가 항상 새로운 문제가 아니며 일부 하위 문제가 여러 번 반복적으로 계산된다는 것을 의미합니다. 동적 프로그래밍 알고리즘은 이 하위 문제의 중첩 특성을 활용합니다. 각 하위 문제를 한 번만 계산한 다음 계산된 하위 문제를 다시 계산해야 할 경우 계산 결과를 테이블에 저장합니다. 테이블에서 간단하게 결과를 검토하고 효율성을 높이세요. 알고리즘 10: Naive Bayes 분류 알고리즘 Naive Bayes 분류 알고리즘은 Bayes 정리를 기반으로 하는 간단한 확률 분류 알고리즘입니다. 베이지안 분류의 기본은 확률론적 추론입니다. 이는 다양한 조건의 존재가 불확실하고 발생 확률만 알 수 있는 경우 추론 및 의사결정 작업을 완료하는 방법입니다. 확률론적 추론은 결정론적 추론에 대응됩니다. Naive Bayes 분류기는 독립성 가정을 기반으로 합니다. 즉, 표본의 각 특성이 다른 특성과 관련이 없다고 가정합니다. Naive Bayes 분류기는 정확한 자연 확률 모델을 사용하며 지도 학습 샘플 세트에서 매우 좋은 분류 결과를 얻을 수 있습니다. 많은 실제 응용 프로그램에서 Naive Bayes 모델 매개변수 추정은 최대 우도 추정 방법을 사용합니다. 즉, Naive Bayes 모델은 베이지안 확률이나 베이지안 모델을 사용하지 않고도 작동할 수 있습니다. 웹사이트 블로그를 팔로우해주셔서 감사합니다!
위 내용은 프로그래머가 마스터가 되는 데 도움이 되는 상위 10가지 프로그래밍 알고리즘을 컨텐츠 측면을 포함하여 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.