LRU μΊμ μκ³ λ¦¬μ¦ μ μ¬μ©λ μμλλ‘ μμ΄ν μ μ 리ν¨μΌλ‘μ¨, μ€λ μκ° λμ μ¬μ©λμ§ μμ μμ΄ν μ λΉ λ₯΄κ² μ°ΎμλΌ μ μλλ‘ νλ€.
νλ°©ν₯μΌλ‘λ§ μ·μ κ±Έ μ μλ μ·κ±Έμ΄ νκ±°λ₯Ό μκ°ν΄λ΄ μλ€. κ°μ₯ μ€λ«λμ μ μ§ μμ μ·μ μ°ΎκΈ° μν΄μλ, νκ±°μ λ°λμͺ½ λμ 보면 λ©λλ€.
LRUCache ν΄λμ€λ₯Ό ꡬνν΄λ΄ μλ€:
LRUCache(int capacity)
LRU μΊμλ₯Ό μμ μcapacity
λ‘ μ΄κΈ°νν©λλ€.int get(int key)
key
κ° μ‘΄μ¬ν κ²½μ°key
κ°μ λ°ννκ³ , κ·Έλ μ§ μμΌλ©΄undefined
λ₯Ό λ°νν©λλ€.void set(int key, int value)
key
κ° μ‘΄μ¬ν κ²½μ°key
κ°μ μ λ°μ΄νΈ νκ³ , κ·Έλ μ§ μμΌλ©΄key-value
μμ μΊμμ μΆκ°ν©λλ€. λ§μ½ μ΄ λμμΌλ‘ μΈν΄ ν€ κ°μκ°capacity
λ₯Ό λλ κ²½μ°, κ°μ₯ μ€λλ ν€ κ°μ μ κ±° ν©λλ€.
get()
κ³Ό set()
ν¨μλ 무쑰건 νκ· O(1)
μ μκ° λ³΅μ‘λ λ΄μ μ€νλμ΄μΌ ν©λλ€.
LRUCache.js μμ LRUCache
ꡬν체 μμλ₯Ό νμΈν μ μμ΅λλ€. μμμμλ (νκ· μ μΌλ‘) λΉ λ₯Έ O(1)
μΊμ μμ΄ν
μ κ·Όμ μν΄ HashMap
μ μ¬μ©νκ³ , (νκ· μ μΌλ‘) λΉ λ₯Έ O(1)
μΊμ μμ΄ν
μμ κ³Ό μ κ±°λ₯Ό μν΄ DoublyLinkedList
λ₯Ό μ¬μ©νμ΅λλ€. (νμ©λ μ΅λμ μΊμ μ©λμ μ μ§νκΈ° μν΄)
okso.app μΌλ‘ λ§λ¦
LRU μΊμκ° μ΄λ»κ² μλνλμ§ λ λ§μ μμλ‘ νμΈνκ³ μΆλ€λ©΄ LRUCache.test.js](./test/LRUCache.test.js) νμΌμ μ°Έκ³ νμΈμ.
λλΈ λ§ν¬λ 리μ€νΈλ‘ ꡬνν 첫λ²μ§Έ μμλ μ΄λ»κ² νκ· O(1)
μκ° λ³΅μ‘λκ° set()
κ³Ό get()
μΌλ‘ λμ¬ μ μλμ§ νμ΅ λͺ©μ κ³Ό μ΄ν΄λ₯Ό λκΈ° μν΄ μ’μ μμμ
λλ€.
κ·Έλ¬λ, λ μ¬μ΄ λ°©λ²μ μλ°μ€ν¬λ¦½νΈμ Map κ°μ²΄λ₯Ό μ¬μ©νλ κ²μ
λλ€. μ΄ Map
κ°μ²΄λ ν€-κ° μκ³Ό ν€λ₯Ό μΆκ°νλ μμ μλ³Έ μ μ§λλλ€. μ°λ¦¬λ μ΄κ±Έ μμ΄ν
μ μ κ±°νκ±°λ λ€μ μΆκ°νλ©΄μ 맡μ "κ°μ₯ λ§μ§λ§" λμμμ μ΅κ·Όμ μ¬μ©λ μμ΄ν
μ μ μ§νκΈ° μν΄ μ¬μ©ν μ μμ΅λλ€. Map
μ μμμ μ μλ μμ΄ν
μ μΊμ μ©λμ΄ λμΉ κ²½μ° κ°μ₯ λ¨Όμ μ κ±°λλ λμμ
λλ€. μμ΄ν
μ μμλ map.keys()
μ κ°μ IterableIterator
μ μ¬μ©ν΄ νμΈν μ μμ΅λλ€.
ν΄λΉ ꡬν체λ LRUCacheOnMap.js μ LRUCacheOnMap
μμμμ νμΈν μ μμ΅λλ€.
μ΄ LRU μΊμ λ°©μμ΄ μ΄λ»κ² μλνλμ§ λ λ§μ ν μ€νΈ μΌμ΄μ€λ₯Ό νμΈνκ³ μΆλ€λ©΄ LRUCacheOnMap.test.js νμΌμ μ°Έκ³ νμΈμ.
νκ· | |
---|---|
κ³΅κ° | O(n) |
μμ΄ν μ°ΎκΈ° | O(1) |
μμ΄ν μ€μ νκΈ° | O(1) |