답변:
상황에 따라 다릅니다. 이론적 인 컴퓨터 과학에서, 일반적으로 모든 다항식 시간 알고리즘은 '효율적인'것으로 간주됩니다. 예를 들면, 근사 알고리즘의 런타임 은 임의의 적절한 값을 실제로 사용할되지 않더라도, 효율적으로 간주된다 . 에서 실행되는 SAT 알고리즘 은 놀라운 혁신입니다.
고전적인 알고리즘, 즉 80 년대와 그 이전의 알고리즘에서 이하의 런타임 (매트릭스 곱셈, 최소 비용 매칭, 흐름, 선형 프로그래밍)은 효율적인 것으로 간주됩니다. 그들은 여전히 대부분의 사람들에게 효율적이라고 생각합니다. 물론 알고리즘은 예를 들어 정렬과 같이 알고리즘이 알려진 경우 효율적인 것으로 간주되지 않습니다 .
오늘날에는 테라 바이트 단위의 데이터를 처리 할 수있는 서브 리니어 알고리즘 또는 스트리밍 알고리즘에 대한 경향이 있습니다. Google 색인에서 모든 페이지의 페이지 순위를 계산하려면 행렬 곱셈을 사용해보십시오. 작동하지 않습니다.
물론, 유용한 점은 있지만 알고리즘의 점근 적 런타임은 전체 스토리를 알려주지는 않습니다. 점근 적 런타임이 좋은 알고리즘이 있지만 너무 커서 상수를 효과적으로 사용할 수 없습니다. 이제까지. Lipton은 그들을 은하계 알고리즘 이라고 부릅니다 . 로버트 세지윅 (Robert Sedgewick)은 심지어 최악의 경우는 종종 예측에 쓸모없고 종종 보증에는 쓸모가 없다고 말하고 "최악의 사례 분석은 성과를 예측하는 데 쓸모가 없다"고 그의 연설 에서 과학을 컴퓨터 과학으로 되돌려 놓았다 .
배후의 추론은 점근 적 행동 관점에서 다항식 성장률이 초 다항식 성장률보다 사소하게 낮다는 것입니다. 실제로, 입력 크기가 커지면 다항식 시간 알고리즘이 초 다항식 시간 알고리즘보다 훨씬 빠르게 실행됩니다.
물론, 예를 들어 다항식 복잡도를 가진 알고리즘은 "효율적"이지만, 대부분의 알고리즘은 복잡도를 거의 초과하지 않습니다. .
실제적인 고려 사항으로 인해 이는 매우 큰 입력을 처리하는 데 비효율적이며, 따라서 하한을 증명하고 한쪽 하한과 일치하는 순차적 알고리즘을 설계하고 다른 쪽은 병렬 알고리즘을 사용하려고합니다. 일부 문제의 경우 확률 적 보증을 기꺼이 받아들이는 경우 하위 선형 시간 알고리즘을 활용할 수도 있습니다 (매우 빠르지 만 아주 작은 확률로 정답을 제공하지 못할 수 있음).
이론적으로 알고리즘은 최악의 실행 시간이 입력 길이의 다항식에 의해 제한되는 경우 효율적이라고합니다. 다항식이 좋은 클로저 특성을 가지고 있다는 추론. 다항식을 더하고 곱하고 구성하는 것은 다항식을 생성하는 연산이며 서로 문제를 줄이면 좋습니다.
물론 입력 길이가 길어짐에 따라 다항식과 지수의 간격이 매우 커지므로 다항식 시간 알고리즘이 더 좋습니다. 실제로, 다항식 시간 알고리즘은 종료하기까지 시간이 오래 걸릴 수 있지만 그것이 최적의 알고리즘 (최상의 경우) 인 경우에 효과적이라고 말할 수 있습니다.
어떤 문제는 쉽지만 어떤 문제는 어렵다. 알고리즘이 "효율적인지"여부는 문제의 고유 한 복잡성과 비교하여 얼마나 좋은지에 달려 있습니다. O에서 n 자리 숫자를 고려하는 알고리즘을 찾으면) 연산을 수행하고 O (n)에서 n 개의 숫자를 정렬하는 알고리즘을 찾습니다 () 작업을 수행하면 알고리즘이 더 효율적입니다 (인간이 초보자에게 기대하는 것보다 속도가 느린 반면 인류에게 알려진 모든 것을 큰 요인으로 이길 수 있기 때문입니다).