2012-02-24 8 views
0

JavaScriptでデータ構造として以下を作成します。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)時に一般的なソートアルゴリズムを記述することができることを意味した、削除/フェッチして逃げることができますがすべてのデータが固定範囲の整数など)。ソリューションを悪用する方法を理解するには、ソートされていない配列をコンテナに挿入し、最初の項目を繰り返し取得して削除するだけです。

また、制約の一部が不明であるか、または互いに矛盾しています。あなたがIDで注文しない限り、IDを持っている必要はありません。また、アイテムを任意の位置に挿入する機能は、コンテナが常に注文されるという要件に違反しているようです。

もっと寛大で自由な(ただしまだ具体的な)制約のセットを自由に感じてください。

関連する問題