그리디 알고리즘은 일반적으로 사용되는 알고리즘 아이디어로 많은 문제에 널리 사용됩니다. 핵심 아이디어는 장기적인 영향을 고려하지 않고 각 단계에서 결정을 내릴 때 즉각적인 최적의 솔루션만 고려하는 것입니다.
C++에서 그리디 알고리즘의 구현에는 정렬 및 데이터 처리와 같은 기본 작업이 포함되는 경우가 많습니다. 아래에서는 몇 가지 일반적인 문제에 대한 그리디 알고리즘의 아이디어와 C++에서의 구현을 소개합니다.
1. 활동 일정 문제
활동이 주어지면 각 활동에는 시작 시간과 종료 시간이 있으며, 한 사람은 한 번에 하나의 활동에만 참여할 수 있습니다. 이 사람이 최대한 많은 활동에 참여할 수 있도록 활동을 준비하는 방법을 물어보십시오.
그리디 알고리즘의 아이디어는 먼저 각 활동을 종료 시간을 기준으로 오름차순으로 정렬한 다음 첫 번째 활동부터 시작하여 종료 시간이 가장 빠른 활동을 참여할 첫 번째 활동으로 선택하는 것입니다. 그런 다음, 나머지 활동 중 현재 활동과 호환되는 종료 시간이 가장 빠른 활동을 선택하고 참여할 다음 활동으로 만듭니다. 모든 활동이 예약될 때까지 이 과정을 반복합니다.
다음은 C++ 코드 구현입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
2. 허프만 코딩 문제
주어진 가중치 값 집합을 모든 값의 합에 대한 인코딩 길이가 되도록 서로 다른 길이의 이진 문자열로 인코딩해야 합니다. 최소화됩니다.
그리디 알고리즘의 아이디어는 먼저 가중치를 오름차순으로 정렬하고 각 단계에서 가장 작은 가중치를 가진 두 개의 노드를 선택하여 새 노드로 결합한 다음 해당 가중치를 가중치의 합으로 정의하는 것입니다. 두 노드 중. 모든 노드가 루트 노드로 결합될 때까지 이 과정을 반복합니다. 이 루트 노드에 해당하는 이진 트리는 허프만 트리입니다. 허프만 트리를 순회할 때 왼쪽으로 걷는 것은 0을 더하는 것을 의미하고 오른쪽으로 걷는 것은 1을 더하는 것을 의미하므로 각 가중치의 해당 인코딩을 해결할 수 있습니다.
다음은 C++ 코드 구현입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
|
3. 동전 변경 문제를 해결하세요
동전 세트의 액면가와 변경 금액이 주어지면 동전을 만드는 데 필요한 동전 수를 물어보세요. 양.
그리디 알고리즘의 아이디어는 먼저 동전을 액면가 기준 내림차순으로 정렬한 다음 액면가가 가장 큰 동전부터 시작하여 더 이상 선택할 수 없을 때까지 동전을 계속 가져가는 것입니다. 그런 다음 전체 금액이 수집될 때까지 다음으로 큰 액면가를 가진 동전을 사용합니다.
다음은 C++ 코드 구현입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
실제 개발 과정에서 그리디 알고리즘은 최적의 솔루션이 아닌 경우가 많지만 단순성과 효율성으로 인해 널리 사용됩니다. 위의 세 가지 일반적인 문제를 소개함으로써 독자는 탐욕 알고리즘의 아이디어와 C++에서의 구현을 더 잘 이해하고 숙달할 수 있다고 믿습니다.
위 내용은 그리디 알고리즘과 C++에서의 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!