2009-06-03 3 views
3

어떤 알고리즘 실행 시간 모델이 있습니까?알고리즘의 실행 시간을 모델링하는 방법은 무엇입니까?

우리 모두는 mergesort가 bublesort보다 빠르다고 예상하며, mergesort는 bubblesort에 대해 O (n log n)와 O (n)를 비교합니다. 다른 알고리즘 용

경우 등

포인터 디 레퍼런스 어레이 조회, 고정 된 크기의 정수 산술과 같은 다른 작업 (이상이 비교 교환), 카운트 다른 무엇 실행 시간을 모델링하는 방법이 ?

내가 아는 한 가지는 디스크에서 읽고 읽은 블록 수를 계산하는 것입니다. 오랜 설명을 보려면 When does Big-O notation fail?에 대한 제 응답을 참조하십시오.

또 하나는 캐시 누락 횟수를 계산합니다. 이것은 메모리 계층의 모든 레벨을 살펴봄으로써 I/O 모델을 확장합니다.

분산 알고리즘 (보안 다중 계산과 같은)의 경우 세 번째는 네트워크를 통해 전송되는 데이터의 양을 계산하는 것입니다 (일반적으로 통신 라운드 또는 메시지 수에서 측정 됨).

알고리즘의 성능을 예측하기 위해 계산에 포함되는 또 다른 흥미로운 사항은 무엇입니까?

또한 이 모델이 얼마나 좋습니까? 필자가 들었을 때, 캐시 잊어 버림 알고리즘은 디스크의 데이터에 대해 I/O 효율적인 알고리즘과 경쟁 할 수 있지만 메모리 내 알고리즘에는 경쟁력이 없습니다.

특히 : 특정 인스턴스에서 이러한 모델이 상대적 성능을 잘못 예측합니까? 내 자신의 실험에 따르면 피보나치 힙은 데이터가 메모리에 들어가기에 충분할 정도로 작 으면 Dijstra의 최단 경로 (바이너리 힙 대비)가 빨라지지 않는다.

+0

"다른 흥미로운 점은 무엇입니까?"실제 질문이 아닙니까? 아마 제목을 조정할거야? –

+0

재미있는 스레드지만 요점은 아닙니다. – ralphtheninja

+0

O (n2)에 정사각형을 올바르게 포맷하려면 +1, P –

답변

4

계산 모델을 정의하고 각 작업의 비용을 추정 한 다음 해당 비용을 기준으로 알고리즘을 분석해야합니다. 물론 비용은 특정 환경과 알고리즘을 배치 할 기본 시스템의 특성에 따라 결정되므로 질문이 너무 일반적입니다.

알고리즘 과정에서 우리는 각 연산의 비용이 1이라고 가정하므로 루프 횟수를 계산합니다. 주 메모리와 함께 동작하는 알고리즘에서, I/O로부터의 읽기/쓰기를 제외한 각 연산은 0 (읽기/쓰기 1) 등으로 가정합니다.

현실감있는 모델입니까? 그것은 현실에 달려 있습니다 : 당신의 환경과 당신의 기계.

캐시 미스가있는 계산은 코어 듀오에서 정확할 수 있지만 셀 프로세서에서는 잘못되었습니다. 예를 들어 SPE 메모리의 내용을 수동으로 전송해야합니다.

+0

@akappa, 대답은 내 것보다 웅변합니다 :) –

+0

요점까지, 우리는 똑같은 말을합니다;) – akappa

0

O (n ...) 표기법을 사용하여 실행 시간/공간을 모델링하는 기초가 무엇이든간에 정규화 된 환경을 가정하고 있다고 생각합니다. 나는 당신이 지정하는 모델이 무엇이든 상관없이 그것을 결정하기 위해 얼마나 많은 변수를 측정 하든지 관계없이 ... 정규화 된 환경에서만 적용된다고 생각합니다. 따라서 디스크 I/O가 경쟁 ​​조건이 낮 으면 O (n ...)가 이러한 오버 헤드를 고려할 필요가 없을 수도 있습니다.

그래서 O (n)은 정규화 된 환경에서 입력 n에 대한 일반적인 성능을 모델링합니다.

확장자로 디스크 읽기가 O (n)이거나 메모리 할당이 O (n) 순서라고 말할 수 있습니다. 압력을 가하는 외부 이벤트 (예 : 일정)는 일반적인 시간/공간/발생의 모델에서 부분을 재생해서는 안됩니다.

어쩌면 내가 (내가 의심되는) 귀하의 요점을 놓치고 있습니다.

0

내가 작업하고있는 실시간 플랫폼에 대해 최근에는 많은 양의 데이터 (예 : KB 범위가 아닌 MB 범위)를 복사하는 것이 실제로 훈련 된 것보다 빠릅니다. 아마도 이것은 현재 사용중인 대용량 캐시 또는 아마도 빠른 프로세서 속도와 관련이 있습니다. 그러나 그 효과는 단순히 데이터 복사를 피하기 위해 코드를 너무 심하게 왜곡하지 않아야한다는 것입니다.

대신에 내가 실제로 알아야 할 사항은 장치 액세스와 컨텍스트 전환입니다. 그것들이 적을수록 좋습니다.

"제로 버퍼"장치 드라이버가 속도와 동등한 날은 끝났습니다.