2010-06-23 6 views
1

인기있는 언어로 된 기본 데이터 구조의 공간 복잡성을 알고 싶습니다.HashTable, Array, ArrayList, LinkedList 등의 공간의 복잡성은 무엇입니까

+2

당신은 아마 하나 개의 언어를 선택하고, 해당 언어의 이름을 나열한다. C++에는 표준 라이브러리에 이러한 클래스 이름이 없습니다. – bdonlan

+1

목표가 무엇인지에 대해 더 자세히 설명해 주시겠습니까? off-hand 그것 숙제 질문, IMHO 들리는데 :) –

+1

하나의 언어/프레임 워크로 제한하거나 언어에 구애받지 않는 데이터 구조에 대해 질문하십시오. 그것이 현재 말로 표현되는 방식은 믿을만하게 대답하기가 거의 불가능합니다. – Aaronaught

답변

1

사실상 모든 데이터 구조는 n의 ORDER에 있습니다.

  • 배열 = 정확히 N
  • 의 ArrayList = betweenn 및 케이 * 않음 (기본 K = 2)
  • LinkedList의 = 정확히 N
  • 해시 = 최악의 N/K (기본 K가 0.75이다)은
+0

링크 된 목록은 정확히 n, 'ay? 해시 테이블은 n 개의 요소를 저장하는 데 필요한 공간이 적습니까? :) –

+0

LinkedList가 정확히 n입니다. 그것의 근원을보십시오. 헤더 항목과 크기에 대한 int로 구성됩니다. 아마도 int 크기를 언급 했어야합니까? 그리고 당신이 내 HashTable에서 수학을한다면, n * k가 아닌 n/k를 보게 될 것입니다. 예를 들어, n이 1000이고 k가 .75 인 경우 1000/.75 = 1334입니다. 명확하게 1000 이상입니다. – corsiKa

+0

여기에있을 비판이있는 경우 ArrayList와 HashTable이 축소되지 않습니다. 당신이 제거 할 때, n은 그 (것)들을위한 최신 n로 해석되어야한다. – corsiKa

3

이들 모두는 공간 복잡성 O (n)을 갖는다. 모든 변경 사항은 계수이며 구현에 완전히 의존합니다. 특히 시간 복잡성을 줄이기 위해 공간을 사전 할당하는 것과 같은 일을 시작하기 시작할 때.

예를 들어, 배열 목록 구조는 일반적으로 여분의 공간을 미리 할당합니다. 따라서 여러 객체에 대한 정확한 복잡성은 실제로 구현에 완전히 의존하는 범위와 생성 및 사용 방법에 달려 있습니다. 예를 들어, 더 많은 공간이 필요할 때마다 항상 3 개의 여분의 공간을 할당하는 배열 목록을 작성하고 5 개 이상의 열린 공간이있을 때 항상 3 개의 열린 공간으로 할당을 해제하면 n의 실제 복잡도는 [n, n + 5] + overhead이됩니다.

프로그래밍 할 때 이러한 항목을 선택하는 데있어 큰 차이점은 일반적으로 사용하기 쉽고 사용법에 얼마나 잘 맞는지입니다. 예를 들어, 링크 된 목록은 무작위 액세스에 대해서는 끔찍하지만 반복에는 좋습니다. 자바에 대한

2

: (Aproximates)

 
      Memory O(x) | General Case 
Array  |  n  | n 
ArrayList |  n  | 2 * n 
LinkedList|  n  | n * (node size) 
HashTable |  n  | ~n 
Map  |  n  | (n * key_size) + n 
+0

'일반적인'의미는 무엇입니까? – bdonlan

+0

@bdonlan 구조의 일반적인 구현을 메모리로 사용하는 것이 가장 좋습니다. – jjnguy

+0

그건별로 의미가 없습니다. 배열의 경우 n은 n 바이트를 의미합니까? n 개의 항목을 의미하면 linkedlist는 n * 노드 크기 * 항목 크기 바이트입니다 ...? – bdonlan

관련 문제