배열의 삭제 시간복잡도
배열의 삽입, 삭제 시간복잡도에 대해서 shift가 필요히니 O(n)이라고 하셨는데요.
삽입의 경우 해당 인덱스의 원소 값을 바꾸는 것이 아닌 기존 값을 유지하면서 새로운 값을 그 위치에 놓고자 한다면 O(n)이 맞겠습니다만
삭제의 경우 그냥 해당 위치를 초기화하면 되지 않을까요?
물론 말씀하신대로 쉬프트가 필요하다면 O(n)이 맞지만 삭제 연산에서 쉬프트가 필수적인가? 하는 의문이 있습니다.
답변 1
0
안녕하세요 현강님.
삭제를 할 때와 삽입을 할 때 모두 shift를 해야만 하는 이유가 있어요.
배열은 연속적이고 순차적으로 메모리에 저장되어야 한다는 정의 때문이에요.
왜 굳이 연속적이고 순차적으로 저장하냐라고 물으신다면, random access의 장점을 이용하기 위해 그렇게 정의를 한 겁니다.
물론 삭제할 때 굳이 땡기지 말고 빈자리(공석)으로 남기면 안되나? 라고 물으신게 맞으시죠??!
삭제 후에 빈자리가 생기면 굳이 땡기지(shift)말고 그냥 놔두면, 그곳에 있는 데이터를 잘 못 접근했을 때 생기는 문제등을 해결하기 위해 "이곳은 빈 곳입니다" 라는 라벨을 걸어둬야 할 거에요.
결국 여러가지 효율적인 문제때문에도 그렇고, 배열의 정의때문에도 삽입 삭제를 할 때는 연속적이고 순차적인 성질을 유지하기 위해 shift를 해줘야 합니다.
혹시 질문에 대한 답이 됐을까요~? 더 궁금한점이 있으면 편하게 질문주세요!
노션 접근이 안됩니다 ㅠㅠ
0
120
2
노션 공유 부탁드립니다.
0
58
2
노션 공유가 안됩니다!
0
152
2
프로세스가 많아질수록 segment table도 많아지는 건가요?
1
73
2
노션 공유가 사라졌습니다.
0
163
2
post 요청
0
56
1
http
0
64
1
mutex, semaphore와 deadllock
0
99
3
실행중인 프로세스는 메모리를 연속적으로? 아니면 불연속적으로 사용하나요?
0
72
1
노션 공유 요청 드립니다.
0
124
1
노션 공유 요청드립니다.
0
87
1
Dynamic Array와 Linked List의 시간복잡도에 대해서..
0
115
1
노션
0
110
1
질문이있습니다 선생님!
0
109
1
질문이있습니다 선생님!
0
99
1
질문이있습니다 선생님!
0
93
1
질문이있습니다 선생님!
0
163
2
질문이있습니다 선생님!
0
152
2
질문이 있습니다 선생님!
1
198
2
질문이 있습니다 선생님!
0
124
1
질문이있습니다 선생님!
0
88
1
질문이 있습니다 선생님!
0
109
1
질문이 있습니다 선생님!
0
91
1
물리적 메모리에 연속적으로 저장하지 않는 이유
0
133
1





