Linux カーネル モジュールを作成していますが、入力に 2 つの整数を使用するハッシュ関数を考え出す必要があります。コードはカーネル空間で実行されるため、利用できる標準ライブラリはありません。
基本的に、次のようなハッシュ関数が必要です。
hash(a, b) = c
hash(b, a) = c
a と b の受け入れ可能な入力は、符号なし 32 ビット整数です。ハッシュ関数は、符号なし 64 ビット整数を返す必要があります。これらの値は二分探索木で使用されるため、衝突 (つまり、hash(a, b) = c および hash(d, f) = c も同様) は望ましくありません。検索の結果は、可能な結果のリンクされたリストであり、a と b が実際に比較される場所で反復されます。したがって、ある程度の衝突は許容されますが、衝突が少ないほど、必要な反復が少なくなり、実行が速くなります。
パフォーマンスも非常に重要です。このルックアップは、ファイアウォール アプリケーションを作成しているため、システムで受信したすべてのパケットに使用されます (整数は、実際にはパケットの送信元と送信先のアドレスです)。この関数は、既存のネットワーク セッションを検索するために使用されます。
お時間をいただきありがとうございます。