ご存知のとおり、HashSet は Java の有名なクラスです。 HashSet は、ハッシュ テーブルを使用して値を保存するために使用されます。このチュートリアルでは、Python の HashSet について説明します。また、Python で HashSet を設計する方法についても学びます。
HashSet はプログラミングにおける基本的なデータ構造であり、Java などの言語でよく見られます。これは Java Collections Framework に属し、set インターフェイスの実装として機能します。 HashSet の特徴は、特定の要素の存在を効率的にチェックし、セット内での一意性を確保できる方法で要素を保存できることです。リストなどの構造とは異なり、HashSet は要素間の特定の順序を維持しません。
HashSet の重要な特徴の 1 つは、一意性が保証されていることです。要素の重複は許可されません。要素の追加、削除、存在の確認などの操作は通常、一定時間の平均パフォーマンスが得られるため、このようなタスクには効率的な選択肢となります。ただし、HashSet 内の要素の順序は保証されていないことに注意することが重要です。
主な特徴:
独自性: HashSet では要素の重複は許可されません。これは、equals() メソッドを使用して重複をチェックし、セット内のすべての要素が一意であることを確認します。
注文なし: HashSet 内の要素は、特定の順序で格納されるわけではありません。要素の順序を維持する必要がある場合は、挿入順序を維持する LinkedHashSet の使用を検討してください。
基礎となるデータ構造: 内部的には、HashSet はハッシュ テーブルを使用して要素を保存します。これにより、追加、削除、包含などの基本操作の一定時間の平均複雑さが考慮されます。
ヌル要素: HashSet では 1 つの null 要素が許可されます。重複した null 要素を追加しようとすると、既存の要素が置き換えられます。
Linuxコマンド
導入
ハッシュ テーブル ライブラリを使用せずに HashSet を設計できます。以下は複数の異なる関数です -
追加(x) - add(x) メソッドは主に値 x を HashSet に挿入するために使用されます。
含む(x) - contains(x) メソッドは主に、値 x が HashSet に存在するかどうかを確認するために使用されます。
削除(x) - Remove(x) メソッドは主に HashSet から x を削除するために使用されます。 HashSet に値がない場合は何も行われません。
以下の例でこれらのメソッドを理解しましょう。
ラテックス部分導関数
まず、HashSet を初期化し、add(1) 関数を呼び出します。ハッシュセットに 1 を追加します。 add(3) を呼び出して 3 を加算してから、contains(1) を呼び出します。ハッシュセットに 1 が存在するかどうかを確認します。ここで、contains(2)、add(2)、contains(2)、remove(2)、contains(2) を呼び出します。
出力は、それぞれ、1 が存在する場合は true、2 が存在しない場合は false、2 が存在する場合は true、2 が存在しない場合は false として返されます。
Python での HashSet の基本操作
次のメソッドを使用して、HashSet でいくつかの基本的な操作を実行できます。これらの方法を理解しましょう。
HashSet に新しい値を追加する
以下の例では、add() 関数を使用してハッシュ セットに値を追加します。 add() 関数は値を一度に 1 つずつ追加します。次のコードを見てみましょう。
例 -
from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6)
出力:
Adding value: 2 Adding value: 7 Adding value: 6
HashSet 内の値の削除
既存の値は、remove() 関数を使用して削除できます。次のコードを理解してみましょう。
例 -
from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6) obj.remove(7) obj.remove(6)
出力:
Adding value: 2 Adding value: 7 Adding value: 6 Removed value: 7 Removed value: 6
HashSet に値が存在するかどうかを確認する
この例では、特定の値が存在するかどうか、または を含む() 関数。次のコードを理解してみましょう。
例 -
from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6) obj.contains(2)
出力:
Adding value: 2 Adding value: 7 Adding value: 6 It contains: 2
Python の HashSet のアルゴリズム
最初のステップでは、HashList と呼ばれる 1 つのデータ構造を定義します。次に、空のリストを次のように初期化します。 新しいリスト 。次に、見つかった関数にブール値 False が格納される update() 関数を定義します。ここで、各インデックス I と K に対して for ループを使用します。キーが 'k' と同じ場合、 新しいリスト[i]=k True に設定された値が見つかりました。値が見つからない場合、値はリストの最後に挿入されます。
次のステップでは、ループに使用する get() 関数を定義します。k の値がキーと同じ場合、出力は True になります。それ以外の場合は False。キーが「k」と同じ場合は、リストから値を削除します。 新しいリスト。同じプロセスがremove()関数にも適用されます。
次に、Main クラスの HashSet を作成します。このクラスは、key_space 値 = 2096 の初期化関数を宣言します。hash_table には、サイズの new_list タイプのオブジェクトのリストが含まれます。 キースペース 。次に、add() 関数を作成します。 ハッシュキー = キー%キースペース そして hash_table[hash_key] のキーを更新します。その後、 削除機能 , hash_key = key % key_space を作成し、hash_table[hash_key] のキーを削除します。その後、 機能が含まれています 、 その中で
hash_key = key % key_space で、hash_table[hash_key]のキーを取得します。
段階的な実装アルゴリズムを見てみましょう。
インドの女優ラニ・ムケルジ
アルゴリズム -
- HashSetというデータ構造を作成し、以下のように初期化します。
- 新しいリスト = []
- 関数 update() を定義します。これには鍵がかかります
- 見つかりました:= 偽
- new_list 内の各インデックス i とキー k に対して、次のようにします。
- キーが k と同じ場合、
- new_list[i]:= キー
- 見つかりました:= 真
- ループから出てくる
- 誤りが見つかった場合は、
- new_list の最後にキーを挿入します
- 関数 get() を定義します。これには鍵がかかります
- new_list の各 k に対して、次を実行します。
- k がキーと同じ場合、
- Trueを返す
- Falseを返す
- 関数remove()を定義します。これには鍵がかかります
- new_list 内の各インデックス i とキー k に対して、次のようにします。
- キーが k と同じ場合、
- 新しいリスト[i]を削除
- 次にカスタム hashSet を作成します。以下のようないくつかの方法があります
- これを次のように初期化します -
- キースペース := 2096
- hash_table:= サイズ key_space のバケット タイプ オブジェクトのリスト
- 関数 add() を定義します。これには鍵がかかります
- hash_key:= キー mod key_space
- hash_table[hash_key] の update(key) を呼び出す
- 関数remove()を定義します。これには鍵がかかります
- hash_key:= keymodkey_space
- hash_table[hash_key] からキーを削除します
- contains() 関数を定義します。これには鍵がかかります
- hash_key:= keymodkey_space
- hash_table[hash_key] の get(key) を返す
Python での HashSet の実装
ここでは上記のアルゴリズムを実装してPythonプログラムを作成します。 HashSet と CreateHashset の 2 つのクラスを定義します。以下のコードを見てみましょう。
コード -
# Here, we are Designing the HashSet in python # Here, we are checking the values and will return the output class class verifyvalues: # Here, we are initialization function which has list new_list def __init__(self): self.new_list=[] # Here, we have the function to update values def update(self, key): found=False for i,k in enumerate(self.new_list): if key==k: self.new_list[i]=key found=True break if not found: self.new_list.append(key) # Here, we have function to get values def get(self, key): for k in self.new_list: if k==key: return True return False # Here, we have function to remove values def remove(self, key): for i,k in enumerate(self.new_list): if key==k: del self.new_list[i] # Here, we have defined a class as HashSet class HashSet: # Here, we have defined an Initialization function def __init__(self): self.key_space = 2096 self.hash_table=[verifyvalues() for i in range(self.key_space)] def hash_values(self, key): hash_key=key%self.key_space return hash_key # Here, we have also defined an add function def add(self, key): self.hash_table[self.hash_values(key)].update(key) # Here, we have also defined a remove function def remove(self, key): self.hash_table[self.hash_values(key)].remove(key) # Here, we have defined the contains function def contains(self, key): return self.hash_table[self.hash_values(key)].get(key) def display(self): ls=[] for i in self.hash_table: if len(i.new_list)!=0:ls.append(i.new_list[0]) print(ls) ob = HashSet() print(ob.hash_values(10)) print('Add 10') ob.add(10) print(ob.hash_values(6)) print('Add 6 ') ob.add(6) print(ob.hash_values(5)) print('Add 5 ') ob.add(5) print('Contains 10 : ',ob.contains(10)) print('Contains 3: ',ob.contains(3)) print('Contains 8 : ',ob.contains(9))
出力:
10 Add 10 6 Add 6 5 Add 5 Contains 10 : True Contains 3: False Contains 8 : False 2 Add 2 3 Add 3 Contains 2 : True Remove 2 Contains 2 : False Contains 3 : True [3, 5, 6, 10]
説明: