효율적인 알고리즘은 무엇입니까?


10

점근 적 행동의 관점에서 "효율적인"알고리즘은 무엇입니까? 그 시점에서 선을 그리는 표준 / 이유는 무엇입니까? 개인적으로, 나는 과 같은 와 같이 내가 순전히 "sub-polynomial"이라고 부르는 것이 효율적이고 는 "비효율적"입니다. 그러나 나는 모든 다항식 순서가 효율적인 것으로 들었습니다. 추론은 무엇입니까?f(n)=o(n2)n1+ϵΩ(n2)


답변:


11

상황에 따라 다릅니다. 이론적 인 컴퓨터 과학에서, 일반적으로 모든 다항식 시간 알고리즘은 '효율적인'것으로 간주됩니다. 예를 들면, 근사 알고리즘의 런타임 은 임의의 적절한 값을 실제로 사용할되지 않더라도, 효율적으로 간주된다 . 에서 실행되는 SAT 알고리즘 은 놀라운 혁신입니다.n1/ϵ1/ϵϵn2100

고전적인 알고리즘, 즉 80 년대와 그 이전의 알고리즘에서 이하의 런타임 (매트릭스 곱셈, 최소 비용 매칭, 흐름, 선형 프로그래밍)은 효율적인 것으로 간주됩니다. 그들은 여전히 ​​대부분의 사람들에게 효율적이라고 생각합니다. 물론 알고리즘은 예를 들어 정렬과 같이 알고리즘이 알려진 경우 효율적인 것으로 간주되지 않습니다 .n3n2nlogn

오늘날에는 테라 바이트 단위의 데이터를 처리 할 수있는 서브 리니어 알고리즘 또는 스트리밍 알고리즘에 대한 경향이 있습니다. Google 색인에서 모든 페이지의 페이지 순위를 계산하려면 행렬 곱셈을 사용해보십시오. 작동하지 않습니다.

물론, 유용한 점은 있지만 알고리즘의 점근 적 런타임은 전체 스토리를 알려주지는 않습니다. 점근 적 런타임이 좋은 알고리즘이 있지만 너무 커서 상수를 효과적으로 사용할 수 없습니다. 이제까지. Lipton은 그들을 은하계 알고리즘 이라고 부릅니다 . 로버트 세지윅 (Robert Sedgewick)은 심지어 최악의 경우는 종종 예측에 쓸모없고 종종 보증에는 쓸모가 없다고 말하고 "최악의 사례 분석은 성과를 예측하는 데 쓸모가 없다"고 그의 연설 에서 과학을 컴퓨터 과학으로 되돌려 놓았다 .


9
한마디로 : 효율적은 자신에게 맞는 시간 안에 문제를 해결하는 것입니다.
Raphael

이것은 실제로 자신의 대답을 필요로하지는 않지만 다항식 런타임 (응답에 설명 된대로)과 임의성이있는 함수 클래스 인 BPP는 종종 효율적인 것으로 간주됩니다. 다시 말해서, 위의 내용은 옳지 만 컴퓨터는 일반적으로 계산에 임의성에 액세스 할 수 있습니다. 무작위성에 대한 가장 중요한 실제 용도 중 하나는 해싱입니다.
SamM

어쩌면 "효율적"이 실제로 올바른 용어가 아닐까요? 방금 미적분학 서적 중 하나를 검토하고 있었으며 저자는 다항식 런타임을 "다루기 쉬운"및 지수 런타임을 "다루기 힘든"이라고 부릅니다.
Robert S. Barnes

1
@ RobertS.Barnes : 다른 단어, 같은 문제.
Raphael

4

분산 알고리즘의 각도에서 2 센트 : 대규모 네트워크 (P2P, 소셜 네트워크 등)를 볼 때 분산 알고리즘은 실행 시간이 길면 효율적인 것으로 간주됩니다O(logcn) 일정한 c>0 알고리즘의 메시지를 사용하여O(logn)비트. 메시지 크기에 대한 요구 사항은 일반적으로 실행 시간보다 훨씬 중요합니다. 특히 분산 MST와 같이 실행 시간에 더 낮은 하한을 갖는 "글로벌"문제의 경우 더욱 그렇습니다.


3

배후의 추론은 점근 적 행동 관점에서 다항식 성장률이 초 다항식 성장률보다 사소하게 낮다는 것입니다. 실제로, 입력 크기가 커지면 다항식 시간 알고리즘이 초 다항식 시간 알고리즘보다 훨씬 빠르게 실행됩니다.

물론, 예를 들어 다항식 복잡도를 가진 알고리즘은 O(n2000) "효율적"이지만, 대부분의 알고리즘은 복잡도를 거의 초과하지 않습니다. O(n5).

실제적인 고려 사항으로 인해 O(n2)이는 매우 큰 입력을 처리하는 데 비효율적이며, 따라서 하한을 증명하고 한쪽 하한과 일치하는 순차적 알고리즘을 설계하고 다른 쪽은 병렬 알고리즘을 사용하려고합니다. 일부 문제의 경우 확률 적 보증을 기꺼이 받아들이는 경우 하위 선형 시간 알고리즘을 활용할 수도 있습니다 (매우 빠르지 만 아주 작은 확률로 정답을 제공하지 못할 수 있음).


3

이론적으로 알고리즘은 최악의 실행 시간이 입력 길이의 다항식에 의해 제한되는 경우 효율적이라고합니다. 다항식이 좋은 클로저 특성을 가지고 있다는 추론. 다항식을 더하고 곱하고 구성하는 것은 다항식을 생성하는 연산이며 서로 문제를 줄이면 좋습니다.

물론 입력 길이가 길어짐에 따라 다항식과 지수의 간격이 매우 커지므로 다항식 시간 알고리즘이 더 좋습니다. 실제로, 다항식 시간 알고리즘은 종료하기까지 시간이 오래 걸릴 수 있지만 그것이 최적의 알고리즘 (최상의 경우) 인 경우에 효과적이라고 말할 수 있습니다.


어떤 것이 특정 문제에 대해 가장 빠른 알려진 알고리즘이라면 그 관점에서 "효율적인"것으로 간주 될 수 있지만, polytime에서 실행되는 모든 것을 효율적으로 생각하기는 어렵다는 것을 이해할 수 있습니다. :-)
Robert S. Barnes

다항식 런타임의 경우 "효율적인"은 단순한 단어이며 오해의 소지가있는 단어입니다.
Raphael

@Raphael 어쩌면 tractable이 더 나은 단어일까요 ...?
Robert S. Barnes

1
@ RobertS.Barnes :별로 좋지 않습니다. "추적 가능"은 "효율적"만큼 상대적입니다.
Raphael

0

어떤 문제는 쉽지만 어떤 문제는 어렵다. 알고리즘이 "효율적인지"여부는 문제의 고유 한 복잡성과 비교하여 얼마나 좋은지에 달려 있습니다. O에서 n 자리 숫자를 고려하는 알고리즘을 찾으면n3) 연산을 수행하고 O (n)에서 n 개의 숫자를 정렬하는 알고리즘을 찾습니다 (n2) 작업을 수행하면 알고리즘이 더 효율적입니다 (인간이 초보자에게 기대하는 것보다 속도가 느린 반면 인류에게 알려진 모든 것을 큰 요인으로 이길 수 있기 때문입니다).


동의하지 않더라도 재미있는 관점입니다. 어쨌든, 당신은 원하는Θ거기
Raphael
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.