시간 복잡도

삽입 정렬 알고리즘 이란 무엇인가? 삽입 정렬(Insertion Sort)은 배열의 각 원소를 해당 원소의 앞쪽에 있는 정렬된 배열의 적절한 위치에 삽입하는 방식으로 작동하는 배열이다. 각 원소가 삽입될 때 앞쪽 배열의 정렬된 위치에 들어가서 앞쪽 배열은 무조건 모두 정렬된 상태라는 것을 이용한 알고리즘이다. 예를 들어 아래와 같은 배열이 있을 때 둘째 원소부터 삽입 정렬을 수행한다고 하자. 둘째 원소는 첫 원소의 앞에 삽입된다. 그러면 아래와 같은 형태의 배열이 나오고 포인터를 다음으로 이동시켰을 때 앞쪽 배열([4, 5])은 모두 정렬되어 있는 것을 볼 수 있다. 이를 남은 원소인 6, 2, 1에 대해서 마저 수행하면 정렬이 완료된다. 삽입 정렬에서 특정 값을 특정 위치에 삽입하기 위한 알고리즘 배열..
PriorityQueue란? PriorityQueue는 원소들을 우선순위에 따라 저장하고 관리하는 자료구조이다. 각각의 원소는 우선순위의 순서대로 저장된다. PriorityQueue는 일반적으로 min-heap 이나 max-heap을 사용해 구현된다. Heap은 트리 형태의 우선순위대로 순서가 나타내지는 자료 구조로. min-heap 방식으로 구현되면 우선순위가 낮은 요소가 맨 앞에 오고, 우선순위가 높은 요소가 맨 뒤에 오게 되며, max-heap 방식을 사용해 구현되면, 우선순위가 높은 요소가 맨 앞으로 오고 우선순위가 낮은 요소가 맨 뒤에 위치한다. Kotlin과 Java의 PriorityQueue는 min-heap 방식으로 구현되어 우선순위가 낮은 요소가 가장 앞쪽에 온다. 예를 들어 아래와 같이..
목표 ArrayList의 특징을 이해한다. 접근, 검색, 추가, 삭제를 위한 시간 복잡도가 어떻게 도출되는지 이해한다. ArrayList ArrayList는 내부가 배열(Array)형태로 된 List이다. ArrayList는 List인데 연속된 메모리 공간을 차지하는 Array의 형태를 가지고 있다. 따라서 특정원소에 Index를 이용해 접근이 가능하다. ArrayList는 List의 성질인 가변성을 위해서 ArrayList는 과 같이 처음부터 일정량의 메모리 공간을 잡고 들어간다. 만약 같이 List에 인스턴스가 더해져 메모리 공간이 모두 찬다면 다시 해당 메모리 공간보다 더 큰 메모리 공간을 잡아 기존 객체를 복사한 다음 연산을 이어간다. 예를 들면 하나의 메모리 공간만 필요한데 향후 값이 추가될 것..
Dev.Cho
'시간 복잡도' 태그의 글 목록