백트래킹 알고리즘 예제

역추적은 해결해야 할 문제, 부분 후보의 특성 및 전체 후보로 확장되는 방법을 정의하는 사용자가 지정한 „블랙박스 절차“에 따라 달라집니다. 따라서 다른 많은 메타 휴리스틱과 달리 제한된 시간 내에 유한 한 문제에 대한 모든 해결책을 찾을 수 있지만 특정 알고리즘보다는 메타 휴리스틱입니다. 알고리즘의 주요 아이디어는 이것입니다 : 우리는 빈 프레임으로 시작한 다음 첫 번째 조각을 배치하려고합니다. 캔버스가 비어 있기 때문에 캔버스에 확실히 맞습니다. 우리는 재귀적으로 두 번째 조각 (첫 번째 겹치지 않음)을 배치하려고 시도한 다음 세 번째 조각등을 캔버스에 넣을 수없는 조각을 찾거나 더 이상 배치 할 조각이 없을 때까지 시도합니다. 첫 번째 경우, 우리는 실행의 해당 분기에서 다시 가야 (우리는 역추적해야) 그것은 하나를 배치 할 수없는 경우 나머지 조각을 배치하려고가는 의미가 없기 때문에 (그 조각없이 유효한 솔루션이 없다); 더 이상 배치할 조각이 없는 경우 솔루션을 찾았기 때문에 솔루션 집합에 추가하고 다른 솔루션을 찾을 수 있습니다. 역추적은 계산 문제를 해결하기 위해 가능한 모든 조합을 검색하는 것을 고려하는 일반적인 알고리즘 기법으로 정의할 수 있습니다. 역추적 알고리즘은 이 검색 트리를 루트에서 깊이 우선 순서로 재귀적으로 트래버스합니다. 각 노드 c에서 알고리즘은 c를 유효한 솔루션으로 완료할 수 있는지 여부를 확인합니다. 그렇게 할 수 없는 경우 c에 루팅된 전체 하위 트리가 건너뛰게 됩니다(잘정). 그렇지 않으면 알고리즘(1)은 c 자체가 유효한 솔루션인지 여부를 확인하고, 그렇다면 사용자에게 보고합니다.

(2) c의 모든 하위 트리를 재귀적으로 열거합니다. 두 테스트와 각 노드의 자식은 사용자가 지정한 프로시저에 의해 정의됩니다. 반면에 역추적 알고리즘의 효율성은 루트에 최대한 가까운 후보에 대해 true를 반환하는 거부에 따라 달라집니다. 거부가 항상 false로 반환되는 경우 알고리즘은 여전히 모든 솔루션을 찾지만 무차별 암호 대입 검색과 동일합니다. 역추적의 사용의 고전적인 교과서 예는 여덟 여왕 퍼즐입니다, 그 어떤 여왕이 다른 공격하지 않도록 표준 체스 판에 여덟 체스 여왕의 모든 배열을 요청합니다. 일반적인 역추적 접근 방식에서 부분 후보는 보드의 첫 번째 k 행에 있는 k 퀸의 배열이며 모두 다른 행과 열로 표시됩니다. 상호 공격하는 두 개의 여왕이 포함된 부분 솔루션은 포기할 수 있습니다. 따라서 알고리즘에 의해 트래버스되는 실제 검색 트리는 잠재적 트리의 일부일 뿐입니다. 알고리즘의 총 비용은 실제 트리의 노드 수와 각 노드를 가져오고 처리하는 데 드는 비용입니다.

이 사실은 잠재적인 검색 트리를 선택하고 가지 치기 테스트를 구현할 때 고려해야 합니다.

Dieser Eintrag wurde veröffentlicht in Allgemein. Lesezeichen auf den Permanentlink.