「セット」に小さな整数しか含まれていない場合、それらはカウントの配列で表すことができます...たとえば、{5,2,3,5,6} は
index 0 1 2 3 4 5 6
count 0 0 1 1 0 2 1
そのようなセットの交点は、カウントの最小値です。
index 0 1 2 3 4 5 6
-------------
{0,5,5,3,4} 1 0 0 1 1 2 0
{5,2,3,5,6} 0 0 1 1 0 2 1
{1,3,5,5,6} 0 1 0 1 0 2 1
min 0 0 0 1 0 2 0 = {3,5,5}
値が短整数ではなく、数が少ない場合は、値の配列を保持します。これは、値と配列のインデックスである短整数の間のマップとして機能します。
値が多すぎて各セットのカウントの配列を持つのがコストがかかりすぎる場合は、値からカウントへのマップを使用して、値の配列とともに各「セット」を表します...次に、配列を反復処理して生成します各値、マップを反復処理してカウントを取得し、最小値を計算します。このためには、ハッシュ テーブルまたはバイナリ ツリー ライブラリを使用してマップを実装する必要があります... または、当然のことながら、そのようなコレクション型を提供する C よりも多くの最新の言語のいずれかを使用します。