2012-02-24 3 views
0

자바 스크립트에서 데이터 구조로 다음을 만들고 싶습니다.해시 된 벡터 (js)

  1. 주문한 상품

  2. 각 항목 ID를 가지며, 그것이 발견 O (1)

  3. 용기의 oreded 슬라이스없이 검색 될 수 삭제할 수의 컨테이너 원래 컨테이너를 변경합니다.

  4. 항목

    (1)

내가 <item_id, position_in_array>의 어드레스 maping 개체 (b={})와 <items>의 배열 (a=[])를 사용하는 것으로 생각 O의 특정 위치에 삽입 될 수있다.

다른 아이디어?

+1

주문한 컨테이너가 가져 오기 또는 삽입 작업에 O (1) 복잡성을 가질 수 있다고 생각하지 않습니다 ... –

+0

@ FrédéricHamidi : 예, 우선 순위 대기열의 다양한 구현을 볼 수 있습니다. 즉, 내 대답은 왜 둘 다 일반적으로 불가능한지를 자세히 설명합니다. – ninjagecko

+0

@ninjagecko, 우선 순위 대기열에 대한 나의 이해가 정확하다면, O (1)에서 가장 높은 (또는 가장 낮은) 우선 순위 항목 만 가져올 수 있습니다. 임의 항목을 가져 오는 것은 기껏해야 O (log n)입니다. –

답변

1

일반적으로 불가능합니다.

당신은 (O(1) 삽입 또는 O(1)O(N log(N)) 당신이 특정 종류의 데이터를하지 않는 가장 좋은 일이 할 수있는 동안, 모두 당신이 O(N) 시간에 일반적인 정렬 알고리즘을 쓸 수 있다는 의미를 갖는, 삭제/가져 오기 넘어갈 수 있지만 모든 데이터가 고정 범위의 정수 등). 솔루션을 악용 할 수있는 방법을 확인하려면 정렬되지 않은 배열을 컨테이너에 삽입 한 다음 첫 번째 항목을 반복해서 가져 와서 삭제하면됩니다.

또한 제약 조건 중 일부가 구체적이지 않거나 충돌이 있습니다. 신분증으로 주문하지 않으면 신분증을 소지해야합니다. 또한 임의의 위치에 항목을 삽입하는 기능은 컨테이너가 항상 주문된다는 요구 사항을 위반하는 것으로 보입니다.

좀 더 관대하고 제한이없는 (그러나 여전히 구체적인) 제한 조건 세트로 자유롭게 다른 질문을 열어보십시오.