2012-05-12 14 views
3

私は、2つの列を持つCSVファイルを持っており、ファイル名が "Friends"であると言うことができる次の問題に取り組んでいます。両方の列には、AからZまでの文字が含まれています。 Java上のグラフ/データ構造のアルゴリズム

A B 
B C 
A E 
D F 
E F 

各行には2つの異なる文字があります(行に重複はありません)。 AはBの友人、CはDの友人など...人物Aと人物Bが話し、人物Bが人物Cと話すと、BとCは実業家になる。 Aquintacesは共通の友人を共有しています。私はより多くの実績を持っている人を絞り込む必要がありますか?

私はhashmap、arraylist、stackなどのdifferntデータ構造を使用する方法とグラフ理論(JGraphTライブラリ)を使用する方法の2つの方法を試しています。 しかし、私はデータstrcutresを使用して、私はグラフ理論を使用する場合、グラフ内のトラバーサルに立ち往生している場合は、ロジックに立ち往生しています。私は質問を以下している

: -

  1. データ構造やグラフで行くためのより良いアプローチは何ですか?または 他のどのようなより良いアプローチ/ロジック/アルゴリズムですか?
  2. 誰もJgraphTライブラリでグラフをトラバースする方法を知っていますか?私は これを行うことができません、彼らは ライブラリについての非常に限られたドキュメントを持っています。

ご協力お願いいたします。

答えて

0

まず、すべての文字をその友人のセットにマッピングするハッシュテーブルを作成できます。 Aは{B}にマップし、Bは{C}にマップし、Zに2人の友人YとWがある場合、Zは{Y、W}にマップされます。これは、文字から文字セットまでのハッシュマップです。

知人を計算するには、ハッシュマップを繰り返します。あなたがA - > {B、C、F}のエントリーにいるとき、セットB、C、Fを通して内側のループで反復する。それらの友人(3つのセット)を1つのセットに集める(ちょうど、 )、Aが見つかった場合はそのセットからAを削除します。そのセットのサイズは、Aのための知人の数です。リンスと繰り返し。

1

一般的に、ハッシュマップは最も高速で使いやすいものです。いくつかのライブラリが必要なものを簡単にやってくれると確信している場合や、コード作成に長時間かかるものがある場合を除いて、カスタムライブラリを使用することをお勧めします。

あなたの場合、ちょうど各人をキーとして指し示すオブジェクトとして彼の友人のリストとして使うことができます。以前のコメントで指摘したように、.csvファイルを解析してHashMapを埋め込むことで、問題は解決します。

関連する問題