これは、ユニオンの計算に要約されます。最新の言語のほとんどは、これを支援するためにデータ型を実装しています。Python には辞書とセットがあり、C++ には STL マップとセットなどがあります。提供されたデータ型の方がはるかに効率的であるため、共用体の手動計算は避けたいと思います。各トピックは一連のサブトピックと考えることができ、これらのサブトピックの結合により、共通する (つまり、各トピック内の) トピックの数が決まります。
各項目 (トピック) 間のスコアを見つけたい場合、および n トピックを使用しない場合、n(n - 1) / 2 スコアを計算します。トピックの数が増えると、計算されるスコアの数が急速に増えることに注意してください。
スコアの計算に関しては、集合 A と集合 B の間の和集合が見つかります。この和集合は次のいずれかです。
- すべての項目を含む (A と B がまったく同じセットを持っていたことを意味します)。10のスコア
- 1 セットのすべてを含む (B が A のすべてを含む、またはその逆を意味する) 1 つのセットに固有のアイテムの数に応じたスコア
- A または B のいずれかの最小サイズ未満が含まれています
したがって、単純な計算は次のようになります。
(union.length / max(A.length, B.length)) * 10