해시(Hash)

참고

https://media.vlpt.us/images/corone_hi/post/92068288-43bf-431a-8b63-db8087001a3a/image.png


Lee → 해싱함수 → 5
Kim → 해싱함수 → 3
Park → 해싱함수 → 2
...
Chun → 해싱함수 → 5 // Lee와 해싱값 충돌

충돌 문제 해결

해시 구현

<해시 테이블>


hash_table = [0 for i in range(8)]

def hash_func(data):
    return hash(data) % 8

def set_data(data,value):
    key = hash_func(data)
    hash_table[key] = value

def get_data(data):
    key = hash_func(data)
    return hash_table[key]

<체이닝>


hash_table = [0 for i in range(8)]

def hash_func(key):
    return key % 8

def set_data(data,value):
    hash_idx = hash(data)
    hash_key = hash_func(hash_idx)
    if hash_table[hash_key] != 0:
        for i in range(len(hash_table[hash_key])):
            if hash_table[hash_key][i][0] == hash_idx:
                hash_table[hash_key][i][1] = value
                return True
        hash_table[hash_key].append([hash_idx,value])
        return True
    else:
        hash_table[hash_key] = [[hash_idx,value]]
        return True

def get_data(data):
    hash_idx = hash(data)
    hash_key = hash_func(hash_idx)
    if hash_table[hash_key]:
        for value in hash_table[hash_key]:
            if value[0] == hash_idx:
                print(value[1])
                return value[1]
        print("None")
        return None
    else:
        print("None")
        return None