2017-11-01 4 views
-2

소스 대상 노드와 임계 값을 포함하는 큰 텍스트 파일 (20GB) 파일이 있습니다. 임계 값> 0이면 그렇지 않은 경우 연결됩니다. 배열 또는 배열 목록에 연결된 노드를 추가하고 싶습니다. (하나는 많은 양의 데이터에 적합합니까?) 그리고 거대한 연결 구성 요소를 찾는 것입니다. BFS 알고리즘은 최단 경로에 대한 해결책이라고 생각합니다.네트워크에서 가장 큰 연결된 구성 요소

TXT 파일

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

내 코드 : 당신이 올바르게 구현하지 않는 BTW 당신이 적용 나중에 그래프 데이터 구조를 고려 할 수있는 경우

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 차원 가방 배열을 만듭니다.

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

구성 요소가 연결되어 있고 임계 값이 무엇인지 알려주는 하나의 클래스를 만듭니다. 통화가 연결되었습니다.

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

당신은 그것을 더 잘 알아야하지만 그것은 그래프이며 두 노드 사이의 거리로서 임계 값을 계산할 수 있습니다 –

관련 문제