질문 1)C++ 스파 스 벡터
I C에서 배가 큰 스파 스 벡터를 ++, I 효율적 벡터의 비 영 요소 인덱스를 분석 할 필요가있다. 나는 분명히 길이에 걸쳐 반복 할 수 있고 그것을 할 수있는 더 좋은 방법은 무엇입니까?
질문 1)C++ 스파 스 벡터
I C에서 배가 큰 스파 스 벡터를 ++, I 효율적 벡터의 비 영 요소 인덱스를 분석 할 필요가있다. 나는 분명히 길이에 걸쳐 반복 할 수 있고 그것을 할 수있는 더 좋은 방법은 무엇입니까?
복식 벡터의 구성에 대한 특별한 지식이없는 경우 (예 : 정렬 됨), 전체 루프가 가장 효율적입니다.
물론 eladidan이 제안한 구조의 변화는 고려해야 할 사항 일 것입니다.
나는 C++에서 두 배의 큰 희소 벡터를 가지고 있기 때문에 벡터에서 0이 아닌 요소의 인덱스를 효율적으로 파싱해야합니다. 나는 분명히 길이에 걸쳐 반복 할 수 있고 그것을 할 수있는 더 좋은 방법은 무엇입니까? 벡터가 (
n
제로가 아닌 요소와N
의 수는n = o(N)
이 벡터의 크기입니다) 정말 드문 드문 경우
후 std::map<int,double>
또는 std::unordered_map<int,double>
에서 그것을 표현하는 것은 아마 가장 좋습니다. std::map
방법을 사용하면 O(log(n))
에 요소를 찾을 수 있습니다. std::unordered_map
을 사용하면 찾기 조작은 O(1)
의 상각 시간이 걸립니다. 두 경우 모두, 0이 아닌 요소의 수는 단순히 컨테이너의 크기입니다. 두 방법 모두 O(N)
대신에 O(n)
공간을 사용합니다.
change the representation of your data을 입력 할 수없는 경우 각 요소를 검사하여 almost equal을 0으로 필터링해야합니다. 그러나이 작업은 embarrassingly parallel이므로 작업량을 여러 스레드로 분할하여 적어도 런타임을 향상 시키십시오 (복잡하지는 않지만).
[무엇을 시도 했습니까?] (http://whathaveyoutried.com) –
두 번째 질문이 있으면 두 번째 게시물을 작성하십시오. –
나는 그 일을 반복하고 해결하는 것은 사소한 일이다. 거기에 더 좋은 방법이 있습니까? –