본문 바로가기
SWE/코테

Hashmap algorithm

by S나라라2 2022. 3. 28.
반응형

Hash Function

best O(1), worst O(n)

Load Factor : n/table size , smaller smaller is better

Seperate chaining

Open Addressing - Python Dictionary -> rehasing

 

ss ListNode:
    def __init__(self, key=None, value=None):
        self.key = key
        self.value = value
        self.next = None
        
class MyHashMap:
    def __init__(self):
        self.size = 1000
        self.table = collections.defaultdict(ListNode)
        
    def put(self, key:int, value: int) -> None:
        index = key%self.size
        #인덱스에 노드가 없다면 삽입 후 종료
        if self.table[index].value is None:
            self.table[index] = ListNode(key, value)
            return
        
        #인덱스에 노드가 존재하는 경우 연결리스트 처리
        p = self.table[index]
        while p :
            #이미 존재하는 경우 업데이트하고 빠져나간다
            if p.key == key:
                p.value = value
                return
            if p.next is None:
                break
            p = p.next
        p = ListNode(key, value)
        
        def get(self, key:int) -> int:
            index = key%self.size
            if self.table[index] is None:
                return -1
                
            #노드가 존재할 때까지 일치하는 키 탐색
            p = self.table[index]
            while p:
                if p.key == key:
                    return p.value
                p = p.next
            return -1
        
        def remove(self, key: int) -> None:
            index = key%self.size
            if self.table[index].value is None:
                return
            
            #인덱스의 첫 번째 노드일 때 삭제처리
            p = self.table[index]
            if p.key == key:
                self.table[index] = ListNode() if p.next is None else p.next
            
            # 연결 리스트 노드 삭제
            prev = p
            while p:
                if p.key == key:
                    prev.next = p.next
                    return
                prev, p = p, p.next

출처 : https://velog.io/@injoon2019/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%ED%95%B4%EC%8B%9C-%ED%85%8C%EC%9D%B4%EB%B8%94

 

반응형