2013-02-08 2 views
0

지도를 뒤집기 위해지도에 거대한 데이터를 저장해야하지만, 내 데이터가 매우 거대합니다.지도가 커지면 커질수록 느려집니다. 느린. 우리는 수십억 개를 커버하는 매우 희소한 인덱스를 가진 Map 컨테이너를 말하고 있습니다.거대한지도에 matlab에 거친 반전 색인을위한 제안이 필요합니다

내 프로그램을 한 번 반복 할 때 많은 키 값 (수천 개가 될 수 있음)을 저장하기 위해 일부 숫자가 계산됩니다. 이것은 맵의 크기가 매 반복마다 약 1,000만큼 증가한다는 것을 의미합니다. 그리고 처음 몇 번의 반복에서는 20 초 정도 걸리 겠지만 70 번째 반복에서는 100 초 정도 걸립니다. 저는 약 5000 세트의 데이터를 가지고 있습니다. 즉,이 모든 데이터에 대해 5000 번의 반복이 필요합니다. 반복 할 때마다 기하 급수적으로 증가하는 시간이 있기 때문에 계산하는 데 며칠이 걸리며 용인 할 수 없습니다.

이 경우 내가 할 수있는 일이 있습니까?

+0

내 첫 번째 생각은 그렇게 많은 데이터 세트를 여러 번 처리해야한다는 것입니다. 관련 행과 기능적 설명 만 포함하는 코드의 간단한 요약을 제공 할 수 있습니다. 그런 다음 다시 작성하는 것에 대해 생각할 수 있습니다. 또한 codereview에 게시하고 낮은 수준의 질문을 남길 수도 있습니다. –

+0

우리는 종이에 설명 된 몇 가지 실험을 테스트하고 있으므로 큰 데이터가 필요한 이유입니다. 나는 유연성과 생산성을 위해서 matlab에 이것을 시험해보고 있지만 다른 한편으로는 동료들로부터 C++을 시도했다고 들었는데 단지 몇 시간 정도 걸렸다. – Karl

+0

그건 내 첫 번째 생각을 강화, 아마도 당신은하지만 비효율적 인 방식으로 올바른 명령을 사용하고 있습니다. (의심 스러울 때 비효율적 인 명령으로 올바른 코드를 사용하는 것에 반대) 몇 시간 동안 실행하고 두려워하는만큼 실제로 속도가 느려지는지 확인하는 것도 흥미로울 수 있습니다. –

답변

0

대신 Java HashMap 구현을 사용해 볼 수 있습니다. Matlab이 Java 루틴에 액세스 할 때마다 smkall 오버 헤드가 있지만 일반적으로 Java 루틴은 더 많은 유연성을 제공합니다. 예 :

%Create 
map = java.util.HashMap(5e6); %Initialize with room for 5 million entries 

%Add data 
map.put('key1','value1'); 
map.put(2,20); 

%get data 
out = map.get('key1'); %Get a value 
map.containsKey(2); %Check for existance of a key 

이렇게하면됩니다. 그러나 ... 그것이 더 빨라지는지 아닌지는 분명하지 않습니다. 오직 테스트 만이 알 수 있습니다.

또한이 방법을 개발할 때 가끔 오류가 발생할 수 있습니다.

Java exception occurred: 
java.lang.OutOfMemoryError: Java heap space 
    at java.util.HashMap.<init>(Unknown Source) 
    at java.util.HashMap.<init>(Unknown Source) 

이런

, 당신은 자바 주민 정보를 제거하거나 초기의 HashMap에 적은 공간을 할당 할 수 clear java를 사용할 수 있습니다.

+0

속도 향상을 찾고 있습니다. 자바는 상황을 더욱 악화시킬 것이라고 나는 믿는다. – Karl

관련 문제