인기있는 언어로 된 기본 데이터 구조의 공간 복잡성을 알고 싶습니다.HashTable, Array, ArrayList, LinkedList 등의 공간의 복잡성은 무엇입니까
답변
사실상 모든 데이터 구조는 n의 ORDER에 있습니다.
- 배열 = 정확히 N
- 의 ArrayList = betweenn 및 케이 * 않음 (기본 K = 2)
- LinkedList의 = 정확히 N
- 해시 = 최악의 N/K (기본 K가 0.75이다)은
링크 된 목록은 정확히 n, 'ay? 해시 테이블은 n 개의 요소를 저장하는 데 필요한 공간이 적습니까? :) –
LinkedList가 정확히 n입니다. 그것의 근원을보십시오. 헤더 항목과 크기에 대한 int로 구성됩니다. 아마도 int 크기를 언급 했어야합니까? 그리고 당신이 내 HashTable에서 수학을한다면, n * k가 아닌 n/k를 보게 될 것입니다. 예를 들어, n이 1000이고 k가 .75 인 경우 1000/.75 = 1334입니다. 명확하게 1000 이상입니다. – corsiKa
여기에있을 비판이있는 경우 ArrayList와 HashTable이 축소되지 않습니다. 당신이 제거 할 때, n은 그 (것)들을위한 최신 n로 해석되어야한다. – corsiKa
이들 모두는 공간 복잡성 O (n)을 갖는다. 모든 변경 사항은 계수이며 구현에 완전히 의존합니다. 특히 시간 복잡성을 줄이기 위해 공간을 사전 할당하는 것과 같은 일을 시작하기 시작할 때.
예를 들어, 배열 목록 구조는 일반적으로 여분의 공간을 미리 할당합니다. 따라서 여러 객체에 대한 정확한 복잡성은 실제로 구현에 완전히 의존하는 범위와 생성 및 사용 방법에 달려 있습니다. 예를 들어, 더 많은 공간이 필요할 때마다 항상 3 개의 여분의 공간을 할당하는 배열 목록을 작성하고 5 개 이상의 열린 공간이있을 때 항상 3 개의 열린 공간으로 할당을 해제하면 n의 실제 복잡도는 [n, n + 5] + overhead
이됩니다.
프로그래밍 할 때 이러한 항목을 선택하는 데있어 큰 차이점은 일반적으로 사용하기 쉽고 사용법에 얼마나 잘 맞는지입니다. 예를 들어, 링크 된 목록은 무작위 액세스에 대해서는 끔찍하지만 반복에는 좋습니다. 자바에 대한
: (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
- 1. C Vector/ArrayList/LinkedList
- 2. LinkedList 및 ArrayList 구현의 차이점은 무엇입니까?
- 3. LinkedHashMap vs HashMap! = LinkedList vs ArrayList
- 4. linkedlist/arraylist to java에 객체 추가
- 5. 행렬 추가의 복잡성은 무엇입니까?
- 6. 로그 기능의 복잡성은 무엇입니까?
- 7. 다음과 같은 방법의 복잡성은 무엇입니까?
- 8. Public LinkedList
- 9. Observable LinkedList
- 10. . LinkedList 구현은 .Net threadsafe입니까?
- 11. 차이점은 무엇입니까? 일반 목록 및 Arraylist, 일반 목록 Vs HashTable, 일반 목록 Vs 일반 없음?
- 12. 빈 Hashtable 객체의 크기는 무엇입니까?
- 13. HashTable Java ... 내 코드를 확인할 수 있습니까
- 14. 이미지/불연속 공간의 좌표 작업
- 15. GroupBy 작동의 점근 적 복잡성은 무엇입니까?
- 16. 사전 편집 트리 생성의 복잡성은 무엇입니까
- 17. 정규 언어 표현을 작성하는 일반적인 복잡성은 무엇입니까?
- 18. 메모리와 관련하여 아래 코드의 복잡성은 무엇입니까?
- 19. C++ STL에서 hash_set :: size()의 복잡성은 무엇입니까?
- 20. 가상 함수 호출의 순환 복잡성은 무엇입니까?
- 21. feholdexcept 등의 용도는 무엇입니까?
- 22. JTable에 HashTable?
- 23. PermGen 공간의 중요성
- 24. LinkedList ... 상속 ... 무엇?
- 25. Java에서의 Hashtable 및 사용
- 26. HashTable 용 IEnumerator?
- 27. 사용자 공간의 메모리 장벽? (Linux, x86-64)
- 28. 자바의 ArrayList, LinkedList의 및 스택 문제
- 29. LinkedList "node jump"
- 30. SmallTalk에서 LinkedList 클래스 사용?
당신은 아마 하나 개의 언어를 선택하고, 해당 언어의 이름을 나열한다. C++에는 표준 라이브러리에 이러한 클래스 이름이 없습니다. – bdonlan
목표가 무엇인지에 대해 더 자세히 설명해 주시겠습니까? off-hand 그것 숙제 질문, IMHO 들리는데 :) –
하나의 언어/프레임 워크로 제한하거나 언어에 구애받지 않는 데이터 구조에 대해 질문하십시오. 그것이 현재 말로 표현되는 방식은 믿을만하게 대답하기가 거의 불가능합니다. – Aaronaught