非ハッシュ化オブジェクトの順序なしリストの効率的な比較
順序なしリスト (セットではない) は、それらが等しいかどうかを比較するときに課題を引き起こします。要素は任意の順序で指定できます。この困難は、ユーザー定義クラスのインスタンスなど、ハッシュ不可能なオブジェクトを扱う場合にさらに顕著になります。
このような比較を容易にするために、時間計算量を変えたさまざまなアプローチが存在します。
O(n)
ハッシュ可能なオブジェクトの場合、カウンター
def compare(s, t): return Counter(s) == Counter(t)
O(n log n)
オブジェクトが順序付け可能な場合、sorted は適切な代替案を提供します。
def compare(s, t): return sorted(s) == sorted(t)
O(n * n)
ハッシュ可能性も順序付け可能性も利用できない場合は、等価性を使用した単純なアプローチを採用できます。
def compare(s, t): t = list(t) # make a mutable copy try: for elem in s: t.remove(elem) except ValueError: return False return not t
オブジェクトの性質に基づいて適切なソリューションを選択することで、要素がハッシュ可能または順序付け可能でない場合でも、順序なしリストを効率的に比較できます。
以上がハッシュ化不可能なオブジェクトの順序なしリストを効率的に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。