2024. 1. 27. 21:02ใCS - Roadmap.sh/3. Common Algorithms
CS - 3. Common Algorithms - 3.4. Cache - 3.4.3 MFU Cache
๐กMFU Cache is another cache algorithm. The difference is that instead of deleting the least frequently used entry, the MFU Cache deletes the most frequently used entry.
MFU ์บ์๋ ๋ ๋ค๋ฅธ ์บ์ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ์ฐจ์ด์ ์ ์ฌ์ฉ ๋น๋๊ฐ ๊ฐ์ฅ ๋ฎ์ ํญ๋ชฉ์ ์ญ์ ํ๋ ๋์ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋ ํญ๋ชฉ์ ์ญ์ ํ๋ค๋ ์ ์ ๋๋ค.
MFU(Most Frequently Used) Cache๋ ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด
๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋ ํญ๋ชฉ์ ์บ์์ ๋ณด๊ดํ๋ ์บ์ฑ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค.
์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ ํญ๋ชฉ์ ์ฌ์ฉ ๋น๋๋ฅผ ์ถ์ ํ๋ฉฐ, ์บ์๊ฐ ๊ฐ๋ ์ฐผ์ ๋ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋ ํญ๋ชฉ์ ์บ์์ ์ ์งํ๊ณ ๊ฐ์ฅ ์ ๊ฒ ์ฌ์ฉ๋ ํญ๋ชฉ์ ์ ๊ฑฐํฉ๋๋ค.
์ด๋ ์์ฃผ ์ฌ์ฉ๋๋ ํญ๋ชฉ์ด ๋ฏธ๋์๋ ๊ณ์ ์ฌ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ ๊ฐ์ ์ ๊ธฐ๋ฐ์ ๋๊ณ ์์ต๋๋ค.
In Python
from collections import Counter
class MFUCache:
def __init__(self, capacity: int):
self.capacity = capacity
self.cache = {}
self.counter = Counter()
def get(self, key: int) -> int:
if key not in self.cache:
return -1
self.counter[key] += 1
return self.cache[key]
def put(self, key: int, value: int) -> None:
if len(self.cache) >= self.capacity and key not in self.cache:
mfu_key = self.counter.most_common(1)[0][0]
del self.cache[mfu_key]
del self.counter[mfu_key]
self.cache[key] = value
self.counter[key] += 1
MFU ์บ์ฌ๋ฅผ ํ์ด์ฌ์์ ๊ตฌํํด๋ณด์์ต๋๋ค.
get ํจ์๋ ํน์ ํค์ ๊ฐ์ ๋ฐํํ๊ณ ์ฌ์ฉ ๋น๋๋ฅผ ์ฆ๊ฐ์ํต๋๋ค.
put ํจ์๋ ์๋ก์ด ๊ฐ์ ์บ์์ ์ถ๊ฐํฉ๋๋ค.
์บ์์ ์ฉ๋์ด ์ด๊ณผ๋๋ฉด ๊ฐ์ฅ ๋น๋ฒํ๊ฒ ์ฌ์ฉ๋ ํญ๋ชฉ์ ์บ์์์ ์ ๊ฑฐํฉ๋๋ค.
Counter ํด๋์ค๋ ํญ๋ชฉ์ ์ฌ์ฉ ๋น๋๋ฅผ ์ถ์ ํ๋๋ฐ ์ฌ์ฉํฉ๋๋ค.
MFU Cache๋ ๋ฐ์ดํฐ์ ์ฌ์ฉ ํจํด์ด ์ผ์ ํ๊ณ ์์ธก ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ํนํ ํจ๊ณผ์ ์
๋๋ค.
์๋ฅผ ๋ค์ด, ํน์ ์น ํ์ด์ง๊ฐ ์์ฃผ ์กฐํ๋๊ฑฐ๋ ํน์ ๋ฐ์ดํฐ์
์ด ์์ฃผ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ๋ฑ์ด ์์ต๋๋ค.
LFU ์ MFU ์ ์ฐจ์ด
LFU(Least Frequently Used)์ MFU(Most Frequently Used)๋ ๋ ๋ค ์ฌ์ฉ ๋น๋์ ๊ธฐ๋ฐํ ์บ์ ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ด์ง๋ง, ์ด ๋ ์๊ณ ๋ฆฌ์ฆ์ ์บ์์์ ์ด๋ค ํญ๋ชฉ์ ์ ๊ฑฐํ ์ง ๊ฒฐ์ ํ๋ ๋ฐฉ์์์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
LFU (Least Frequently Used) ์บ์: LFU ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฅ ์ ๊ฒ ์ฌ์ฉ๋ ํญ๋ชฉ์ ์บ์์์ ์ ๊ฑฐํฉ๋๋ค.
์ฆ, ์บ์์ ์ ์ฅ๋ ํญ๋ชฉ ์ค์์ ์ฌ์ฉ ๋น๋๊ฐ ๊ฐ์ฅ ๋ฎ์ ํญ๋ชฉ์ ์ ๊ฑฐํ๋ ๋ฐฉ์์ ๋๋ค.
์ด ์๊ณ ๋ฆฌ์ฆ์ ์์ฃผ ์ฌ์ฉ๋๋ ํญ๋ชฉ์ด ๋ฏธ๋์๋ ๊ณ์ ์ฌ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ ๊ฐ์ ์ ๊ธฐ๋ฐ์ ๋๊ณ ์์ต๋๋ค.
๊ทธ๋ฌ๋, ํ ๋ฒ ๋ง์ด ์ฌ์ฉ๋ ํ๋ก๋ ์ฌ์ฉ๋์ง ์๋ ํญ๋ชฉ์ด ์บ์์ ๊ณ์ ๋จ์์์ ์ ์๋ ๋จ์ ์ด ์์ต๋๋ค.
MFU (Most Frequently Used) ์บ์: MFU ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋ ํญ๋ชฉ์ ์บ์์ ์ ์งํฉ๋๋ค.
์ฆ, ์บ์์ ์ ์ฅ๋ ํญ๋ชฉ ์ค์์ ์ฌ์ฉ ๋น๋๊ฐ ๊ฐ์ฅ ๋์ ํญ๋ชฉ์ ์ ๊ฑฐํ๋ ๋ฐฉ์์ ๋๋ค.
์ด๋ ๋น๋๊ฐ ๋์ ํญ๋ชฉ์ด ๋น๋๊ฐ ๋ฎ์ ํญ๋ชฉ๋ณด๋ค ๋ ์ค์ํ๋ค๋ ๊ฐ์ ์ ๊ธฐ๋ฐ์ ๋๊ณ ์์ต๋๋ค.
๊ทธ๋ฌ๋, ์ผ์์ ์ผ๋ก ๋น๋๊ฐ ๋์์ง ํญ๋ชฉ์ด ์บ์์ ์ค๋ ๋จ์์์ ์ ์๋ ๋จ์ ์ด ์์ต๋๋ค.
LFU์ MFU๋ ๋ชจ๋ ์ฌ์ฉ ๋น๋๋ฅผ ๊ณ ๋ คํ๋ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค๋ง, ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์บ์์์ ์ ๊ฑฐํ ์ง์ ๋ํ ๊ธฐ์ค์์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
'CS - Roadmap.sh > 3. Common Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
3.5 Graph - 3.5.1 Breadth First Search(BFS) (0) | 2024.01.28 |
---|---|
3.5 Graph & 3.6 Tree (0) | 2024.01.27 |
3.4. Cache - 3.4.2 LFU Cache (2) | 2024.01.26 |
3.4. Cache - 3.4.1 LRU Cache (2) | 2024.01.25 |
3.3. Search - 3.3.2 Linear Search (1) | 2024.01.24 |