알고리즘의 예상 실행 시간과 평균 실행 시간은 무엇을 의미합니까?


17

알고리즘의 실행 시간을 분석하고 싶다고 가정 해 봅시다. 때때로 우리는 입력 크기가 n 일 때 알고리즘의 실행 시간을 찾고 싶다고 말하고 최악의 경우 O (n)으로 표시합니다. 때로는 알고리즘 / 알고리즘 의 예상 시간 을 찾아야한다고 말하는 서적 / 논문을 볼 수 있습니다. 또한 때때로 평균 작동 시간 이 사용됩니다.

"예상 시간"이란 무엇입니까? 최악의 경우 대신 예상되는 시간 을 찾는 것이 어떤 경우에 유용 합니까?

편집 : 예상 실행 시간평균 실행 시간 사이에 미묘한 차이가 있다고 생각 하지만 확실하지 않습니다. 이 게시물을 통해 나는 정확한 차이를 알고 싶습니다.


1
아마 그들은 평균 사례를 의미합니다 ..
Martijn Pieters

4
확률 분포 함수 의 예상 값 은 음에서 양의 무한대까지의 x * f (x)의 적분으로 설명됩니다. 예상 시간은 가능한 모든 시간의 확률 분포를 결정한 다음 예상 값을 취하여 도출됩니다. 이 동작은 더 일반적으로 알려져 평균을 계산 하거나 , 평균을 산출 .
Joel Cornett

1
@JoelCornett : 만약 당신이 그것을 게시하면 좋은 답변을 만들 것입니다 ..
Martijn Pieters

@MartijnPieters : 아니요, 평균 사례는 입력 확률 분포에 대해 가정하지만 예상 사례는 그렇지 않습니다.
Jörg W Mittag

@ JörgWMittag : 맞습니다. 입력의 실제 확률 분포를 알고 있다면 평균 사례를 무시할 수 있습니다. 다시 말해 예상되는 경우는 알고리즘이 예상 입력 세트의 확률 분포를 제공하는 데 걸리는 시간입니다.
Martijn Pieters

답변:


15

예상 시간은 의도 된 입력을 사용한 알고리즘 의 평균, 예상 실행 시간입니다 .

당신을 위해 가장 적합한 알고리즘을 사용 할 수 있습니다, 당신은 몇 몇 백만 사용자 레코드를 가지고 그들을 정렬 할 한 말 귀하의 입력과 같은 최고의 준다 예상 보다이 알고리즘에 반대, 실행 시간을 최악의 경우 실행 시간이지만 예상 된 실행 시간이 더 나쁩니다 .

때로는 예를 들어 알고리즘의 시간 복잡도에 대한 상수 요인은 너무 높은 그것은 당신이 더주기 때문에 의미가 악화 시간 복잡하지만 작은 상수 요소로 알고리즘을 사용할 수있게한다는 것이다 예상 비록 그것이 것, 작은 입력 시간을 실행 더 큰 입력으로 인해 성능이 크게 향상됩니다.

아마도 더 좋은 예는 입력에 관계없이 최악의 실행 시간은 O (n²)이지만 예상 평균 실행 시간은 O (n log n) 인 클래식 퀵 정렬 알고리즘 일 것입니다 . 이는 알고리즘이 무작위 화를 사용 하거나 구현에 따라를 사용할 수 있기 때문 입니다. 이것은 소위 무작위 알고리즘 입니다. 동일한 입력으로도 모든 호출에서 약간 다르게 실행됩니다.. 따라서 최악의 경우 입력은 알고리즘이 주어진 입력을 나누기 위해 피벗을 선택하는 방법에 따라 달라지기 때문에 구현에 보편적 인 최악의 입력은 없습니다. 따라서 최악의 실행 시간을 유발하는 사전 정의 된 입력 만 제공 할 수는 없습니다. 입력에 관계없이 더 나은 예상 평균 실행 시간을 목표로하는 무작위 알고리즘의 경우가 종종 있습니다.

입력에 적합한 알고리즘을 사용하는 것이 전부입니다.


훌륭한 답변입니다. 감사 . 예상과 평균의 차이점은 입력의 분포를 알고 알고리즘을 실행할 때이를 "평균"이라고하고 난수 생성기를 사용하여 입력을 퍼 미트 할 때이를 예상 실행 시간이라고합니다. 이 전제에 동의하십니까?
Geek

4

무작위 알고리즘의 예상 실행 시간은 최악의 실행 시간과 마찬가지로 잘 정의 된 개념입니다. 알고리즘이 무작위이면 실행 시간도 임의이므로 실행 시간의 예상 값을 정의 할 수 있습니다.

잘 알려진 예는 Quicksort입니다. 피벗을 임의로 선택하면 최악의 경우 실행 시간이 O (n ^ 2)로 유지되지만 예상 실행 시간이 O (n log n)이된다는 것을 알 수 있습니다. 무작위 배정이 매우 강력한 예는 가장 작은 엔 클로징 서클 문제입니다. 최악의 경우 실행 시간이 O (n ^ 3) 인 간단한 알고리즘이 있지만 실행 시간은 O (n)에 불과합니다.

평균 실행 시간은 일반적으로 '대부분의 입력에 대한'알고리즘의 동작에 대해 이야기 할 때 사용됩니다. 예를 들어 무작위로 입력을 생성하는 방법을 정의합니다. 예를 들어 배열을 임의의 숫자로 채우거나 1에서 n까지의 숫자를 무작위로 꿰매거나 (중복이 없음) 동전을 뒤집어 내림차순 또는 오름차순 집합을 얻습니다. 번호. 입력의 임의 분포에 대한 알고리즘의 평균 실행 시간은 알고리즘의 예상 실행 시간입니다 (이 경우 알고리즘은 무작위 화 될 수 없지만 입력은 입력됩니다).

예를 들어, 입력 라인을 배포하는 매우 이상한 방법을 발견 할 때까지 알고리즘이 존재하는 기하학적 문제가 첫눈에 잘 작동하는 것처럼 보입니다. 선이 무작위로 분포되어 있다고 가정하면 이러한 이상한 시나리오가 발생할 가능성이 거의 없으므로 알고리즘이 좋아질 수 있습니다.

대조적으로, 예상 실행 시간은 '불운이 없다면'알고리즘이 어떻게 수행되는지에 관한 것입니다. 동일한 입력에서 동일한 알고리즘을 재 시도하지만 다른 임의의 선택을 사용하면 알고리즘이 훨씬 빠르게 해결 될 수 있습니다. 평균 실행 시간은 알고리즘이 '대부분의 입력에서'얼마나 잘 수행되는지에 대해 설명합니다. 동일한 입력에서 동일한 알고리즘을 다시 시도해도 도움이되지 않습니다 (알고리즘이 무작위 인 경우 제외).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.