퇴근하고 왔는데 아직도 싸우고있네..
이 논쟁의 시작은 어떤 갤러가 피보나치의 일반항을 구하는 식을가져왔음.
물론 일반항이니 O(1)로 계산이 가능하다라는 말이 나왔는데, 수식안에 제곱이 있으니 logN이라는 주장이 나왔다.
그래서 내가 실제로 시간 측정을 해보고, 컴퓨터에서 계산할 수 있는 수에서는 pow함수가 수식에 영향을 주지않으니 상수시간에 계산이 가능하다고 주장했음.
그런데 여기서 106.102라는 아이피가 2의 100만승을 넣으라고함 ㅋㅋ
컴퓨터에서 표현가능한 수의범위가 64비트에서 2의64승까지라 그 이상 수를 계산할때는 빅인테저로 계산해야하고 그 시간복잡도가 pow()함수의 시간복잡도 보다 크니 계산이 불가능 하다고 주장했음. 실제로 다른갤러가 파이썬으로 측정해보니 빅테저는 O(N)이 나옴. 그럼 O(N)+ O(logN) = O(N)임.
그래서 아예 pow()의 시간측정이 불가능함.
근데 얘는 이제 O(N)+ O(logN) = O(logN) 라고 주장함 (여기서좀 빡쳤음)
이래놓고
이래놓고 시간복잡도 보고오라하니 화가치밀어오르더라 2의 백만승거릴때 걸렀어야했는데...
정리
1. 지수계산은 log(N)이 맞음.
2. 그러나 pow()는 아키텍트에 의존적이고 현 컴퓨터환경에서는 O(1)두고 계산해도 무방함 (성능상의 차이가없음)
3. 나는 C++ pow()가 수식에서 계산할때 log(N)으로 시간복잡도를 계산할 필요가없다고 주장
아무튼 이렇게 싸운거임 ㅇㅇ; 엄밀하게 말하면 pow함수는 logN이맞는데, 우리 아키텍트가 64비트이고, 컴퓨터를 사용할때는 O(1)로 생각해도무방
그리고 더큰수를 넣어서 시간측정하라는데 그게 불가능함. 끝.
스몰 o ㄷㄷㄷㄷ
스몰 o ㄷㄷㄷㄷ
와 O(1)이냐??
그리고 빅인테저 곱은 NlogN임 ㄷㄷ
빅인테저 곱은 모른다만.. 니말대로 NlogN 이면, NlogN이랑 logN이랑 뭐가 더큼?
저건 내가 잘못쓰긴했네 ㅇㅋ;;
확실히 pow를 응용할 땐 그걸 둘러싸는 루프가 얼마 도는지가 더 중요하고 pow 자체는 무시해도 되지 수 크기도 얼마 차이 안 날 테니까
내가 하고싶었던말임.. 아무튼 난이제 이 논쟁에 끼지않겠다..
루프가 없고 pow의 시간복잡도가 전체 시간복잡도를 좌우하니 이러는 거지;
2의 64승보다 큰수계산측정은 pow()영향이아니라 빅인테저계산알고리즘영향임.파이썬에서 323의 3232132승계산 오래걸린다고말하는건 2의64승 넘어서 pow계산이아니라 빅인테저계산으로들어서 그런거임. (본문에 적어놨는데.._)
pow의 시간복잡도는 곱셈의 시간복잡도 * O(log n)이고, 빅인테저의 시간복잡도에 따라 함께 커지는 건데 O(N)+O(log N)=O(N)이란 소리를 하고 있으니 웃기단 거임
저기 댓글들도 정수 곱셈이 O(1)이라 가정했을 때 pow의 시간복잡도가 O(log n)이란 얘길 하고싶었던 것 같고, 빅인테저는 애초에 상관없는 얘기로 보임 ㅇㅇ
이 댓글은 게시물 작성자가 삭제하였습니다.
이 댓글은 게시물 작성자가 삭제하였습니다.
이 댓글은 게시물 작성자가 삭제하였습니다.
정확도를 희생하면 O(1)이야 가능하지 ㅇㅇ 근데 정확하게 정수로 계산해야 한다고 하면 O(log n) 미만으론 절대 못 줄임
big integer 곱이 어떻게 O(N)이야 고졸년아
난 빅인테저 곱이 몇으로나오는진모르는데 글에적은대로 파이썬으로 코드짠애가 시간측정하니 n으로 증가해서 그말한거다