Hash Table

Direct Address Table

ํ‚ค ๊ฐ’์„ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋กœ ํ™˜์‚ฐํ•ด์„œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ์ž๋ฃŒ์ด๋‹ค

Table์˜ ํฌ๊ธฐ๋Š” ์ „์ฒด ํ‚ค๋“ค์˜ ์ˆซ์ž์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ‚ค๋Š” ๋น„์›Œ๋‘ก๋‹ˆ๋‹ค.

์ข…๋ฅ˜์—ฐ์‚ฐ

SEARCH

Table[key]

INSERT

Table[key] = value

DELETE

Table[key] = NULL

์ „์ฒด ํ‚ค๋ฅผ ์˜ˆ์ธกํ•ด์•ผ ํ…Œ์ด๋ธ” ์‚ฌ์ด์ฆˆ๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ํ‚ค ๋Œ€๋น„ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค๊ฐ€ ์ ๋‹ค๋ฉด ๋น„์‹ค์šฉ์ ์ž…๋‹ˆ๋‹ค

Hash Table

Key๋ฅผ ํ•ด์‰ฌํ•˜์—ฌ ๋ฐฐ์—ด์— ๋„ฃ๊ณ  ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

โ€ป hash๋Š” ๋™์ผ ๋ฌธ์ž์—ด์— ํ•ญ์ƒ ๊ฐ™์€ ์‘๋‹ต์„ ํ•ฉ๋‹ˆ๋‹ค.
String hased(String raw) throws NoSuchAlgorithmException {
    MessageDigest digest = MessageDigest.getInstance("SHA-256");
    StringBuilder hexString = new StringBuilder();
    for (byte b : digest.digest(raw.getBytes(StandardCharsets.UTF_8))) {
        String hex = Integer.toHexString(0xff & b);
        if (hex.length() == 1) {
            hexString.append('0');
        }
        hexString.append(hex);
    }
    return hexString.toString();
}
hash keykey

bc72337a7af5 ...

firstKey

0b41b20f3772 ...

secondKey

4c44f766cb3c ...

thirdKey

ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด ์ธ๋ฑ์Šค์˜ ๋ฒ”์œ„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๊ฐ€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค

์ถฉ๋Œ

ํ•ด์‹œ ํ…Œ์ด๋ธ” ํฌ๊ธฐ๋ณด๋‹ค ํ‚ค์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๊ฐœ์˜ ํ‚ค๊ฐ€ ๋™์ผํ•œ slot์— ํ•ด์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ํ•ด์‹œ ์ถฉ๋Œ(hash collison)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ ์žฌ์œจ (Load Factor)

ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ ๋Œ€๋น„, ํ‚ค์˜ ๊ฐœ์ˆ˜

์ ์žฌ์œจ(a) = n/m (n: ํ‚ค์˜ ๊ฐœ์ˆ˜, m: ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ)

Direct address table์€ ํ‚ค ๊ฐ’์„ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ ์žฌ์œจ์ด 1 ์ดํ•˜์ด๋ฉฐ ์ ์žฌ์œจ์ด 1 ์ดˆ๊ณผ์ธ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๊ฒฝ์šฐ๋Š” ๋ฐ˜๋“œ์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๊ฐ€ ํ‚ค์˜ ๊ฐœ์ˆ˜๋ณด๋‹ค ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ์ ์žฌ์œจ์ด 1์ด ์ดˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ, ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ…Œ์ด๋ธ”์˜ ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ์—ฐ์‚ฐ์€ ๋ชจ๋‘ O(1)์— ์ˆ˜ํ–‰๋˜์ง€๋งŒ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์ถฉ๋Œ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ถฉ๋Œ์€ ํ•ด์‹œ ํ…Œ์ด๋ธ” ์—ฐ์‚ฐ ํšจ์œจ์„ ๋–จ์–ดํŠธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ๋Œ์„ ์ค„์ด๋Š” ๊ฒƒ์ด ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ ์ถฉ๋Œ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Last updated