2017-11-01 10 views
-2

ソースターゲットノードとしきい値を含む大きなテキストファイル(20 GB)ファイルがあります。しきい値> 0の場合は、接続されていない場合は接続されています。アレイまたはアレイリストに接続ノードを追加したい(これは大量のデータに適していますか?)と巨大な接続コンポーネントを見つけることです。私はBFSアルゴリズムが最短経路の解決策だと思います。ネットワーク内の最大接続コンポーネント

TXTファイル

100 101 -0.3434 
100 102 1.0023 
100 103 1.100 
103 104 0.210 
... 

マイコード:あなたがそれらを正しく実装していないところであなたは適用後のグラフデータ構造を検討し、可能ならば

String line = null; 
HashMap<Integer,ArrayList<Node>> arr = new HashMap<Integer,ArrayList<Node>>(); 
BufferedReader reader = new BufferedReader(new FileReader("C:/Users/UserPC/Desktop/output.txt")); 
     while((line = reader.readLine()) != null){ 
      String[] spl = line.split("\\s+"); 
      //System.out.println(spl[0]+","+spl[1]); 
      int source = Integer.parseInt(spl[0]); 
      int target = Integer.parseInt(spl[1]); 


      arr.computeIfAbsent(source, k -> new ArrayList<>()).add(new Node(target)); 

     } 

     reader.close(); 
+2

これは、「私のコードは私のため」のように、「StackOverflow」の話題になっています。 –

+0

いいえ、私はそれをどうすればよいかもっと意見を持ってほしかった –

+0

投票を削除するにはどうすればよいですか? –

答えて

1

20ギガバイトはあまりにも多くの時間がかかります重みを調整することによって最小スパニングツリーアルゴリズムを使用して、特定の値より小さいか大きい値を持つノードのみを検索します。

手順: 手順1: 送信元ノード、宛先、および重量/しきい値を含む1つのバッグの1次元配列を作成します。

step 1: 
    private Bag<Integer>[] array = (Bag<Integer>[]) new Bag[V]; 
    for all indexes: 
    array[i] = new Bag<Integer>(); 

コンポーネントが接続されていて、しきい値は何ですか:コールが接続されているというクラスを1つ作成します。

int firstNode = readIn via scanner. 
int secondNode = readIn. 
Int thresHold = read; 
Connected connected = new Conncted(firstNode,secondNode,threshold); 



    add all these connected component into array of bag so you have a graph then use minimumspanning tree or anyother algorithm, there are many. 
+0

したがって、しきい値は接続されたノードの各ペアの重みですか? –

+0

あなたはそれをより良く知るべきですが、それはグラフであり、2つのノード間の距離としてしきい値を設定することができます –

関連する問題