“증상 적으로 더 효율적”이라고 말하는 것은 무엇을 의미합니까?


12

알고리즘 가 보다 점진적으로 더 효율적 이라고 말할 때 무엇을 의미 합니까?XY

  • X모든 입력에 가 더 나은 선택입니다.
  • X작은 입력을 제외한 모든 입력에 가 더 나은 선택입니다.
  • X큰 입력을 제외한 모든 입력에 가 더 나은 선택입니다.
  • Y 는 작은 입력에 더 나은 선택이 될 것입니다.

이 질문에 대한 링크는 여기에 있습니다.

http://quiz.geeksforgeeks.org/algorithms-analysis-of-algorithms-question-16/


나는 모든 입력에 대해 동작이 더 효율적인 알고리즘이 작동해야한다고 생각했지만 "작은 입력을 제외한 모든 입력에 대해 작동"이라는 이유를 얻지 못했습니다.


큰 입력은 알고리즘에서 병목을 노출시킵니다. 엔지니어링 용어로 넣을 것입니다.
Apiwat Chantawibul

답변:


14

우선, 두 알고리즘 모두 모든 입력에 대해 "작동"합니다. 문제는 성능에 관한 것입니다.

그 질문에 대한 답은 엉터리입니다. 하나의 알고리즘이 다른 알고리즘보다 점진적으로 더 효율적이라고 말하는 한 가지 방법은 입력 크기가 클수록 더 효율적인 알고리즘이 일반적으로 추상 계산에 의해 더 적은 "계산 단계"를 취할 수 있도록 (문제 별) 입력 크기가있는 경우입니다. 비교 횟수.

대답의 아이디어는 점진적으로 더 효율적인 알고리즘 입력 크기보다 더 많은 단계를 여전히 요구할 있다는 것입니다. 점근 적으로보다 효율적인 알고리즘은 모든 입력에 대한 적은 단계를 필요로하는 경우가 있지만, 일반적으로하지 않습니다이 경우 연습에있을 필요가 없습니다. 은 "올바른"대답을 더 잘 표현 될 것입니다 그래서 " 제외한 모든 입력을위한 더 나은 선택이 될 것입니다 가능성이 작은 입력".X

그래도 문구는 그렇게 크지 않습니다. 우선, 어떤 알고리즘이 "더 나은 선택"인지 결정하는 데 더 많은 요소가 있지만,이 경우 의도가 충분히 명확하다는 것을 알려 드리겠습니다. 실제 문제는 "작은"및 "큰"입니다. 내가 가장 좋아하는 논문 중 하나는 모든 잘 정의 된 문제에 대한 가장 빠르고 가장 짧은 알고리즘입니다 . 이 논문은 소정의 알고리즘을 설명 어떤 기능의 사양 및 그것의 해당 함수를 계산할 것이다 다항식 시간 내에 계산 될 수 있음을 증명 최적 의 요소 내에 시간 복잡도를 플러스 첨가제 용어. 예를 들어, 함수 사양으로 거품 정렬 구현을 제공하고 라는 간단한 증거를 제공 한 경우5O(n2), 그것은 정렬 알고리즘을 생성합니다 . 사실이었다 알고리즘 생성 할 여기서, 의 상수 인자였다 점근 * 최적 알고리즘. 이것은 놀랍습니다. 한 가지 문제가 있습니다. 상수 – 숨겨져O(nlgn)5cnlgn+o(nlgn)co(nlgn)이 예에서 – 거의 모든 실제 문제에 대해 알고리즘을 거의 완전히 실행할 수 없게 만듭니다. "완전히 불가능하다"는 것은 무엇을 의미합니까? 나는 그 알고리즘이 완성되기 전에 우주의 열 사망이 여러 번 일어날 것이라는 것을 의미합니다. 그럼에도 불구하고 적절하게 "큰"입력의 경우 버블 정렬보다 빠릅니다. 내 요점은 계산하는 것은 물론 "적절하게 큰"입력으로 어떤 방법으로도 실제로 적을 수 없다는 것입니다.

