인프런 커뮤니티 질문&답변

오늘아침딸기님의 프로필 이미지
오늘아침딸기

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

알고리즘 교안 107p Array vs Linked_List 시간

해결된 질문

작성

·

111

1

Linked_List가 순차접근을 하니까 원소에 접근할때 O(N)이 걸리는건 알겠는데

삽입,삭제에 O(1)이 걸리는게 이해하기 힘듭니다

똑같이 순차접근을 해야하니까 O(N)이 걸려야 하는거 아닌가요???

 

Array에서 랜덤접근이 가능하니까 접근할때는 O(1)이 걸리는거 알겠는데

삽입,삭제에 O(N)이 걸리는건 이해하기힘듭니다

접근할때와 마찬가지로 랜덤접근하면 O(1)이 걸려야 하는거 아닌가요???

답변 1

1

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 딸기님 ㅎㅎ

 

똑같이 순차접근을 해야하니까 O(N)이 걸려야 하는거 아닌가요???

>>

연결 리스트에서 특정 위치에 삽입 또는 삭제를 하는 경우, 해당 위치의 바로 앞 노드를 찾아야 하므로 원칙적으로 O(N)의 시간이 걸립니다.

하지만, 삽입 또는 삭제할 노드에 이미 접근했다고 가정할 때(예를 들어, 이미 특정 노드를 가리키고 있는 포인터가 있다고 가정할 때)를 기반으로 이 작업의 시간복잡도를 계산합니다.

이 때 해당 노드의 포인터만 조정하면 되므로 O(1)의 시간이 걸립니다.

 

 

Array에서 랜덤접근이 가능하니까 접근할때는 O(1)이 걸리는거 알겠는데

삽입,삭제에 O(N)이 걸리는건 이해하기힘듭니다

>>

배열의 중간에 원소를 삽입하거나 삭제하는 경우, 해당 원소 이후의 모든 원소들을 이동시켜야 하므로, 평균적으로 O(N)의 시간이 걸립니다.

즉, 배열에서 원소를 추가하거나 제거할 때 나머지 원소들의 위치를 조정해야 하는 시간이 걸리기 때문에 O(N)입니다.

 

또한 해당부분에 대한 설명을 교안에다가 추가해놓았습니다. 새로 다운 받으시면 업데이트된 교안을 받으실 수 있습니다. 😀



또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


깔끔하고 명확한 답변 감사합니다

오늘아침딸기님의 프로필 이미지
오늘아침딸기

작성한 질문수

질문하기