2012-02-17 2 views
2

현재 동적 프로그래밍을 이해하려고합니다. 흥미로운 문제를 발견했습니다. "nxn 사각형과 시작 위치 (xs, ys)의 체스 보드를 사용하면 가장 짧은 (이동 횟수와 마찬가지로) 경로를 찾을 수 있습니다. 기사는 끝 위치 (xe, ye)에 "가지고 갈 수있다. 이것은 내 솔루션이 다음과 같이 들리는 방식입니다.이 알고리즘의 big-O 표기법은 무엇입니까?

Initialize the matrix representing the chess board (except the "square" xs,ys) with infinity. 
The first value in a queue is the square xs,ys. 
while(the queue is not empty){ 
     all the squares available from the first square of the queue (respecting the rules of chess) get "refreshed" 
     if (i modified the distance value for a "square") 
        add the recently modified square to the queue 
} 

이 기능의 컴퓨팅 시간 값은 무엇입니까? 나는 (일종의) big-O를 이해하지만이 함수에 대한 가치를 부여 할 수는 없습니다.

+0

어떻게 작동하는지 알 수 없습니다. "첫 번째 사각형에서 사용할 수있는 모든 사각형"은 첫 번째 반복에만 적용됩니다. 두 번째 반복에서 무엇을합니까? 거리를 다시 계산할 대기열에서 임의로 1 제곱을 선택하거나 분기 데이터 구조를 사용하여 별도로 분기하여 각 대기열에서 거리를 측정합니다. – mbeckish

+0

죄송합니다. 자신을 잘 표현하지 못했습니다. 큐의 첫 번째 사각형을 의미합니다 (일반 큐와 마찬가지로) – Patrunjel

+0

현재 값보다 낮은 값으로 "리프레시"하지 않는 것에 대한 논리가 없습니까? – mbeckish

답변

1

대기열을 사용 중이므로 사각형을 처리하는 순서가 최소 거리 순서대로 이루어집니다. 즉, 정사각형의 거리 값을 한 번만 수정하면 n^2 개의 정사각형이 있으므로 시간은 O (n^2)가됩니다.

+0

나는 한 번만 사각형을 수정할 것이라고 생각했다. (처음에는 대기열에 n^2 엔티티가 들어 있는지 정적으로 할당 된 대기열에 넣었는지 확인하는 것이 좋았지 만 시간이 많이 걸렸다.) 그런 다음 종이에 몇 가지 예제를 작성했다. 소규모의 "최적"값이 최적이 아닌 경우가 있기 때문에 일반적인 최적 값을 얻지 못합니다. 따라서 이들을 더할 때 일반 최적 값을 얻을 수 없습니다. – Patrunjel

+0

대기열의 첫 번째 항목이 시작 위치이며 거리는 0입니다. 그런 다음 하나의 거리로 모든 위치를 추가합니다. 당신은 이들 각각을 처리 할 것이고 결국에는 거리 2와 함께 모든 위치를 추가하게 될 것입니다. –

0

Dijkstra의 최단 경로 알고리즘과 다소 유사합니다. 어떤 경우에는 O (N^2)입니다. 가장 낮은 경로를 결정하기 위해 소스에서 대상까지 가능한 모든 경로에 대해 "거리"를 찾습니다.

+0

Dijkstra와 비슷하게 생각할 수 있습니다. 그러나 O (n^2)가 있습니다. 알고리즘의 복잡성 (n^2보다 작을 수는 없지만 ...). – Patrunjel

1

알고리즘 당신은 당신의 "큐"당신이

를 "새로 고침"정의하지

당신은 항상 첫 번째 광장에 붙어있는 내용을 정의하지 제대로

을 모호하게한다 , 당신은 현재 광장을 추적하고 있지 않습니다.

또한 Google Djkistra의 알고리즘 아니요, dijkstra의 알고리즘을 사용하지 마십시오. 가중 그래프가 없습니다.

