2016-10-12 2 views
-3

부울 표현식의 경우 "> ="및 "< ="보다 ">"및 "<"이 더 효율적입니까? 후자의 표현은 "="및 "<"또는 "="및 ">"동시에 두 조건을 테스트해야합니까?비교>>> 효율성

+0

이러한 변형은 컴퓨터 수준에서도 하나의 opcode로 사용할 수 있습니다. 별도의 Zero와 Sign 플래그가 있기 때문에'> = 0'이 때때로 더 영리하게 수행 될 수 있습니다. 전통적으로 부문 만이 곱셈보다 느립니다. –

답변

2

아니요 대부분의 컴퓨터에서 효율성에 차이가 없습니다. 최신 CPU 명령어 세트는 동일한 클럭 사이클 수에서 '와 동등'이라는 네이티브 테스팅을 포함합니다. JVM은 비교를 올바른 명령으로 변환하고 성능은 동일합니다.

예를 들어 Intel 칩에 대해서는 https://en.wikipedia.org/wiki/X86_instruction_listings 'jump if'지침을 참조하십시오. 각 명령어의 대기 시간 및 처리량에 대한 정보는 http://www.agner.org/optimize/instruction_tables.pdf을 참조하십시오. Jcc가 모두 동일한 기능을 수행한다는 것을 알 수 있습니다.

는이를 확인하려면 다음 코드를 실행 :

long t1 = System.currentTimeMillis(); 
    long t = 0; 
    for (long i = 0; i < 1E10; i++) 
      t++; 
    long t2 = System.currentTimeMillis(); 
    for (long i = 1; i <= 1E10; i++) 
      t++; 
    System.out.println((t2 - t1) + "/" + (System.currentTimeMillis() - t2)); 

결과는 12701/12731. 성능에 따라서 유의 한 차이가 있었다.

1

이 연산자들간에 성능 차이가 있는지 의심 스럽습니다.

Java 바이트 코드 명령어 세트는 각각 ifltifle으로 명명 된보다 작거나 같거나 작은 연산자에 대해 별도의 연산자를 사용합니다. 더 큰 비교 연산자 (ifgtifge)와 비슷한 연산자가 있습니다. 궁극적으로 JVM의 구현에 따라 이러한 바이트 코드가 낮은 수준에서 해석되는 방식을 결정하지만, 오늘날의 거의 모든 물리적 아키텍처가이 기능을 일정하게 제공하기 때문에 일정 시간 내에 이러한 작업이 발생한다는 것이 안전한 가정이라고 생각합니다. 시각.

1

O(n) (효율성)과 동일하므로 if(a > b || a == b)if(a >= b)과 동일합니다. 유일한 차이점은 컴퓨터가 더 많은 문자를 읽지 만 코드 효율성이 우수하다는 것입니다. O(n+n)은 실제로 아무 것도 변경하지 않습니다.. O(n^n) 등이있는 것이 중요합니다 ...

+0

복잡도 이론은 두 가지 경쟁 알고리즘의 이론적 효율성을 분석하는 데 유용합니다. 알고리즘을 구현하는 데 사용 된 실제 코드의 성능을 조정하는 데 많은 도움이되지 않습니다. 이를 위해서는 실제 물리적 하드웨어에 대한 프로파일 코드가 필요합니다. – sprinter

관련 문제