コメントでの回答に基づいて、ツリーの各レベルで質問を表し、そのレベルのノードのブランチ/サブノードで回答を表すこともできます。btillyが述べたように、これは技術的にはトライになります。
より効率的な(必ずしもスペース単位ではありませんが)ソリューションには、ハッシュテーブルと、回答の選択肢に基づいてハッシュを作成するハッシュ関数を使用することが含まれる可能性がありますが、要件とドンを考えると、トライが最善の方法だと思います't-cares。
ああ、そうです。回答の選択肢がどのように配置されているかに応じて、いくつかのレベルのサブブランチ/ツリーがない特定のブランチに一連の回答がある可能性があります。このような場合、これらの単一の分岐セクションを個々のノードに折りたたむ可能性があります。http://en.wikipedia.org/wiki/Trie#Compressing_triesもいくつかのヒントを提供する場合があります。
私の最初の答えに対するあなたの回答に基づいて、ここに私の考えがあります:
質問とその回答の選択肢のノードの配列を保持します。各回答の選択肢はハッシュテーブル(または使用したいデータ構造)に関連付けられています。Pythonを頻繁に使用し、 Pythonのset
データ構造(ハッシュテーブルの一種として実装されます)には、各企業へのポインター、または特定の質問に対する特定の回答が最初に企業を示す場合は単一の企業へのポインターが含まれます。
特定の質問に対する回答を初めて確認し、その回答の選択肢に複数の会社が関連付けられている場合は、その最初の回答のハッシュテーブルのデータをリンクリストなどとして一時的にコピーします。さらに多くの質問に回答したら、リストの要素を新しい回答ごとのハッシュテーブルと照合し、新しい回答ごとのハッシュテーブルに存在しない会社をリストから削除します。1)リストに1つの会社だけが残っている、2)リストに会社が残っていない、または3)すべての質問をするまで、質問のプロセスを繰り返します。
1)の場合、それは質問回答者の雇用主です。
2)の場合、従業員はどの会社にもチェックのために雇用されていないか、どこかにエラーがあります。
3)の場合、リンクリストに残っている企業は、質問回答者が雇用されている可能性のある企業です。
私の実装では最低580個のハッシュテーブル(回答ごとに1つ、質問ごとに最低2つの回答)が必要になるため、これを行うにはおそらくより効率的な方法がありますが、現時点では何も考えられません。