๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[Coding Interview University] ํด์ํ ์ด๋ธ : ์ด๋ก ๋ฐ ๊ตฌํ ๋ณธ๋ฌธ
[Coding Interview University] ํด์ํ ์ด๋ธ : ์ด๋ก ๋ฐ ๊ตฌํ
์ง์ง์ํ์นด 2023. 7. 5. 01:25<๋ณธ ๋ธ๋ก๊ทธ๋ ์ฝ๋ฉ์ธํฐ๋ทฐ๋ํ ๋์ Git๊ณผ ์์ ์ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ๋ฉฐ ์์ฑํ์์ต๋๋ค :-)>
๐ซง ํด์ํ ์ด๋ธ (hash table)
: ํจ์จ์ ์ธ ํ์์ ์ํ ์๋ฃ๊ตฌ์กฐ๋ก์, key๋ฅผ value ์ ๋์์ํด
: ์ต์ ์ ๊ฒฝ์ฐ O(n) // n์ ํค์ ๊ฐ์
: ์ต์ ์ ๊ฒฝ์ฐ O(1)
๐ซง ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ํด์ ์ฝ๋ ํจ์๋ก ๊ตฌํ
1) ํค์ ํด์ ์ฝ๋ ๊ณ์ฐ
- ํค์ ์๋ฃํ์ ๋ณดํต int or long
- ํค์ ๊ฐ์ ๋ฌดํ (int ๋ ์ ํ)
2) hash(key) % array_length ๋ฐฉ์์ผ๋ก ํด์ ์ฝ๋ ์ด์ฉํด ๋ฐฐ์ด์ ์ธ๋ฑ์ค ๊ตฌํจ
- ์๋ก ๋ค๋ฅธ ๋ ๊ฐ์ ํด์ ์ฝ๋๊ฐ ๊ฐ์ ์ธ๋ฑ์ค ๊ฐ๋ฆฌํฌ ์ ์์
3) ๋ฐฐ์ด์ ๊ฐ ์ธ๋ฑ์ค์๋ ํค์ ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ง ์ฐ๊ฒฐ๋ฆฌ์คํธ ์กด์ฌ
- ํค์ ๊ฐ์ ํด๋น ์ธ๋ฑ์ค์ ์ ์ฅ (๋ฐ๋์ ์ฐ๊ฒฐ๋ฆฌ์คํธ ์ด์ฉ!)
- ๐ฅ ์ถฉ๋ : ์๋ก ๋ค๋ฅธ ๋ ๊ฐ์ ํค๊ฐ ๊ฐ์ ์ฝ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฑฐ๋, ์๋ก ๋ค๋ฅธ ๋ ๊ฐ์ ํด์ ์ฝ๋๊ฐ ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒฝ์ฐ
⇒ ํค์ ์์ํ๊ธฐ ์ํด์ ์๋ฅผ ๋ฐ๋ณต!
⇒ ์ฃผ์ด์ง ํค๋ก๋ถํฐ ํด์ ์ฝ๋๋ฅผ ๊ณ์ฐ, ํด์ ์ฝ๋๋ฅผ ์ด์ฉํด ์ธ๋ฑ์ค ๊ณ์ฐ, ํด๋น ํค์ ์์ํ๋ ๊ฐ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์์ ํ์
๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ (balanced binary search tree)
: ํ์ ์๊ฐ์ O(logN)
: ํฌ๊ธฐ๊ฐ ํฐ ๋ฐฐ์ด์ ๋ฏธ๋ฆฌ ํ ๋นํด ๋์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ ์ ์ ๊ณต๊ฐ ์ฌ์ฉ ๊ฐ๋ฅ
: ํค์ ์งํฉ์ ํน์ ์์๋๋ก ์ ๊ทผ ๊ฐ๋ฅ
๐ซง ํด์ํ ์ด๋ธ ๊ตฌํํ๊ธฐ
Linear probing์ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด๋ก ๊ตฌํํด๋ณด๊ธฐ
class Node:
def __init__(self, key, value, next):
self.key = key
self.value = value
self.next = next
โก๏ธ hash(k, m) - m์ ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ
// map์ ํฌ๊ธฐ: map.size()
map.size // 4
map.length // undefined
โก๏ธ add(key, value) - ํค๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ค๋ฉด, ๊ฐ์ ๊ฐฑ์ ํ๋ค.
Hashtable ht = new Hashtable();
ht.Add("irina", "Irina SP");
ht.Add("tom", "Tom Cr");
if (ht.Contains("tom"))
{
Console.WriteLine(ht["tom"]);
}
โก๏ธ exists(key)
map์ ํด๋น key์ value ์กด์ฌ ์ฌ๋ถ: has(key)
map.has(str); // true
map.has(obj); // true
map.has('none'); // falsemap์ ํฌ๊ธฐ: map.size()
map.size // 4
map.length // undefinedmap์ ํฌ๊ธฐ: map.size()
map.size // 4
map.length // undefined
โก๏ธ get(key)
- Map ๊ฐ์ฒด๋ key-value๋ก ์ด๋ฃจ์ด์ง ํด์ํ
์ด๋ธ
- set(): key-value pair๋ฅผ map์ ์ฝ์
- get(): key๊ฐ์ผ๋ก value๋ฅผ ์ฐพ์ ๋ฆฌํด
- key์ ๋ค์ด๊ฐ ์ ์๋ ์๋ฃํ์ number, string, function, object, NaN ๋ฑ์ด ๊ฐ๋ฅ
let number = 0; let str = 'string'; let obj = { a: 1 }; let func = () => { console.log('func'); }; map.set(number, 4); //key์ number ๊ฐ๋ฅ map.set(str, 1); // key์ string ๊ฐ๋ฅ map.set(obj, 2); //key์ object ๊ฐ๋ฅ map.set(func, 3); // key์ ํจ์ ๊ฐ๋ฅ map.set(number, 0); // ๋ฎ์ด์ฐ๊ธฐ ๊ฐ๋ฅ console.log(map); // Map(4) {0 => 0, "string" => 1, {…} => 2, ƒunc => 3} map.get(str); // 1 map.get(obj); // 2 map.get('none'); // undefined map.get({ a: 1 }); // undefined, obj !== { a: 1 }
โก๏ธ remove(key)
using System;
using System.Collections;
public class SamplesHashtable
{
public static void Main()
{
// Creates and initializes a new Hashtable.
var myHT = new Hashtable();
myHT.Add("1a", "The");
myHT.Add("1b", "quick");
// Removes the element with the key "3b".
myHT.Remove("3b");
}
}
'๐ฉโ๐ป ์ปดํจํฐ ๊ตฌ์กฐ > Computer Science' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Coding Interview University] ๋นํธ ์ฐ์ฐ : ์ด๋ก ๋ฐ ๊ตฌํ (0) | 2023.07.11 |
---|---|
[Coding Interview University] ์ด์งํ์ : ์ด๋ก ๋ฐ ๊ตฌํ (0) | 2023.07.07 |
[Coding Interview University] ํ : ์ด๋ก ๋ฐ ๊ตฌํ (0) | 2023.07.03 |
[Coding Interview University] ์คํ : ์ด๋ก ๋ฐ ๊ตฌํ (0) | 2023.07.01 |
[Coding Interview University] ๋งํฌ๋ ๋ฆฌ์คํธ : ์ด๋ก ๋ฐ ๊ตฌํ (0) | 2023.06.29 |