2016-12-01 1 views
1

그래, 코드 작성에 상당히 익숙하다. WCET T (a, b)와 함수의 복잡성을 근사화하려고한다. 예 기능 :이 기능의 복잡성이 차 O (N^2)하지만 난이 WCET를 근사에 확실하지 않다 이해Big O 표기법은 어떻게 작동합니까?

def testFunction(self): 
    x = 0 
    for r in range(a): 
     for c in range(b): 
      if testFunction2(r, c): 
       x = x + 1 
return x 

?

또한되고, 그 기능이 단지 두 할당 아니다 :

x = 0 

x = x + 1 

? 그렇다면 T (a, b)로 과제를 어떻게 표현합니까?

수학은 결코 내 강점이 아니지만이를 수행하는 방법을 배우고 싶습니다. 내가 읽은 자료 중 어느 것도 내가 이해하는 방식으로 설명하지 못합니다.

미리 감사드립니다.

답변

1
def testFunction(self): 
    x = 0        # 1 
    for r in range(a):     # a 
     for c in range(b):    # b 
      if testFunction2(r, c):  # a*b 
       x = x + 1    # depends testFunction2 
    return x       # 1 
위한 참고 것 A = NB = N 다음 말할 수 O (N^2) 경우 항상 testFunction2 True를 반환이 함수

WCET B는 x = x +1 B 번 실행할 수 있지만 못해 실행 시간의 합 영향. N = 1000과는 = B = N

2 + 1000 + 1000 + 2*1000*1000 
2002 + 2000000 

이 결과를 evalute 때 그래서 2002을 볼 수 당신 동안 아무것도 동안, 예를 들어

(1 + a + b + a*b + a*b + 1) 
2 + a + b + 2*a*b 

: 은 마지막으로이 모든 exection 시간 합계

+0

좋아, 나는 그것을 이해할 수 있고 도움이된다. 그럼 당신은 '최악의 실행 시간은 T (a, b) = 2 + a + b + 2ab'입니다. 그 실행 시간은 무엇입니까 대답합니까? 함수에 대해 – Gazza732

+1

예. – metmirr

+0

그것은 훌륭합니다. 당신의 도움을 주셔서 감사합니다. 또한 Big O 표기법을 사용하면이 함수의 런타임 복잡성이 O (N^2)가 될 수 있습니까? 왜냐하면 다른 함수 안에 루프가 중첩되어 있기 때문입니다. – Gazza732

0

최악의 경우 실행 시간은 프로그램을 느리게 만들 수 있도록 특별히 고안된 입력이 있다고 가정 할 수 있습니다. 이 경우 testfunction2는 항상 true를 리턴합니다.

루프 본문 내에서 x = x + 1은 최악의 경우 a * b 번 발생합니다.

대신 (N^2) O로 이렇게 설명하는, I는 O (AB)으로 설명하고,이어서 ~ = B ~ = O 인 N (N^2)

+0

당신이 넣은 마지막 줄 이외에는 모두 이해하고 있습니다. O (N^2)로 표시된 Big O의 복잡성은 아닙니까? 또한 WCET는 할당 수를 나타내는 T (a, b)로 어떻게 근사화됩니까? for 루프의 할당이 'a * b'번 발생하는 방식을 이해합니다. 고맙습니다. – Gazza732

+0

프로그램에 N *의 언급이 없으므로 O (N의 모든 기능)가 될 수 없습니다. – Caleth