JavaScript의 배열은 항목을 추가하고 제거하여 수정하기가 매우 쉽습니다. 대부분의 언어 배열이 고정 크기이고 크기를 조정하려면 복잡한 작업이 필요하다는 사실을 다소가립니다. JavaScript를 사용하면 성능이 떨어지는 배열 코드를 쉽게 작성할 수 있습니다. 이것은 질문으로 이어집니다.
배열 성능과 관련하여 JavaScript 구현에서 어떤 성능 (큰 O 시간 복잡도 측면에서)을 기대할 수 있습니까?
모든 합리적인 JavaScript 구현에는 다음과 같은 큰 O가 있다고 가정합니다.
- 액세스-O (1)
- 추가-O (n)
- 준비중-O (n)
- 삽입-O (n)
- 삭제-O (n)
- 스와핑-O (1)
JavaScript를 사용하면 new Array(length)
구문을 사용하여 배열을 특정 크기로 미리 채울 수 있습니다 . (보너스 질문 : O (1) 또는 O (n) 방식으로 배열을 생성합니까?) 이것은 기존 배열과 더 비슷하며 사전 크기 배열로 사용하면 O (1) 추가를 허용 할 수 있습니다. 순환 버퍼 로직이 추가되면 앞에 O (1)을 얻을 수 있습니다. 동적 확장 배열을 사용하는 경우 O (log n)는 두 가지 모두에 대한 평균 사례가됩니다.
여기에서 가정 한 것보다 더 나은 성능을 기대할 수 있습니까? 어떤 사양에도 설명되어 있지는 않지만 실제로는 모든 주요 구현이이면에서 최적화 된 어레이를 사용할 수 있습니다. 동적으로 확장되는 어레이 또는 다른 성능 향상 알고리즘이 작동합니까?
추신
이것이 궁금한 이유는 정렬 알고리즘을 연구하고 있기 때문이며, 대부분은 전체적인 큰 O를 설명 할 때 추가 및 삭제가 O (1) 작업이라고 가정하는 것 같습니다.
length
속성을 설정하는 것과 공간을 미리 할당하는 것은 완전히 다른 두 가지입니다.
array[5]
일 때 너무 많이 기대하고 new Array(10)
있습니까?
.length
되지만 그게 다입니다.) 배열은 일반 Object 인스턴스와 크게 다르지 않습니다.