도구스개발

카운트-민 스케치 크기 계산기

허용 오차 ε와 실패확률 δ를 넣으면 카운트-민 스케치의 폭·깊이와 메모리를 계산합니다. 오차가 항목 빈도가 아니라 스트림 전체 개수에 비례한다는 점을 개수로 환산해 보여 줍니다.

오차 한계가 «전체 개수 × ε»가 됩니다. 폭을 정하는 값입니다.

%

오차 한계를 못 지킬 확률입니다. 깊이를 정하는 값입니다.

한 항목이 나올 수 있는 최대 횟수를 담을 수 있어야 합니다. 넘치면 값이 뒤집힙니다.

모든 항목의 빈도를 합한 수입니다. 종류 수가 아닙니다.

이 항목에 대한 상대오차를 보려는 값입니다. 0으로 두면 계산하지 않습니다.

필요한 카운터 배열

2,719 × 5

13,595칸 · 53.1KB · 해시 5개

폭 w = ⌈e/ε⌉2,719칸
깊이 d = ⌈ln(1/δ)⌉5행
실제로 보장되는 ε0.1%
실제 실패확률0.674%
오차 한계 (ε·N)+99,974회
이 항목의 상대오차 한계10%
오차가 «전체 개수»에 비례합니다 — 내 빈도가 아니라. 보장은 «추정값 ≤ 진짜 빈도 + ε·N»이고, N은 스트림 전체 개수입니다. 지금 설정에서는 어떤 항목이든 최대 99,974회까지 부풀려 나올 수 있습니다. 그래서 빈도가 이 값보다 훨씬 큰 항목에만 뜻이 있습니다 — 대략 999,736회는 넘어야 상대오차가 10% 안으로 들어옵니다. 카운트-민 스케치를 «자주 나오는 것 찾기»에만 쓰는 이유입니다.
절대 과소평가하지 않습니다 — 과대평가만 합니다. 칸을 여러 항목이 나눠 쓰므로 남의 몫이 섞여 들어오기만 하고 빠져나가지는 않습니다. 그래서 모든 행의 값이 진짜 빈도 이상이고, 그중 «가장 작은 것»을 답으로 삼는 것입니다. 추정값이 0이면 그 항목은 한 번도 안 나온 것이 확실합니다. 반대로 큰 값이 나왔을 때 그것이 진짜인지는 알 수 없습니다.
오차계수 ε칸 수메모리오차 한계
1%2721,3605.31KB+999,368
0.1%2,71913,59553.1KB+99,974
0.01%27,183135,915531KB+10,000
0.001%271,8291,359,1455.18MB+1,000
정확도는 비싸고 신뢰도는 쌉니다. 폭 w = ⌈e/ε⌉는 1/ε에 비례하므로 오차를 10분의 1로 줄이면 메모리가 열 배 듭니다. 반면 깊이 d = ⌈ln(1/δ)⌉는 로그라서, 실패확률을 δ 1%에서 100분의 1로 낮춰도 5행에서 10행으로만 늘어납니다. 두 손잡이가 전혀 다른 값을 하는 셈이라, 메모리가 모자라면 δ가 아니라 ε를 손대야 합니다.
해시가 «있는지»만 보는 블룸 필터와는 목적이 다릅니다. 블룸 필터는 있는지 없는지만 답하고 빈도는 세지 않습니다. 카운트-민 스케치는 빈도를 세지만 그 대가로 오차가 붙습니다. 둘 다 «한쪽으로만 틀린다»는 성질을 공유합니다 — 블룸 필터는 없는 것을 있다고만 하고, 카운트-민 스케치는 실제보다 크게만 답합니다.
카운터 크기 4바이트는 한 칸의 최댓값을 정합니다. 칸에는 그 칸을 함께 쓰는 모든 항목의 몫이 쌓이므로 한 항목의 최대 빈도보다 넉넉해야 하며, 넘치면 값이 0으로 되돌아 추정이 통째로 망가집니다. 보수적으로 잡으려면 4바이트를 씁니다. 항목을 빼는(감소) 연산이 섞이면 «최솟값이 진짜 빈도 이상»이라는 보장 자체가 깨져 이 식이 성립하지 않습니다.