어쨌든, 정답은 어떻게 말해야합니까 : " 는 충분히 큰 입력에서 보다 적은 단계를 요구합니다 ". 적용 할 수있는 "단계"라는 개념이 여러 개 있기 때문에 여전히 모호합니다. 알고리즘은 하나의 메트릭으로 더 효율적이고 다른 메트릭으로는 덜 효율적일 수 있습니다. 이 표현은 "더 나은 선택"의 가치 판단을 피합니다. 캐시 효율이나 구현의 단순성과 같은 일정한 요소 / 조건이 지정 될 때 무조건 덜 효율적인 알고리즘 또는 덜 효율적인 알고리즘을 선택해야하는 많은 이유가 있습니다.XY

* 여기에는 미묘한 부분이 있습니다. 점진적으로 최적 인 알고리즘은 점진적으로 비 최적화 된 알고리즘보다 더 나쁜 상수 계수 가질 수 있습니다 . 나는 그것이 무의식적으로 최적의 알고리즘에 대해 의 최고의 가치를 가질 것이라고 생각 하지만, 점근 효율의 약간의 이득을 짜기 위해 엄청난 복잡성이 추가되어 상수 요소를 크게 증가시키는 것으로 생각할 수 있습니다.cc


2

사람들이 보통 이런 말을 할 때의 의미는 다음과 같습니다.

경우 및 두 실행 시간 선정 된 알고리즘의 함수이다 및 모델에서 X는 각각 다음 .TATBABTAo(TB)

여기에는 많은 경고 사항이 적용됩니다. 를 지정해야하며 "실행 시간 비용"의 의미를 정확히 정의해야합니다. 시간 은 거의 조사 대상이 아닙니다. 다른 많은 비용 측정이 있습니다. 그것은이다 불분명 랜도 표기 효율성에 대한 도움이 성명을합니다. 등등.X

특히 사람들이 종종 두 번째 제안을하더라도 제안하는 내용은 따르지 않습니다.

슬프게도, 알고리즘을 다루는 더 넓은 사람들의 커뮤니티는 단순성을 위해 공허한 용어를 포함합니다. ( 알고리즘에 대한 정확 하고 유용한 문장을 만드는 것은 어렵습니다!)

당신은 우리의 참조 질문에 관심이있을 수 있습니다 .


알고리즘 X는 모든 입력 크기 n이 n0보다 큰 n0보다 큰 모든 입력 크기에 대해 y보다 작은 시간이 걸리면 Y보다 점진적으로 우수하다고합니다.

이것이 일반적인 정의 가 아닌 방법에 주목하십시오 ! 경우 및 , 우리가 언급하지 않았다 그것의 "점근 적으로 더 나은". 알고리즘의 성능을 단일 숫자로 낮추는 분석의 모든 경고를 감안할 때 하나가 다른 것보다 "더 나은"것이라고 주장 할 수는 없습니다.TA(n)=n+1TB(n)=n

Wikipedia에 관한 기사를 한 번 읽은 프로그래머가 아니라 CS 자료에서 컴퓨터 과학을 배우는 것이 좋습니다. (그렇습니다. 가혹한 일이지만 프로그래머 서클에서도 너무 많은 거짓이 전파되는 것을 보았습니다.)


2

"증상 적으로 더 효율적"은 "특정 크기 이상의 모든 문제에 대해 더 효율적"을 의미합니다. "확실한 크기"가 무엇인지 말하지 않고 "확실한 크기"이전에 어떤 일이 발생하는지 말하지 않습니다.

따라서 두 번째 답변을 제외한 모든 답변은 분명히 잘못되었습니다. "증상 적으로 더 효율적"인 것은 작은 입력 크기에 대해서는 전혀 언급하지 않기 때문입니다. 그러나 두 번째도 문제가 있습니다.

현재 정수 배열을 저장할 수있는 하드웨어가 없으므로 분명히 정수는 "큰 입력"으로 간주됩니다. 그러나 Bubblesort보다 점진적으로 더 효율적인 정렬 알고리즘을 쉽게 만들 수 있지만 이상의 정수 입력에 대해서만 가능합니다 . 답 2를 가져 와서 "large"를 "large enough"로 바꾸면 정확 해집니다.103010301040

실제로는 무조건 더 나은 알고리즘이 실제로 더 빠른 입력 크기와 더 빠른 입력에 필요한 시간이 얼마인지, 실제로는 불가능한 문제 크기에 대해서만 알고리즘이 더 빠른지 확인하는 것이 좋습니다. 어쨌든 해결됩니다. 알고리즘 A가 알고리즘 B를 능가하지만 각각 년 이상 걸리는 문제에 대해서만 A가 도움이되지 않습니다.1015

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