2013-01-10 1 views
1

나는 약 1176^3 위치의 목록이 있습니다.매우 큰 목록으로 작업하는 스칼라

val x = list.length 

같은 만들기 떨어지게 목록에서

1,271,256 위치를 확인, 단지 몇 초입니다 .. 시간이 걸립니다. 어느 누구도 속도를 높일 생각이 있습니까?

+5

약 1 백만 개의 요소에 대해 몇 초가 괜찮 으면 10 억 개 요소에 대해 몇 시간 동안 불평하는 이유는 무엇입니까? 1271256 요소의 처리에 5 초가 걸린다고 가정하면 1176^3 요소의 처리에는 시간 = 1176^3/1271256 * 5 = 6397 초 = 1.78 시간이 걸립니다. – ffriend

답변

9

List은 O (n)이므로 길이 연산에 잘못된 데이터 구조 일 수 있습니다. 목록이 길어질수록 완료하는 데 더 오래 걸립니다.

Vectorlength을 호출해야 할 때 사용할 수있는 더 나은 데이터 구조 일 수 있습니다. 저장소가 유한 한 시간에 임의 액세스를 지원하기 때문입니다.

이것은 물론 List가 사용하기 어려운 구조라는 것을 의미하지는 않습니다.이 경우에는 바람직하지 않을 수 있습니다.

1

gpampara의 대답에 덧붙이면, 이러한 경우에 항목 당 저장된 오버 헤드가 가장 낮고 요소 및 길이 결정에 대한 O (1) 액세스가 있기 때문에 실제로 배열을 사용하는 것이 정당 할 수 있습니다 배열 헤더 자체).

배열에는 여러 가지 단점이 있지만 메모리 오버 헤드가 주요 고려 사항 일 때 (그리고 생성 당시 크기를 알 수있는 고정 크기 컬렉션이 가능한 경우) 정당하다고 생각합니다.