꾸물꾸물 졔의 개발공부

02/10(4) - DFS 본문

SSAFY

02/10(4) - DFS

체제 2022. 2. 11. 00:09

DFS - 깊이우선 탐색 : 루트노드에서부터 시작하여, 한방향으로 갈 수 있는데 까지 쭈~욱 내려가고 , 마지막을 만나면 마지막에 만난 갈림길로 가서 다른방향의 노드로 !!! 

 

각 노드에서 탐색하는 방법이 동일함 ( 재귀 이용 가능 ) 

-> 한 노드에 대해 내가 가지고 있는 좌자식 노드와, 우자식 노드만 탐색함 

 

[순회]

-전위순회 : 부모 - 좌 - 우

-중위순회 : 좌 - 부모 - 우

-후위순회 : 좌 - 우 - 부모

 

[ 힙 ] 

완전이진트리의 구조에서 이루어짐 ,, 빠르게 탐색이 가능 

최대힙 : 루트노드가 가진 값이 키값 최대 , 부모노드 > 자식노드 유지 

최소힙 : 루트노드가 가진 값이 키값 최소, 부모노드 < 자식노드 유지 

 

< 값 삽입 > 

완전 이진트리에서 마지막 인덱스 값 바로 뒤에 삽입한 후, 각 부모 노드와 비교해가며 SWAP -> 제자리 찾기 

: 층별로만 이동하면 되기 때문에 O(nlogn)

<루트 노드값 삭제 > 

가장 마지막 인덱스의 값으로 루트 대체 -> 자식 노드와 비교해가며 제자리 찾기 

: 층별로 이동하기 때문에 마찬가지로 O(nlogn)

< 단순 최대 / 최소 조회 > 

O (1)

---> 최대 또는 최소힙이므로, 힙정렬 가능 ( 일반 정렬보다 훨씬 빠름 ) 

 

java.util.PriorityQueue() : 각 원소 내에서 원소들 스스로 타원소와 비교해야함 , comparable 인터페이스 구현 필요 

java.util.PriorityQueue(Comparator comparator) : 매개변수의 comparator 가 알아서 비교도우미 역할 해줌 , 

 즉 , comparable 별도 구현 필요 없음 

 

PriorityQueue<Integer> pque = new PriorityQueue<>() // 이런식으로 하면, 원소들 스스로 comparable 인터페이스를 구현해서 비교해야 하는데, 원소인 Integer 내부로 들어가보면 comparable 을 구현하고 있음 

- > 별도의 액션 취하지 않아도 스스로 오름 차순으로 정렬해서 큐에 삽입해줌 !! 대박 

'SSAFY' 카테고리의 다른 글

서버 첫 걸음  (0) 2022.07.26
알고리즘 문제 출제 대회 - BFS  (0) 2022.06.22
02/10(3) - 비선형구조의 탐색 (DFS)  (0) 2022.02.10
02/10(2) - 이진트리  (0) 2022.02.10
02/10(1) - 트리  (0) 2022.02.10