これは、私が答えようとしているインタビューの質問です。
メンバーを含むソーシャル ネットワークと、メンバーのペアが友情を形成した時間のタイムスタンプを
N
含むログ ファイルが与えられた場合M
、すべてのメンバーが接続された最も早い時間を決定するアルゴリズムを設計します (つまり、すべてのメンバーは友人の友人の友人です)。 ..友人の)。ログファイルはタイムスタンプでソートされており、友情は同値関係であると仮定します。アルゴリズムの実行時間はM log N
かそれ以上で、 に比例して余分なスペースを使用する必要がありますN
。
最初に思ったのは「これは無理だ!」
しかし、このソーシャル ネットワークをデータ構造として表現するにはどうすればよいかを考えました。Union-find は、使用できるデータ構造です。ここで、すべてのメンバーが接続されているとはどういう意味かを理解しなければなりません。実際のデータ構造と、すべてのメンバーが互いに友達になったときの様子を表示するにはどうすればよいですか?
システムが完全に接続される方法を視覚的または概念的に理解できるまで、そのイベントに対応するタイムスタンプを見つける方法を理解し始めることができないと思います。