/ PROGRAMING, PYTHON

Hash example 2

해시 Hash 예시 2

기본적으로 ChatGPT를 이용하여 틀을 잡고 만든 것

함수

  • 해시 테이블 생성
    • 크기가 100인 배열 초기화 __init__
  • 해시 코드 생성 hash_function
    • 각 문자의 아스키 코드 값을 합산
  • 삽입 함수
    • 해시테이블의 주어진 해시 코드값을 인덱스로 연결리스트를 이용하여 삽입
  • 검색 함수
    • 해시테이블에서 주어진 해시 코드값으로 인덱스로 연결리스트를 타고 주어진 키 값을 비교하면서 검색
  • 삭제 함수
    • 검색함수와 과정은 비슷하나 enumerate를 사용하여 index도 같이 구해서 del 로 편하게 삭제
class HashTable:
    # 해시테이블 초기화
    def __init__(self):
        self.max_size = 100
        self.table = [ [] for _ in range(self.max_size) ]
    # 해시코드 생성
    # 기준 : 아스키코드 합산
    def get_hash_key(self, key):
        hash_key = 0
        for char in key:
            hash_key += ord(char)
        return hash_key % self.max_size
    # 삽입 함수
    # 연결리스트로 해시테블에 해당 인덱스에 추가 
    def add(self, key, value):
        hash_key = self.get_hash_key(key)
        for index, item in enumerate(self.table[hash_key]):
            if item[0] == key:
                self.table[hash_key][index] = (key,value)
                return
        self.table[hash_key].append((key,value))
        
    # 검색 함수
    # 해시테이블에서 키값의 해시코드를 찾아서 출력하거나 없으면 None 출력
    def get(self,key):
        hash_key = self.get_hash_key(key)
        for item in self.table[hash_key]:
            if item[0] == key:
                return item[1]
        return None
    # 삭제 함수
    def delete(self,key):
        hash_key = self.get_hash_key(key)
        for index, item in enumerate(self.table[hash_key]):
            if item[0] == key:
                del self.table[hash_key][index]
                return
# 예시
# 해시테이블 생성
hash_table = HashTable()

# 삽입
print("(apple, 10) 삽입")
hash_table.add('apple', 10)
print("(banana, 20) 삽입")
hash_table.add('banana', 20)
print("(orange, 30) 삽입")
hash_table.add('orange', 30)
print()

# 검색
print("apple 검색 :",hash_table.get('apple')) # 10
print("grape 검색 :",hash_table.get('grape')) # None
print()

# 삭제
print("apple 삭제")
hash_table.delete("apple") # apple 삭제
print()
# 검색
print("apple 검색 :",hash_table.get('apple'))
(apple, 10) 삽입
(banana, 20) 삽입
(orange, 30) 삽입

apple 검색 : 10
grape 검색 : None

apple 삭제

apple 검색 : None