최대공약수 알고리즘 예제

최대 흐름: 네트워크가 소스에서 싱크로 흐를 수 있도록 허용하는 최대 흐름 양으로 정의됩니다. 최대 흐름 문제를 해결하는 데 여러 알고리즘이 있습니다. 이러한 종류의 문제를 해결하기 위한 두 가지 주요 알고리즘은 포드-풀커슨 알고리즘과 Dinic의 알고리즘입니다. 그들은 아래에 설명되어 있습니다. 이들 중 어느 것이든 다른 것들을 크게 변경하지 않고도 변경할 수 있어야 합니다. 예를 들어 검색 알고리즘을 개선하라는 메시지가 표시됩니다. 현재 문제에서 약간 수정된 문제로 전환하는 용이성은 프로그램 설계의 실제 메트릭입니다. 포드 풀커슨 알고리즘의 작업의 데모는 다이어그램의 도움으로 아래에 표시됩니다. 1970년 Y. A. Dinitz는 네트워크를 통해 최대 흐름을 계산하기 위한 더 빠른 알고리즘을 개발했습니다. 여기에는 레벨 그래프 및 잔류 그래프의 구성과 블로킹 흐름과 함께 보강 경로의 발견이 포함됩니다. «회전 합계»와 «현재 제목»이 모두 0인 경우에만 핸드가 벽에서 제거됩니다.

이렇게 하면 알고리즘이 대문자 «G»와 같은 모양의 트랩을 피할 수 있습니다. 알고리즘이 첫 번째 벽에서 좌회전했다고 가정하면 벽에서 360도 전체를 돌립니다. «현재 제목»만 추적하는 알고리즘은 오른쪽 하단의 벽을 왼쪽으로 향하고 왼쪽의 곡선 섹션으로 다시 실행되기 때문에 무한 루프로 연결됩니다. 서약 알고리즘은 해당 지점에서 0이 아닌 «회전합계»로 인해 오른쪽 벽을 떠나지 않습니다(참고 360도는 0도가 아님). 그것은 벽을 끝까지 따라 가고, 마침내 그것을 떠나 서 서 밖으로 왼쪽 과 그냥 문자 모양 아래. 우리가 사용할 그리드는 5 × 5이므로 그리드에 대해 총 24 개의 타일이 필요합니다 (슬라이딩을위한 타일이 누락 된 타일). 위의 12 가지 조합을 제공하므로 지금은 각 타일 중 두 개를 사용합니다. 나중에 우리는 모든 보드가 해결 될 수 있도록하기 위해 일부 미로 생성 알고리즘을 볼 수 있습니다. 여기에 위에서 설명한 미로의 다양한 클래스를 만드는 일반적인 알고리즘의 목록입니다 : 우리의 AI의 목적은 완벽한 미로 해결 알고리즘을 가지고 있지만, 우리의 에이전트가 정상적인 인간의 통과를 나타내는 방식으로 이동하는 것이 아니라 더 많은 것입니다.

우리는 미로의 맥락없이 미로 내부에서 사용할 수있는 미로 해결 방법을 원했습니다. 우리는 요원들이 그들 앞에 있는 것에 직접 반응하고 (너무 많은) 어리석고 겉보기에 무작위로 결정을 내리지 않고 최종 목표를 향해 나아가기를 원했습니다. 대부분의 전통적인 미로 해결 알고리즘을 사용하는 문제는 메모리에 많이 의존한다는 것입니다. 이 것의 좋은 예는 에이전트가 경로를 표시하기 위해 통로아래로 이동하고 최대로 동일한 통로를 두 번 이상 아래로 이동하지 않으려고 할 때 에이전트가 뒤에 선을 그리는 트remaux 알고리즘입니다. 이와 같은 방법이 우리를 위해 사용된다면 정보는 너무 빨리 오래되고 이전에 수행 된 것으로 표시된 것처럼 새로운 경로가 취해지지 않을 것입니다. 미로 해결을 위한 또 다른 표준 알고리즘은 A* 알고리즘입니다. 이것은 두 점 사이의 가장 짧은 거리를 찾는 좋은 우아한 솔루션을 제공합니다. 불행하게도, 우리의 게임, 반드시 시작과 끝 위치 사이에 하나의 전체 경로가되지 않습니다 따라서 우리는이 방법을 사용할 수 없습니다. 일반적으로 미로 (따라서 미로를 만드는 알고리즘) 일곱 가지 분류를 따라 구성 할 수 있습니다. 치수, 초차원, 토폴로지, 테셀레이션, 라우팅, 텍스처 및 포커스입니다. 미로는 어떤 조합으로도 각 병과에서 하나의 아이템을 가져갈 수 있습니다.

다음은 서약 알고리즘에 따라 게임에서 구현하려는 규칙입니다. 본질적으로, 19 세기에 발견 된이 알고리즘은 약 100 년 후에 깊이 우선 검색으로 사용되었습니다. [8] [9] 교차로에서 오는 경로는 방문하지 않거나, 한 번 표시되거나, 두 번 표시됩니다.