다음과 같은 질문 제기 최근에 여기에 게시물이 있었다 :문제 공간이 명확하지 않은 경우 알고리즘의 효율성을 어떻게 평가합니까?
당신은 (X, Y)의 2 차원 평면을 조정합니다. 임의의 점들이 선택됩니다. 두 점 사이에 X 좌표가없고 두 점 사이에 Y 좌표가 공유되지 않도록 가능한 가장 큰 점 집합을 선택해야합니다.
이것은 제공된 정보입니다. 모두입니다.
가능한 해결책은 두 가지가 있습니다.
하나이 최대 유량 알고리즘을 사용하여 제안되도록 연결 경로 (소스 → X → Y → 싱크)에 각각의 선택된 포인트 맵. 이것은 O (V) 시간에 실행되며, V은 선택된 정점의 수입니다.
헝가리 알고리즘을 사용하여 제안 된 또 다른 (광산) 제안. 선택한 1 (x, y) 좌표를 0으로 설정합니다. 헝가리 알고리즘은이 행렬에 대해 가장 낮은 비용을 줄 것이고, 대답은 선택한 좌표의 수입니다.이 값은 0입니다. O (n) 시간, 여기서 n은 행 수 또는 열 수 중 큰 값입니다.
내 생각에 대부분의 경우 헝가리 알고리즘이 더 빠를 것입니다. , V 선택 반 좌표와 50 × 50 매트릭스 주어진 : V 그 이상있다 어떤 경우에 대한 각각의 행 또는 열을 실질적으로 더 큰 하나 개의 선택된 지점 거기 경우 N 같다 인 1,250 N는 반론 V 2 및 N이다 선택된 두 점 10 9 × 10 9 매트릭스와 같은 경우가 있다는 것이다 50.
인 1,000,000,000입니다. 이 경우 헝가리 알고리즘을 실행하는 데 엄청나게 오랜 시간이 걸리는 반면, 최대 플로우 알고리즘은 빠른 속도로 눈을 깜빡입니다. 문제가 행렬의 크기 나 주어진 점 (그래서 당신은 확실히 알 수 없다) 선택 될 확률에 관한 정보를 제공하지 않는 점을 감안 당신이 어떻게 결정합니까 : 여기
질문입니다 어떤 알고리즘이 일반적으로 문제의 더 나은 선택인가?
당신이 할 수있는 일은 어떤 확실성을 알기에 충분한 데이터가 없으므로 가능성이 더 높은 것으로 추측하는 것입니다. –
질문은 일반적으로 좋지만, 당신이 언급 한 문제에 대해 무의미한 WRT입니다. 두 알고리즘 모두 나쁘다. 가장 효율적인 해결책은 'O (edges * sqrt (nodes))'에서 hopcroft-karp 알고리즘을 사용하여 최대 2 부분 일치를 찾는 것이다. 그냥 내가 이것을 지적하고 싶다고 생각했는데, 나는 hopcroft-karp가 대답으로 언급되었음을 확신합니다. – IVlad
Hopcroft-Karp는 명시 적으로 언급되지 않았지만 일반적으로 다른 제안보다 낫습니다. 헝가리어 솔루션보다 점수가 떨어지는 경우 속도가 느립니다. http://stackoverflow.com/questions/3302645/optimization-problem-finding-a-maximum/3330338#3330338에 대한 답변을 추가했습니다. 최대 흐름 응답이이 시점에서 가지고있는 리드를 감안할 때 많은 득표를 얻을 것으로 기대하지는 않습니다. –