2013-06-07 2 views
0

스칼라 목록의 다른 맛에서 "포함"방법에 대한 성능 특성에 대한 정보를 아는 사람이 있습니까? 스칼라 언어 문서는 head, tail, append 등과 같은 기본 작업을 다루지 만 'contains'의 성능을 다루지는 않습니다. (아니면 적어도 나는 그런 것을 찾지 못했습니다.) FWIW, 필자는 요소가 목록에 존재하는지 여부를 효과적으로 알려주는 가장 빠른 구조가 필요합니다. 처음에 컴파일 된 목록은 추가/a/m/d 작업을 수행하지 않습니다.스칼라 목록 성능

이 편집 2.10.0

스칼라 버전이다 : 그것은 어떤 차이를해야하는 경우에, 이것은, 워드 프로세서했던 명확히하기 텍스트 세그먼트 (. ~ 16 48 자 각) 그리고,의 목록입니다 룩업 성능을 나타내는 하나의 작은 테이블을 포함하지만 목록/맵 구현의 작은 세트에 대해서만 포함됩니다.

+2

입니다. 빨리 포함하려면 [Set] (http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.Set) – Cubic

+0

을 사용하십시오.이 표는지도 전체에 표시됩니다. 룩 업에옵니다. 허락하신다면, 이들 중 대부분은 해쉬 (이전 편집 당)이지만, 거기에 충분한 차이가 있는지 확인하고 싶습니다. http://www.scala-lang.org/docu/files/collections-api/collections_40.html – mjk

+0

대부분의 경우 스칼라에는 단 하나의 "flavor"만 존재합니다. List는 고전적이고 기능적인 (Lisp 계열) cons-cell 기반 목록입니다. 스칼라의'List'는 구체적인 타입이고 Java의'List'는 추상 클래스입니다. 'List' Scala가 호출하는 것은 Scala가 항목의 특정 순서를 유지하거나 항목이 추가 된 순서의 반대 순서와 동일하게 유지하는 모든 콜렉션의 추상적 유형 인 'Seq'를 호출하는 것입니다. 다른 사람들이 지적했듯이, 당신이 원하는 것은'Set'입니다. 정확한 목적은 특정 가치의 존재 또는 부재에 대한 빠른 테스트를 지원하는 것입니다. –

답변

1

이것은 트리의 경우에 적합합니다.이 경우 RB 트리는 contains에 의해 실행되는 검색이 조각 수를 대수로 수행합니다.

봉쇄를 확인하기 만하면되므로 조회 시간을 줄이기 위해 세트를 사용해야합니다.

이 솔루션은 (n)이 O 수 없습니다 포함하는 것은 꽤 미친 좀 목록이 될해야 할 것 TreeSet

+0

호기심 때문에, 필자는 스칼라 목록 구현 중 일부가 목록, 배열 및 포트간에 병렬 기능을 결합한 것처럼 보입니다 ... 기본 구문 중 하나는 포함을 구현하기 위해 트리를 사용합니다. -force 반복? – mjk

+0

반복. 어쨌든, RB 트리는 데이터 구조 (최소한 컬러 비트와 노드 당 두 개의 포인터)를 저장하기위한 추가 메모리가 필요합니다. 하나 또는 다른 하나를 선택하는 것은 실제로 상황에 따라 다릅니다. RB 트리가 더 무거 우므로 저장된 요소가 많은 경우에만 이점을 인식합니다 (실제로 벤치마킹하지 않았습니다). 또한 List는 배열과 같은 삽입 순서를 유지할 수 있지만 Trees는 의도하지 않은 것입니다. –

+1

왜 'HashMap'이 아닌가요? 'O (1)'/ – Jatin