μ°λ¦¬κ° μ§λμκ°μ Heapμ λ°°μ λλ°, μ¬μ€ Heapμ μ΄ Priority Queue, μ°μ μμ νλ₯Ό μν΄μ κ³ μλ μλ£κ΅¬μ‘°λΌκ³ ν΄λ κ³ΌμΈμ΄ μλλ€.
μ°μ μμ νμ λν΄μ μ§κΈλΆν° μμκ°λ³΄μ.
μ°μ μμ ν
μ°μ μμ νλ λ§ κ·Έλλ‘ μ°μ μμ(Priority) κ° μ‘΄μ¬νλ ν μ΄λ€.
μλ₯Όλ€μ΄ μ°λ¦¬κ° νμλ€μ΄ μμ λ, λμ΄ μμΌλ‘ νμλ€μ μ μΈμ΄λ€λ©΄ λμ΄κ° μ°μ μμκ° λμ΄ λμ΄κ° ν¬κ±°λ μμ μμλ‘ νμλ€μ΄ μ λ ¬μ΄ λ κ²μ΄λ€.
μ΄ λ§μ λ€μ νμ΄μ λ§ νλ€λ©΄, λ€μ΄μ¨ μμμ μκ΄ μμ΄ μ°μ μμκ° λμ λ°μ΄ν°κ° λ¨Όμ μΆλ ₯λλ€λ λ»μ΄λ€.
μ€ν VS ν VS μ°μ μμ ν
μλ£ κ΅¬μ‘° | μμ λμ |
μ€ν | κ°μ₯ λμ€μ λ€μ΄μ¨ λ°μ΄ν° |
ν | κ°μ₯ λ¨Όμ λ€μ΄μ¨ λ°μ΄ν° |
μ°μ μμ ν | κ°μ₯ μ°μ μμκ° λμ λ°μ΄ν° |
μ¬κΈ°μ μ κΈ°ν μ¬μ€μ μ°μ μμ νλ‘ μ€νμ΄λ νλ₯Ό ꡬνν μ μλ€λ κ²μ΄λ€.
μμ νλ₯Ό 보면 μκ² μ§λ§ μ€νκ³Ό νλ μ°μ μμ νμ μ μ₯μμ λ³Έλ€λ©΄, μ°μ μμκ° λ€μ΄μ¨ μμμ΄λ€.
μ΄λ₯Ό μ΄μ©νλ©΄ μ°μ μμ νλ‘ μ€νκ³Ό ν μλ£κ΅¬μ‘° λͺ¨λλ₯Ό ꡬνν μ μλ€.
μ°μ μμ ν μ°μ°μ λ΄λΆ λμ κ³Όμ
μ°μ μμ νλ λ΄λΆμ μΌλ‘ μμ μ μ½μ μ μ°μ°μ΄ μ΄λ£¨μ΄μ§ λ μ΄λ€ μλ£ κ΅¬μ‘°λ‘ κ΅¬νμ΄ λ κΉ?
μ°μ μμ νλ μ°λ¦¬κ° λ°λ‘ μ μ λ°°μ λ Heap(ν μλ£κ΅¬μ‘°) μ λ΄λΆμ μΈ λμμ μν΄ λμνλ€. λ€λ₯Έ μλ£νκ³Ό λΉκ΅ν΄λ³΄μ.
Unsorted Array
μ λ ¬λμ§ μμ λ°°μ΄μ μ½μ
μ΄ κ°λ¨νλ€. κ·Έλ₯ κΈ°μ‘΄ μμ λ§μ§λ§μ λΆνλ©΄ λλλ° μ΄λ μκ° λ³΅μ‘λκ° O(1)
μ΄λ€. νμ§λ§ μμ ν λ μ°μ μμλ₯Ό λ°μ ΈμΌ νλ―λ‘ κ²°κ΅ λ°°μ΄ λͺ¨λ μμλ₯Ό ν λ²μ© νμΈν΄μΌ νλ―λ‘ μκ° λ³΅μ‘λλ O(n)
μ΄ λλ€.
Sorted Array
μ λ ¬λ λ°°μ΄μ μ½μ
μ μ‘°κΈ λ³΅μ‘ν΄μ§λ€. μ½μ
ν μμμ λν μ°μ μμλ₯Ό λ€λ₯Έ κ°λ€κ³Ό λΉκ΅ν΄μΌ νλ―λ‘ μκ° λ³΅μ‘λλ O(n)
κ° λλ€. μμ κ° λ λ€μλ κ° μμλ₯Ό μμΌλ‘ λΉκ²¨μ€μΌ νλ€λ μ μ΄ λμ΄μμ§λ§ μ΄λ―Έ μκ°λ³΅μ‘λκ° μ€λ°λκΉ λμ΄κ°μ
Sorted, Unsorted LinkedList
μ λ ¬λμ§ μμ 리μ€νΈλ μ λ ¬λ 리μ€νΈλ μ¬μ€ κ±°κΈ°μ κ±°κΈ°λ€. λ°°μ΄μ μ°μμ μΈ λ°μ΄ν°μ λ¬Άμμ΄κ³ 리μ€νΈλ λΉμ°μμ μ λ
Έλμ μ°κ²°μ μν΄ μ΄λ£¨μ΄μ Έμλλ°, μ½μ
κ³Ό μμ μμ μ°μ μμλ₯Ό λΉκ΅ν΄μΌ νλ―λ‘ κ°κ° O(n)
, O(1)
μ μκ° λ³΅μ‘λκ° μλͺ¨λλ€.
Heap
νμ λ°μ λ ¬ μνλ₯Ό μ μ§νλ―λ‘ νΈλ¦¬μ λμ΄μ λ°λΌ μκ° λ³΅μ‘λκ° κ³μ°λλ―λ‘ O(log2N)
μ΄λΌλ μ΄λ§μ΄λ§ν μκ°λ³΅μ‘λμ λ¨μΆμ΄ μ‘΄μ¬νλ€.
μλ°μ PriorityQueue class
μ΄μ λ΄λΆ λμμ Heapμ μν΄ μ΄λ£¨μ΄ μ§λ€λ κ²μ μκ² λμλ€.
κ·ΈλΌ μ€μ μμ μ¬μ©νκΈ° μν΄μ μλ°μ PriorityQueue
ν΄λμ€λ₯Ό λ°°μ보μ.
java.util
ν΄λμ€λ‘ 컬λ μ
μ΄ μλ ν¨ν€μ§μ λμΌν ν¨ν€μ§μ μ‘΄μ¬νλ€.
μΌλ¨ μ°μ μμ νλ₯Ό μ΄μ©νκΈ° μν΄μλ κ°μ€μΉ, μ¦ μ°μ μμκ° μ‘΄μ¬ν΄μΌ νλ€.
μ¬λμ΄λΌλ ν΄λμ€λ₯Ό λ§λ€μ΄μ μ¬λμ λμ΄μ λλ‘ μ΄λ¦μ μΆλ ₯μμΌλ³΄μ.
λμ΄μλλ‘ μ΄λ¦μ μΆλ ₯νκΈ° μν΄μλ λ comparable
μΈν°νμ΄μ€λ₯Ό μ΄μ©ν΄μ compareTo
λ©μλλ₯Ό μ¬μ μ ν΄μνλ€.
public class My_PriorityQueue {
public static void main(String[] args) {
PriorityQueue<Person> priorityQueue = new PriorityQueue<>();
Person p1 = new Person(10, "jang");
Person p2 = new Person(11, "Heo");
Person p3 = new Person(11, "park");
Person p4 = new Person(9, "choi");
Person p5 = new Person(8, "seo");
priorityQueue.offer(p1);
priorityQueue.offer(p2);
priorityQueue.offer(p3);
priorityQueue.offer(p4);
priorityQueue.offer(p5);
System.out.println(priorityQueue.size());
while(!priorityQueue.isEmpty()) {
System.out.println(priorityQueue.poll().name);
}
}
private static class Person implements Comparable<Person> {
int age;
String name;
Person(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public int compareTo(Person o) {
return o.age - this.age;
}
}
}
μ°λ¦¬κ° μ£ΌμκΉκ² 보μμΌ νλ λΆλΆμ λ°λ‘ Person
ν΄λμ€ μ΄λ€.
Person ν΄λμ€μ μ λ ¬ κΈ°μ€μ λμ΄λ‘ μ ν΄μ£Όλ©΄ μ°μ μμ νμ λ΄λΆ νμ μν΄μ κ°μ€μΉκ° μ μ©λ κ²°κ³Όλ₯Ό μΆλ ₯νκ² λλ€.
κ·ΈλΌ μ°μ μμμ μμμ?
μ°μ μμ μμμ λ κ°μ§ λ°©λ²μ΄ μλ€.
- Comparable λ©μλλ₯Ό μμ μ¬μ μ νλ λ°©λ²
- Collections.reverseOrder()λ₯Ό PriorityQueueμ μμ±μ 맀κ°λ³μλ‘ λ겨주λ κ².
λ©μλμ μμ μ¬μ μλ
@Override
public int compareTo(Person o) {
return this.age - o.age;
}
λ‘ λ°ν κ°μ λ°κΏμ£Όλ©΄ λκ³
μμ±μ 맀κ°λ³μλ λ€μκ³Ό κ°μ΄ ν΄μ£Όλ©΄ λλ€.
PriorityQueue<Person> priorityQueue = new PriorityQueue<>(Collections.reverseOrder());
λκΈ