BFS, 보충
너비 구분이 필요하면.
- int breadth 만들어서
- q.size 측정해 while(--size>=0)
- 끝나면 breadth++
아니면 큐에 배열을 넣던가 클래스를 넣던가.
- 배열이 메모리 덜 쓰긴함.
트리 DFS, Depth First Search
깊이 우선 탐색
- 재귀적이거나 스택 이용해서 구현
- 순회, traversal
- 트리의 노드를 체계적으로 방문하는 것
- 전위 순회, preorder
- 부모노드 방문 후 좌우
- 중위 순회, inorder
- 좌 부모 우
- 후위 순회, postorder
- 좌 우 부모
-----
힙.
- O(logN) 보장.
- 삽입
- 아래 넣고 부모랑 계속 대소 비교.
- 삭제
- 마지막 원소 데려와서 자식 중 큰 놈이랑 비교
알고리즘 맵,셋,우선순위 큐
맵, Map
- key와 value값으로 데이터를 저장
- 저장 순서를 유지하지 않는다.
- 키는 중복을 허락하지 않는다.
Map<key,value> map = new HashMap<>();
map.put(key, value);
map.get(key)
map.getOrDefault(key, default)
map.remove(key)
map.containskey(key)
-----
셋, Set
- 순서가 없이 중복되지 않는 데이터를 저장.
Set<type> set = new HashSet<>();
set.add(값)
set.addAll(리스트)
set.remove(값)
set1.retainAll(set2)
set1.addAll(set2)
set1.removeAll(set2)
-----
우선순위 큐, Priority Queue
- 큐와 유사한 구조를 가지며 각 데이터의 우선순위를 정해 데이터를 우선적으로 출력
- 내부 요소는 힙으로 구성되어 이진트리 구조로.
- compareTo 메서드를 오버라이드 해서 개인 클래스에 적용 가능
PriorityQueue<T> pqueueLowest = new PriorityQueue<>();
PriorityQueue<T> pqueueHighest = new PriorityQueue<>(Collections.reverseOrder)
pq.add(값)
pq.remove();
pq.remove(index)