2010-02-10 2 views
2

매우 큰 (사용자 정의 객체) 연결 목록으로 작업하고 있으며 목록에 추가하려고하는 객체가 이미 있는지 확인하려고합니다. 그곳에. 1 문자열 제 2의 문자열 내가 항목에서이 있는지 확인하기 위해 노력하고있어연결된 목록에 대한 호출 색인을 사용자 정의하십시오. (Java)

고유 카운트 번호 :

문제는 내가 검색하고있는 항목을 포함하는 고유의 오브젝트가 있다는 것이다 (첫 번째 문자열)과 (두 번째 문자열)을 포함하지만 무시한 (고유 한 백작 #) 내 연결된 목록.

이것은 각각의 개별 연결된 목록 항목을 통과하여 벙어리 방식으로 수행 할 수 있지만 너무 길어집니다. 속도를 높이려고 해요! 나는 (indexOf)를 사용하는 것이 도움이된다고 생각했지만, 검색 대상을 사용자 정의 할 수있는 방법을 모르겠습니다.

아이디어가 있으십니까?

+1

@rockit : 문제를 해결할 수있는 다른 데이터 구조를 사용할 수 있습니다. 필요한 작업에 따라 정렬 된 SortedSet 또는 다른 것을 사용하는 것이 좋습니다. 목록과 세트도 사용할 수 있습니다. – SyntaxT3rr0r

답변

2

indexOf()는 찾고있는 요소를 찾을 때까지 점진적으로 목록을 검색하므로 O (n) 성능도 있습니다.

목록이 정렬되어 있습니까? 그렇다면 quicksort와 같은 것을 사용하여 요소를 검색 할 수 있습니다.

임의의 요소에 대한 일정 시간 액세스가 필요한 경우 링크 된 목록이 최선의 방법이라고 생각하지 않습니다.

+0

booo! 알았어, 고마워. 다른 함수 호출을 조언 해 주시겠습니까? – rockit

+1

일정 시간 액세스가 필요한 경우 다른 데이터 구조를 모두 권고합니다. – Kevin

2

LinkedList를 사용해야합니까? 기존 코드가 아닌 경우 HashSet 또는 LinkedHashMap을 권장합니다. 둘 다 일정 시간 조회를 제공하며, 여전히 삽입 주문 반복이 필요한 경우 LinkedHashMap에는 키를 통해 실행되는 LinkedList 내부가 있습니다. 당신이

if (linkedList.contains(objectThatMayBeInList)) { //do something } 

문제를 사용할 수 있지만

1

은 불행하게도 "바보 방법은"그렇게 할 수있는 가장 effiecient 방법 N이이다 어디 LinkedList의이 O의 최상의 경우 검색 (N)를 가지고 있다는 것입니다 리스트의 크기. 즉, 주어진 검색에서 최악의 N 계산 시나리오가 있음을 의미합니다. 연결된 목록은 그러한 종류의 작업을위한 최상의 데이터 구조는 아니지만 동시에 그렇게 나쁘지도 않으며 너무 느려서도 안됩니다. 컴퓨터가 그 일을 잘합니다. 목록의 크기에 관해 더 자세히 설명해 줄 수 있습니까?

1

기본적으로 개체 A가 링크 된 목록 L에 있는지 알아야합니다.이 문제는 검색 문제이며 목록에 순서가없는 경우 O (n)보다 빨리 수행 할 수 없습니다.

목록을 정렬하면 (삽입 속도가 느려짐) 이진 검색을 수행하여 A가 목록에 있는지 확인하는 것이 훨씬 빠릅니다.

아마도지도 (HashMap 또는 TreeMap)를 목록에 추가하여 목록에있는 항목을 추적 할 수도 있습니다.

관련 문제