다양한 데이터 구조의 시간 복잡성은 무엇입니까?


87

Arrays, Binary Search Tree, Heap, Linked List 등과 같은 일반적인 데이터 구조 작업의 시간 복잡성을 나열하려고 노력하고 있으며 특히 Java를 언급하고 있습니다. 그들은 매우 일반적이지만 우리 중 일부는 정확한 답에 대해 100 % 확신하지 못하는 것 같습니다. 모든 도움, 특히 참조는 대단히 감사합니다.

예 : 단일 연결 목록의 경우 : 내부 요소 변경은 O (1)입니다. 어떻게 할 수 있습니까? 당신은 가질 를 변경하기 전에 요소를 검색 할 수 있습니다. 또한 Vector의 경우 내부 요소 추가는 O (n)으로 제공됩니다. 그런데 왜 우리는 지수를 사용하여 상각 된 일정한 시간에 그것을 할 수 없습니까? 내가 뭔가를 놓친 경우 나를 수정하십시오.

첫 번째 답변으로 내 결과 / 추측을 게시하고 있습니다.


2
모든 데이터 구조에 대한 시간 및 공간 복잡성 Big O 치트 시트
Vbp

1
다른 사람이이 작업을 수행하는 경우 잠시 시간을
내어

답변:


247

배열

  • 특정 인덱스에서 요소 설정, 확인 : O (1)
  • 검색 : 배열이 정렬되지 않은 경우 O (n) , 배열이 정렬되고 이진 검색과 같은 것을 사용하는 경우 O (log n) ,
  • Aivean 에서 지적했듯이 Delete어레이에서 사용할 수있는 작업 이 없습니다 . 요구 사항에 따라 특정 값 (예 : -1, 0 등)으로 설정하여 요소를 상징적으로 삭제할 수 있습니다.
  • 마찬가지로, Insert배열의 경우 기본적 Set으로 처음에 언급 한대로

ArrayList :

  • 추가 : 상각 O (1)
  • 제거 : O (n)
  • 포함 : O (n)
  • 사이즈 : O (1)

연결된 목록 :

  • Inserting : O (1) , 헤드에서 수행되면 O (n) 다른 위치에서는 연결 목록을 선형으로 탐색하여 해당 위치에 도달해야하기 때문입니다.
  • Deleting : O (1) , 헤드에서 완료되면 O (n) , 링크드리스트를 선형으로 탐색하여 해당 위치에 도달해야하기 때문에 다른 위치에 있으면 O (n) .
  • 검색 중 : O (n)

이중 연결 목록 :

  • Inserting : O (1) , 머리 나 꼬리에서 끝나면 O (n) , 링크드리스트를 선형 적으로 탐색하여 그 위치에 도달해야하기 때문에 다른 곳이면 O (n) .
  • 삭제 : O (1) , 헤드 또는 테일에서 완료 되면 연결 목록을 선형으로 탐색하여 해당 위치에 도달해야하기 때문에 다른 위치에 있으면 O (n) .
  • 검색 중 : O (n)

스택:

  • 푸시 : O (1)
  • : O (1)
  • : O (1)
  • 검색 (특별한 작업으로 조회와 같은 것) : O (n) (그렇게 생각합니다)

큐 / 데크 / 원형 큐 :

  • 삽입 : O (1)
  • 제거 : O (1)
  • 사이즈 : O (1)

이진 검색 트리 :

  • 삽입, 삭제 및 검색 : 평균 케이스 : O (log n) , 최악의 케이스 : O (n)

레드-블랙 트리 :

  • 삽입, 삭제 및 검색 : 평균 케이스 : O (log n) , 최악의 케이스 : O (log n)

힙 / PriorityQueue (최소 / 최대) :

  • 최소 구하기 / 최대 구하기 : O (1)
  • 삽입 : O (log n)
  • 최소 삭제 / 최대 삭제 : O (log n)
  • 최소 추출 / 최대 추출 : O (log n)
  • 조회, 삭제 (제공된 경우) : O (n) , BST와 같이 정렬되지 않은 모든 요소를 ​​스캔해야합니다.

HashMap / Hashtable / HashSet :

  • 삽입 / 삭제 : O (1) 상각
  • 크기 조정 / 해시 : O (n)
  • 포함 : O (1)

3
배열 요소를 삽입 (의해 삽입 I 오른쪽에있는 모든 요소를 시프트 위치에 새로운 요소를 추가 평균) O (N)를 취한다. 삭제도 마찬가지입니다. 존재하는 요소 만 교체하면 O (n)이 사용됩니다. 또한 크기를 조정할 수있는 배열에 새 요소를 추가하여 혼합 할 수도 있습니다 (O (1) 시간을 상각했습니다).
Aivean 2014 년

또한 이중 연결 목록의 경우 머리와 꼬리 모두에 삽입 및 삭제하면 O (1)이 걸립니다 (머리 만 언급 했음).
Aivean 2014 년

마지막으로, 균형 잡힌 검색 트리 (예 : Java의 TreeMap에 실제로 사용되는 Red-black 트리)는 모든 작업에 대해 최악의 경우 O (ln n) 시간을 보장합니다.
Aivean 2014 년

@Aivean : 표준 데이터 구조에 대한 표준 작업을 나열하려고합니다. 배열의 경우 : 추가 / 삭제 중 요소 이동은 표준 작업이 아닙니다. 또한 기존 요소를 교체하려면 O (n)이 아닌 인덱스를 사용하여 O (1)을 사용합니다. 이중 연결 목록 : 당신이 맞습니다. Red-Black Trees : 다시 말하지만, 당신이 옳습니다. 그러나 균형을 이룰 필요가없는 BST 만 나열했습니다. 그래서 Red-Black Trees에 대한 새 항목을 추가합니다. 의견 주셔서 감사합니다!
Bhushan 2014 년

1
@SuhailGupta : Set의 복잡성은 이미 마지막 포인트로 주어졌습니다.
Bhushan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.