2010-07-25 4 views
5

다음과 같은 질문 제기 최근에 여기에 게시물이 있었다 :문제 공간이 명확하지 않은 경우 알고리즘의 효율성을 어떻게 평가합니까?

당신은 (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입니다. 이 경우 헝가리 알고리즘을 실행하는 데 엄청나게 오랜 시간이 걸리는 반면, 최대 플로우 알고리즘은 빠른 속도로 눈을 깜빡입니다. 문제가 행렬의 크기 나 주어진 점 (그래서 당신은 확실히 알 수 없다) 선택 될 확률에 관한 정보를 제공하지 않는 점을 감안 당신이 어떻게 결정합니까 : 여기

질문입니다 어떤 알고리즘이 일반적으로 문제의 더 나은 선택인가?

+0

당신이 할 수있는 일은 어떤 확실성을 알기에 충분한 데이터가 없으므로 가능성이 더 높은 것으로 추측하는 것입니다. –

+1

질문은 일반적으로 좋지만, 당신이 언급 한 문제에 대해 무의미한 WRT입니다. 두 알고리즘 모두 나쁘다. 가장 효율적인 해결책은 'O (edges * sqrt (nodes))'에서 hopcroft-karp 알고리즘을 사용하여 최대 2 부분 일치를 찾는 것이다. 그냥 내가 이것을 지적하고 싶다고 생각했는데, 나는 hopcroft-karp가 대답으로 언급되었음을 확신합니다. – IVlad

+0

Hopcroft-Karp는 명시 적으로 언급되지 않았지만 일반적으로 다른 제안보다 낫습니다. 헝가리어 솔루션보다 점수가 떨어지는 경우 속도가 느립니다. http://stackoverflow.com/questions/3302645/optimization-problem-finding-a-maximum/3330338#3330338에 대한 답변을 추가했습니다. 최대 흐름 응답이이 시점에서 가지고있는 리드를 감안할 때 많은 득표를 얻을 것으로 기대하지는 않습니다. –

답변

2

당신은 그럴 수 없습니다.

"일반적으로"볼 수있는 입력을 정의하여 "일반적으로"더 나은 것을 정의 할 수 있습니다. 따라서 예를 들어 입력의 확률 모델을 채찍질하여 V의 예상 값이 n의 함수가되도록하고 해당 모델에서 예상 런타임이 가장 좋은 것을 선택하십시오. 그러나 모델 구성시 임의의 선택이있을 수 있으므로 다른 모델이 다른 답변을 제공합니다. 한 모델은 임의로 좌표를 선택할 수 있고, 다른 모델은 작성하려는 프로그램의 실제 유스 케이스를보고 입력이 발생하는 입력의 분포를 볼 수 있습니다.

어떤 제약 조건을 가진 모든 가능한 입력에 대해 가장 나쁜 최악의 경우에 대해 이야기 할 수 있습니다. 정의하기 쉽고, 성능에 대해 알려주지 않는다는 단점이 있습니다. 귀하의 실제 프로그램. 예를 들어 HeapSort는 최악의 경우 QuickSort보다 빠르지 만 일반적인 경우에는 더 느립니다. 어느 것이 더 빠릅니까? 평균 사례인지 최악 사례인지에 따라 다릅니다. 어떤 경우에 상관하지 않는다면, "더 빠름"을 신경 쓰지 않아도됩니다.

"다음 사람이 볼 확률은 평균 (평균) 평균 다리 수를 가질 확률은 얼마입니까?"라는 질문에 대답하는 것과 유사합니다.

우리는 당신이 만나는 다음 사람이 평균적으로 모드 평균보다 적기 때문에 인간 인구 집단의 분포가 균일하므로 무작위로 선택 될 것이라고 암시 적으로 추정 할 수 있습니다. 대다수의 사람들이 모드에 있습니다).

또는 다른 사람과의 다음 모임이 두 사람 간의 모든 모임 세트에서 일정한 배포로 무작위로 선택되었다고 가정 할 수 있습니다.이 경우 대답은 여전히 ​​"약간 미만"이지만 나는 그렇지 않습니다. 첫번째 - 제로 - 다리가있는 사람들과 정확히 똑같은 가치는 아마도 "그들 자신의 종류"와 모일 것이다. 또는 아마도 그들은 모여서 더 적게 모였습니다. 정말로 모르겠어요. 재향 군인회 (Veterans 'Association) 등을 고려하면 왜 정확히 동일해야하는지 알지 못합니다.

또는 우리는 당신에 대한 지식을 사용할 수도 있습니다. 한쪽 다리가있는 사람과 함께 살면 대답은 "0보다 약간 높을 수 있습니다".

세 가지 대답 중 어느 것이 "정확함"인지는 우리가 이야기하는 것을 금지하고있는 상황에 따라 다릅니다. 그래서 우리는 어느 것이 옳은지 말할 수 없습니다.

1

각 알약이 무엇인지 모르는 경우 빨간 알약 또는 파란색 알약을 복용합니까?

실제로 정보가 충분하지 않아 결정할 정보가 충분하지 않습니다. 어떤 추측이라도 다른 것과 마찬가지로 좋습니다.

경우에 따라 결정을 내리기 위해 추가 정보를 신설하는 것이 가능할 수도 있습니다. 당신의 예제를 자세히 연구하지는 못했지만, 헝가리 알고리즘이 더 높은 메모리 요구량을 가지고있는 것처럼 보입니다.이것은 최대 흐름 알고리즘과 함께 갈 이유가 될 수 있습니다.

1

그렇지 않습니다. 나는 당신이 충분히 명확하게 그 그림을 그린 것 같아요. 적절한 실용적인 해결책은 두 가지 구현을 서로 다른 스레드에서 생성하고 첫 번째로 돌아 오는 응답을 취하는 것입니다. 좀 더 똑똑하다면 경험적으로 요청을 구현에 전달할 수 있습니다.

많은 알고리즘은 기계의 실제 최대 값을 초과하는 엄청난 양의 메모리를 필요로하며,이 경우 알고리즘 적으로 시간이 비효율적이지만 공간 알고리즘에서는 효율적입니다.

우리는 병렬 컴퓨팅을 사용하고 있기 때문에 두 말을 모두 실행시키고 그 결과가 스스로 말할 수 있다고 말합니다.

0

이론적으로는 문제의 크기가 무한대로 증가 할 때 작업 수가 늘어나는 방식을 비교하기 때문에 둘 다 같습니다.

문제가 정의되는 방식에는 2 가지 크기 (n 및 점 수)가 있으므로이 질문에 대한 답변이 없습니다.

1

이것은 유효한 질문이지만 "옳은"대답은 없습니다. 비교할 수 없으므로 "더 나은"개념이 없습니다.

관심이 있다면 실용 상 문제가 될 수있는 입력 유형과 두 알고리즘의 실제 실행 시간 (상수 포함)을 분석해야합니다. 관심이 최악의 경우 분석은 입력 크기는 O (V 3) 알고리즘이 더 좋다면에서, 다음, 종종 규범이고, 이론적 인 경우

: 당신은 알고 V의 ≤ n을 2 그 , 그러나 당신은 V의 관점에서 n을 다항식으로 묶을 수는 없습니다. 물론 이론상으로 가장 좋은 알고리즘은 두 가지가 모두 실행되고 둘 중 하나가 먼저 끝나면 실행 시간이 O (분 (V , n))가 될 하이브리드 알고리즘입니다.

관련 문제