問題タブ [bijection]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - トリプル CRC-32 は、安全でない均一分散ハッシュを生成するための悪い (またはそうでない) アイデアですか?
288 ビットの入力があります (4 × 32 ビットの恒等関数出力と 10 × 16 ビットの整数で構成されます)。衝突をできるだけ少なくして、これを 96 ビットにハッシュする必要があります。目標は、確率論的衝突によるキー圧縮と言えます。
CRC は全単射ハッシュであるため、100% 均等な分布が保証されることは承知しています (私が理解しているとおり)。私の見解では、入力を介して 3 つの並列 CRC パスを実行できるはずであり、その結果、最適な分散の 96 ビットの非可逆ハッシュ (明らかに全単射ではない) が得られます。
ただし、CRC がそのようなアプリケーションに使用されていないことも認識しています。通常、MetroHash などのアルゴリズムが使用されます。
このアプリケーションにとって CRC が悪い (またはそうでない) 考えである理由を誰か説明してもらえますか?
注: これは、安全なものを意図したものではありません。
python - 1 対 1 の関係を表す
Python で 1 対 1 の関係を表現する必要が生じました。
最も簡単な方法は、タプルのリストを用意することです。[(thing_one, thing_two]
. しかし、これにより、O(N) の翻訳/削除/挿入時間が得られます。理想的ではありません。
one_to_two
次に、2 つの辞書、を使用できます
two_to_one
。これにより、O(1) の翻訳/挿入/削除が得られます。しかし、一方を他方なしで更新することを忘れがちで、この関係を表すために必要なメモリ量が 2 倍になります。これをクラスにラップして全単射を強制することはできますが、それでも情報の重複は解決されません。
このような関係を表す良い方法はありますか? できれば O(1) ops で、データの重複はありませんか? これを処理するPythonモジュールでしょうか?