whdgurclzls   3년 전

10번째 줄의 for문을 11번째 줄로 for문으로 바꾸면 시간 차이가 납니다.

10번째 줄은 2차원 배열중에 대각선 왼쪽 아래를 가지고 계산을 해준거고

11번째 줄은 2차원 배열 대각선 오른쪽 위를 가지고 계산을 해주었다고 생각합니다.

그런데 제출시 두 코드간의 시간 차이가 나는데 이건 어느 부분에서 나는 차이일까요??

(&&연산 중 앞의 식이 틀리면 다음거 검사 안하고 다음으로 넘어간다는 부분이 차이를 일으키나 생각해봤는데, 완전탐색으로 모든 경우의 수를 비교하는거라 결국 비교하는건 같아지지 않나요?)

dldyddlwl   3년 전

제가 n 값과 s 배열의 값을 무작위로 ( 난수 생성 ) 만들어 낸 후, 500번을 돌려봤는데요. ( 그 500번의 시도도 50번 정도 돌려보았습니다 )

결론은, 평균은 거의 차이가 없었습니다. 그런데 500번의 테스트를 진행하는 동안에 일부 테스트는 차이가 크게 나더라구요. 

( 전체적인 평균은 거의 비슷하나 0.00001초 = 0.01ms,   @일부 편차가 큰 데이터가 존재@ ) -> 1000번의 경우, 평균 오차가 0.000007초로 더 줄어듬.

( 돌리는 횟수가 적을 때에는 평균의 차이가 0.01초 정도로 크게 났으나, 그 수를 높일수록 오차는 현저히 줄었습니다 )

이 최대 편차는 매 횟수의 시간 차이의 최댓값을 계속 갱신해가면서 구했는데, 어쩔 때는 가장 큰 차이가 0.186초이더군요. 와우; ( 그러나 대부분 위와 같이 60~70ms의 차이었습니다 )

( 위 경우, 64ms 과 132ms의 차이를 약 70ms으로 잡으면, 0.07초 차이 )

그리고 그런 차이가 날 때 마다, 누가 더 오래 걸리는 지도 조사해봤는데, 10번 중에 7번 정도는 두 번째 for loop가 오래걸렸고, 3번 정도는 첫 번째 for loop가 오래 걸렸습니다.

따라서, 제 생각에는, 만약 로직의 차이로 인한 시간 차이였다면( 만일, 첫 번째 for loop가 더 효율적이며, 빨랐다면 ),

때때로, 데이터의 차이에 따라서,  첫 번째 for loop가 더 오래걸리거나 비슷할 수도 있겠지만, 

평균적인 시간측정에서도 저정도의 오차밖에 나지 않는다면, 이는 로직의 차이라고 말하긴 힘들 것입니다. 

( 사실, 말씀하신 것처럼 저도 로직에서의 차이는 못 느끼겠습니다. 그래도 가장 확실한 건, 직접 해보는거라고 믿었습니다. )


마치, 동전 던지기로 비유해보면 어떨까요? 실제로, 친구와 앞면이 나올지 뒷면이 나올지 내기를 해보면, 사실 이론처럼 정확히 반반씩 나오지는 않습니다. 그러나 한 두번이 아닌 매우 많은 시도를 하다보면, 앞면과 뒷면의 차이는 상대적으로 무시할 수 있을만큼 작아집니다. 그렇다면, 우리는 앞면과 뒷면의 확률은 같다고 말할 수 있게 됩니다.

whdgurclzls   3년 전

와 귀한 시간내어 테스트까지 해주셔서 감사합니다 ㅜㅜ

덕분에 궁금한점 속시원히 해결되었습니다 ㅎㅎ


복받으세요!!! :)

댓글을 작성하려면 로그인해야 합니다.