사용 방법

  1. 1허용 오차계수 ε를 고릅니다. 오차 한계가 «스트림 전체 개수 × ε»가 됩니다.
  2. 2실패확률 δ를 고릅니다. 그 오차 한계를 못 지킬 확률입니다.
  3. 3스트림 전체 개수 N을 넣으면 오차 한계가 «몇 회»인지로 환산돼 나옵니다.
  4. 4관심 항목의 실제 빈도를 넣으면 그 항목에 대한 상대오차 한계를 확인할 수 있습니다.

자주 묻는 질문

폭 w = ⌈e/ε⌉, 깊이 d = ⌈ln(1/δ)⌉입니다. ε는 허용 오차계수, δ는 그 오차를 못 지킬 확률입니다. ε 0.1%·δ 1%면 폭 2,719 × 깊이 5 = 13,595칸이고, 카운터를 4바이트로 두면 53KB 남짓입니다. Cormode–Muthukrishnan(2005)의 원 논문 분석에서 나온 식입니다.

추정값 ≤ 진짜 빈도 + ε·N이며, N은 스트림 전체 개수입니다. 오차 한계가 그 항목의 빈도가 아니라 «전체»에 비례한다는 것이 핵심입니다. N이 1억이고 ε이 0.1%면 어떤 항목이든 최대 10만회까지 부풀 수 있어, 100만회 나온 항목에는 10% 오차지만 500회 나온 항목에는 200배 오차가 됩니다.

사실상 셀 수 없습니다. 오차 한계 ε·N이 그 항목의 빈도보다 크거나 비슷하면 추정값이 실제의 몇 배로 나오기 때문입니다. 그래서 카운트-민 스케치는 자주 나오는 항목(헤비 히터)을 찾는 데만 씁니다. 상대오차를 10% 안으로 두려면 빈도가 오차 한계의 열 배는 넘어야 합니다.

없습니다. 한 칸을 여러 항목이 나눠 쓰므로 남의 몫이 섞여 들어오기만 하고 빠져나가지는 않아, 모든 행의 값이 진짜 빈도 이상입니다. 그중 가장 작은 값을 답으로 삼기 때문에 과대평가만 하고 과소평가는 하지 않습니다. 추정값이 0이면 그 항목은 확실히 한 번도 나오지 않았습니다.

블룸 필터는 있는지 없는지만 답하고, 카운트-민 스케치는 몇 번 나왔는지를 답합니다. 대신 빈도에는 오차가 붙습니다. 두 자료구조 모두 한쪽으로만 틀린다는 성질을 공유합니다 — 블룸 필터는 없는 것을 있다고만 하고, 카운트-민 스케치는 실제보다 크게만 답합니다.

전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 보장은 확률적입니다. 오차 한계 ε·N을 δ 확률로는 넘길 수 있으며, 여기 나오는 값은 한계이지 실제 오차의 기댓값이 아닙니다. 실제 오차는 대개 이보다 훨씬 작습니다.
  • 해시 함수 d개가 서로 독립이라고 가정합니다. 실제로는 pairwise independent 계열의 값싼 해시를 쓰며, 원 논문의 분석도 그 가정에서 성립합니다.
  • 카운터가 넘치면 값이 되돌아 추정이 통째로 망가집니다. 한 칸에는 그 칸을 함께 쓰는 여러 항목의 몫이 쌓이므로, 한 항목의 최대 빈도보다 넉넉한 폭을 잡아야 합니다.
  • 빼는(감소) 연산이 섞이면 «모든 칸이 진짜 빈도 이상»이라는 전제가 깨져 이 오차 보장이 성립하지 않습니다. 그때는 카운트 스케치(Count Sketch) 같은 다른 구조를 씁니다.
  • 메모리 표기는 1024진법입니다(1KB = 1,024바이트). 실제 구현에서는 해시 시드와 부대 자료가 조금 더 듭니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.