let arr= [1, 2, 3] for(let i = 0; i < arr.length; ++i) { for(let j = 0; j < i; ++j) { } }
저는 처음에 어리석은 지식으로 이중for문이니까 O(n^2)겠지 싶다가
arr의 길이가 3으로 고정되어서 for(let i = 0; i < 3; ++i)와 같은 O(1)을 갖고 그 밑의 i도 정해져있기에 상수이니까 O(1) * O(1) = O(1)이니
이 코드는 상수시간복잡도를 갖는 것인가? 감히 생각했습니다.
이런 생각을 갖고 나서 뭔가 더 헷갈려져서 ai와 구글에 도움을 받았습니다.
외부나 내부의 조건 중 하나가 상수가 아닐 때: 이 경우 전체 코드의 시간 복잡도는 O(n)이 됩니다. 최종적으로 입력 크기에 선형으로 비례하는 시간이 소요됩니다.
외부나 내부의 조건 둘 다 변수일 때: 이 경우 전체 코드의 시간 복잡도는 O(n^2)이 됩니다. 외부 반복문과 내부 반복문의 조건이 모두 입력 크기에 대한 반복이기 때문에 제곱 관계로 시간이 증가합니다.
외부와 내부 조건 둘 다 상수일 때: 이 경우 전체 코드의 시간 복잡도는 O(1)이 됩니다. 입력 크기에 무관하게 상수 시간이 소요되기 때문에 상수 시간 복잡도입니다.
이렇게 나오는데 그 챗gpt는 위의 코드는 죽었다깨도 O(n^2)라고 하는 반면 구글은 상수 시간 복잡도라고 하는 글도 있고 O(n)이라고 하는 글도 있어서 헷갈립니다 형님들... 진짜 찐뉴비 구제해주시면 안되겠습니까 ㅠㅠㅠㅠㅠ
님의 코드에서는 횟수가 딱 나오잖아요. 근데 저게 변수값이어봐요. 사용자가 원하는만큼 입력하는거셈. 그러면 그때부턴 N으로 변해요.
그때부터는 O(N^2)이 되는거져
지금은 고정값이니 O(9) 되는거고 그래서 O(1)인거고
근데 만약 arr = [1,2,3] 저걸 저렇게 안쓰고 function (arr) { }로 외부에서 받는 순간 O(n^2)되는거고
보통 시간복잡도 말할 떈 고정값으로 이야기 잘 안해요. 고정값이면 의미없으니까. 이 알고리즘이 일반적으로 얼만큼 복잡도를 가지고 있는지에 대해서 이야기하는 수치라서요
오 형님이 제 은인이십니다 감사합니다감사합니다감사합니다... 말씀하신 것 다시 보고 생각해보니 하긴 고정값이면 굳이 이야기 할 필요도 없는 개념이겠네요 우문이였습니다 형님 감사합니다