알고리즘의 복잡성을 측정하기 위해 시간 복잡성입니까 아니면 계산 복잡성입니까? 그들 사이의 차이점은 무엇입니까?
나는 알고리즘에서 기본 (가장 비싼) 작업의 최대 (가장 나쁜) 수를 계산하는 데 사용했습니다.
알고리즘의 복잡성을 측정하기 위해 시간 복잡성입니까 아니면 계산 복잡성입니까? 그들 사이의 차이점은 무엇입니까?
나는 알고리즘에서 기본 (가장 비싼) 작업의 최대 (가장 나쁜) 수를 계산하는 데 사용했습니다.
답변:
시간이 우리가 고려해야 할 유일한 자원이 아니기 때문에 계산 복잡성 은 더 일반적인 용어입니다. 다음으로 가장 분명한 것은 알고리즘이 사용하는 공간이므로 계산 복잡성의 일부로 공간 복잡성 에 대해 이야기 할 수 있습니다 . 실제로 우리는 당신이 사용하는 모든 측정에 대해이 작업을 수행 할 수 있습니다. 물론 일부 측정은 다른 측정보다 유용합니다.
따라서 최악의 경우 알고리즘이 수행하는 단계 수를 계산하면 해결하는 문제에 대한 시간 복잡성이 생기고, 사용하는 메모리의 양 / 테이프 셀 수를 계산하면 공간 복잡성이 제한됩니다.
엄격하게하려면 복잡성이 알고리즘이 아닌 문제를 참조하므로 문제에 복잡도 한계가 있고 알고리즘에 리소스 한계 (실행 시간, 공간 사용 ...)가 있다는 점을 기억하십시오. 그것은 정의 형식의 문제 일뿐 복잡성 이론은 문제를 다룬다. 예, 알고리즘 분석 문제와 복잡성과 algorithmics가 서로 긴밀하게 연결되어위한 핵심 도구입니다 만, 공식적으로 우리가에 병합 - 정렬 (알고리즘)을 언급하지 않았다 , 그것은 문제의 S O R T I N g 에 P . 병합 정렬은 특정 리소스를 사용합니다 ( O ( n log n )예를 들어 단계). 알고리즘의 리소스 바운드 및 정확성은 문제에 대한 복잡성 (상위)을 암시하지만 서로 다릅니다. 도 A C 0- 감소 하에서 T C 0-완료 이며, 이러한 복잡성 한계는 실제로 문제에 대해서만 명시 될 수 있습니다 (그러나 알고리즘 적 의미는 있음).
순환 복잡도는 계산 복잡성의 척도로 종종 사용됩니다. /programming/9097987/calculation-of-cyclomatic-complexity에 유용한 예제가 제공됩니다.
사이클로 매틱 복잡도는 높지만 시간 복잡도는 낮지 만 루프를 사용하지 않는 알고리즘을 통해 서로 다른 여러 경로가있을 수 있습니다. 단일 루프를 가진 프로그램은 순환 복잡성이 낮지 만 시간 복잡성이 높을 수 있습니다.
순환 복잡도는 종종 코드에 필요한 유지 보수의 척도로 사용됩니다. 보다 자세한 내용은 http://docs.sonarqube.org/display/SONAR/Bad+Distribution+of+Complexity 에서 제공됩니다 . 이는 코드의 런타임 측정 인 시간 복잡성과 다르며 시스템의 효과에 대한 사용자 인식을 평가하는 데 사용될 수 있습니다.