ハッシュ関数とハッシュテーブルは、データの迅速な検索や保存を実現するための非常に重要なデータ構造とアルゴリズムです。この教材では、ハッシュ関数とハッシュテーブルの基本的な概念を理解し、Pythonでの実装を通じてその動作を学びます。
ハッシュ関数は、入力データ(通常は文字列や数値)を固定長のハッシュ値に変換する関数です。このハッシュ値は、元のデータの特徴を反映しており、異なるデータが同じハッシュ値を生成する可能性(ハッシュ衝突)があります。
ハッシュテーブルは、データを効率的に格納・検索するためのデータ構造です。データをキーと値のペアとして格納し、キーを使って値を迅速に取得します。ハッシュテーブルは、内部的に配列を使用し、ハッシュ関数を使ってキーをインデックスに変換します。
以下は、ハッシュ関数とハッシュテーブルの基本的な実装の例です。
class HashTable:
def __init__(self, size=10):
self.size = size
self.table = [None] * size
def _hash(self, key):
return hash(key) % self.size
def insert(self, key, value):
index = self._hash(key)
self.table[index] = value
def search(self, key):
index = self._hash(key)
return self.table[index]
def delete(self, key):
index = self._hash(key)
self.table[index] = None
# 実装をテスト
if __name__ == "__main__":
hash_table = HashTable()
# データの挿入
hash_table.insert("apple", 1)
hash_table.insert("banana", 2)
hash_table.insert("orange", 3)
# データの検索
print("apple:", hash_table.search("apple")) # 出力: apple: 1
print("banana:", hash_table.search("banana")) # 出力: banana: 2
# データの削除
hash_table.delete("apple")
print("apple:", hash_table.search("apple")) # 出力: apple: None
クラス定義: HashTable
クラスを定義し、コンストラクタでハッシュテーブルのサイズを設定します。self.table
は、指定したサイズの空のリストを作成します。
ハッシュ関数: _hash
メソッドを定義し、Pythonの組み込み関数hash()
を使用してキーをハッシュ化し、テーブルのサイズで剰余を取ることでインデックスを計算します。
挿入メソッド: insert
メソッドは、指定されたキーのハッシュ値を計算し、そのインデックスに値を格納します。
検索メソッド: search
メソッドは、指定されたキーのハッシュ値を計算し、そのインデックスから値を取得します。
削除メソッド: delete
メソッドは、指定されたキーのハッシュ値を計算し、そのインデックスの値をNone
に設定します。
テスト: メインブロックでハッシュテーブルを作成し、いくつかのデータを挿入、検索、削除を行います。
このように、ハッシュ関数とハッシュテーブルを使用することで、効率的なデータの格納と検索が可能になります。次回は、ハッシュ衝突の解決法に焦点を当てていきます。