2011-04-23 5 views
4

난수 색인 (대부분이 0 값)을 생성 할 필요가 있습니다. 벡터는 1 (양의 차원), -1 (음의 차원) 및 0 중 하나의 값을 포함 할 수 있습니다.이 벡터는 텍스트의 코퍼스에있는 모든 단어에 대해 생성됩니다. 결과 벡터의 무작위성을 보장하면서 Java에서이를 달성하는 가장 좋은 방법은 무엇입니까? 무작위 색인 벡터 생성

를 사용하면 저렴한 비용으로 접근을 시도 할 경우

+0

~ 1000 단어 또는 단어 당? –

+0

코퍼스의 각 단어에 대한 1000 자릿수 – rmenon

답변

1

벡터를 저장하려면 0이 아닌 위치와 + 1/-1 비트의 목록을 유지하십시오. + 1/-1 비트는 Byte가 필요합니다.

최대한 많은 메모리를 절약하려면 모든 벡터에 대해 +1/-1 정보가 포함 된 BitSet을 길게 유지할 수 있으며 각 벡터는 BitSet에서 시작 인덱스를 기억합니다.

가 다른 직교 벡터를 생성하려면, 당신은 할 수 있습니다 :

[0 1 0 0 -1 ...] 
[1 0 1 0 0 ...] // zeros where the first vector is non-zero 
... 

가능한 모든 1000 인덱스의 링크 된 목록을 유지합니다. 벡터를 생성 할 때 작은 난수의 임의 색인을 선택하고이 색인이 0이 아닌 벡터를 생성 한 다음 사용 가능한 색인 목록에서 색인을 제거합니다. 그러나 이렇게하면 사용 가능한 색인이 빨리 소진됩니다. 그러나 1000 차원 공간에는 1000 개의 상호 직교 벡터 만 있으므로 1000 개 단어에 대한 벡터를 만들 수 있습니다.

또한 벡터가 직교해야한다는 사실은 완전히 임의적 일 수는 없다는 것을 의미합니다. 진정한 랜덤 벡터가 비 직교 일 수 있기 때문입니다.

0

감사 (프로그래밍 - 현명한), 다음 HashMap<Integer, Byte> 또는 괜찮은 스파 스 벡터를 만들 수있는 가까운 뭔가.

+0

더 좋은 방법이 있을까요? 사실, 생성 된 각 벡터는 다른 벡터와 직교해야한다는 추가 요구 사항이 있습니까? – rmenon

+0

더 나은 스파 스 벡터의 경우 [[이 질문] (http://stackoverflow.com/questions/1934254/which-is-the-best-way-to-implement-a-pars-vector- in-java). – Rom1