동적 프로그래밍 알고리즘을 사용하여 무언가를 무작위로 풀고 싶다면 (xe, ye)부터 시작하면 nxn 모눈에서 O (n^2)를 얻을 수 있어야합니다.

하지만 당신은 당신의 제약을 고려한다면 (당신의 조각 기사처럼 이동하고, 그가 그리드를 따라 이동, 그리고 임의의 그래프)는 O에서이 문제를 할 수 있어야 (n)의 시간

+0

목록에 제곱 (x, y 좌표)에 대한 정보가 포함되어 있습니다. 새로 고침은 내가 가지고있는 두 가지 옵션 중에서 최소값을 선택하는 것을 의미합니다. 나는 Dijkstra의 알고리즘에 익숙하지만이 문제는 문제 책의 동적 프로그래밍 장에 있습니다. 솔직히 Dijkstra는 더 간단 할 것입니다. 그러나 문제를 해결하는 작업을 알고리즘으로 바꾸지 않는 것이 좋습니다. 그것은 특정 사고 방식에 뿌리를 내리지 못하게 도와줍니다. – Patrunjel

+0

우선, 동적 프로그래밍이 당신이 무언가를 당신의 대답으로 강제로 옮기는 것을 의미하지는 않습니다. 2^n은 짐승 같은 힘이고, n^2는 온화한 바람이다. 둘째로, D.P. 일반적 최적 솔루션을 얻을 때까지 로컬 최적 솔루션을 계산하고이를 사용하는 것을 의미합니다. 따라서 모든 사각형을 통과해야하므로 문자 그대로 O (n^2)보다 더 효율적인 솔루션 (DP 사용)을 얻을 수 없습니다. 그리고 그래프를 사용하면 그래프를 만들 수 있습니다.이 그래프에서 노드의 인접성은 다른 사각형으로 이동할 수 있다는 것을 의미하며, 사각형으로 이동할 수 있음을 의미합니다. 그리고 처음부터 끝까지 BF로 끝내고 출력 할 수 있습니다. – Patrunjel

+0

당신은이 문제를 당신이 생각하고있는 것처럼 생각할 수 있습니다. 당신의 특정 체스 문제가 아니라 추상적 인 그래프 문제였습니다. 그리고 체스 플레이어로서 현재와 타겟 공간 사이의 유클리드 거리가 일정한 상수보다 크다면 , 너의 최단 경로는 너 뒤에있는 사각형을 포함하지 않는다. –

0

이를 제 생각에는 폭 넓은 첫 번째 검색입니다. 대기열에 최대 한 번 정사각형을 추가하면 대기열 항목의 처리는 O (1)이므로 전체 복잡도는 O (N^2)로 제한됩니다. 그러나 NxN 체스 보드에서 위치 A에서 B로 이동하는 횟수가 N보다 적다는 직설법을 증명할 수 있다면 (직관적으로 N equals 또는 8보다 큰 경우), 알고리즘은 다음과 같이됩니다. 에).

+0

당신이 말한 것을 증명하는 것이 내 O()를 n으로 낮추는 방법을 자세히 묘사 해 주실 수 있습니까? – Patrunjel

+0

글쎄, 나는 틀렸어. 비록 그러한 정리가 증명 될지라도, 초기 알고리즘은 최악의 복잡도 O (N^2)를 갖는다. 목표 위치가 대기열에 추가 된 마지막 위치 인 상황이있을 수 있으므로 결국 테이블의 모든 사각형을 체크인합니다. – Bogdan

+0

내가 생각할 수있는 가장 좋은 점은 거리가 멀어 질 때까지 목표 위치까지 가장 가까운 거리 (맨하탄 거리 사용)를 선택하는 탐욕스러운 발견 적 발견 방법입니다. 그런 다음 지역 검색을 실행하여 목표 위치. 이것은 최단 경로를 보장하지 않지만 O (N) 시간 및 길이가됩니다. – Bogdan