2つの異なる方法でアクセスできるようにするために、大量のデータがあります。私は一定の時間を、どちらかのキー、1つのキーを用いた一定時間の挿入、および他のものとの一定時間の削除に基づいて調べることを望む。そのようなデータ構造はありますか?また、tr1にデータ構造を使用して構築することができますか?2つのキーを持つハッシュテーブル
答えて
2つのパラレルハッシュテーブルを使用します。削除中にすべてのキーが必要になるため、キーが要素の値の中に格納されていることを確認してください。
初心者のためにいくつかの例や説明を教えていただけますか? –
あなたはBloom Filtersを見ましたか?彼らはO(1)ではありませんが、検索を行うために必要な時間とスペースの両方でハッシュテーブルより優れていると思います。
Bloomフィルタは確率的です。彼らは正確な答えを出さない。 (彼らは、OPが望むようにネイティブに2つの鍵で動作しません) –
彼らは正確な答えを出していませんが、要素がセットのメンバーであるかどうかを判断するために必要なハッシュの数を減らします。 – Davidann
Err ..しかし、要素がセットに含まれているかどうかは判断されません。 –
なぜあなたはこれを行う必要があるのか分かりませんが、誰かが2つの異なるハッシュテーブルを使用しようとしていると言いました。ここで だけの擬似コード:
Hashtable inHash;
Hashtable outHash;
//Hello myObj example!!
myObj.inKey="one";
myObj.outKey=1;
myObj.data="blahblah...";
//adding stuff
inHash.store(myObj.inKey,myObj.outKey);
outHash.store(myObj.outKey,myObj);
//deleting stuff
inHash.del(myObj.inKey,myObj.outKey);
outHash.del(myObj.outKey,myObj);
//findin stuff
//straight
myObj=outHash.get(1);
//the other way; still constant time
key=inHash.get("one");
myObj=outHash.get(key);
わからないが、あなたが探しているものthatsの。
これは標準的なコンテナの設計の限界の1つです。コンテナは含まれるデータを「所有」し、唯一の所有者であることを想定しています...コンテナは単に「インデックス」ではありません。 単純な、しかし100%有効ではない解決策は、値として "Node *"を持つ2つのstd ::マップを持ち、両方のキーをNode構造体に格納することです(各キーを2回格納します)。このアプローチでは、データ構造を適切なオーバーヘッドで更新することができます(余分な地図検索を行いますが、それは十分に速いはずです)。
Aおそらく「正しい」解決策は、しかしながら、IMO
struct Node
{
Key key1;
Key key2;
Payload data;
Node *Collision1Prev, *Collision1Next;
Node *Collision2Prev, *Collision2Next;
};
が基本的に同時に2つの異なるハッシュテーブル内の各ノードを有するようなものであろう。
標準容器はこのように組み合わせることはできません。過去に手作業でコード化した他の例は、すべてのノードが二重リンクされたリストにあるハッシュテーブル、またはすべてのノードも配列内にあるツリーです。
非常に複雑なデータ構造(例えば、それぞれが複数のチェーンの "所有者"と同時にいくつかの他のチェーンの一部である構造のネットワーク)では、時にはコード生成に頼っていましたデータ構造の説明を与えられたコード)。
- 1. 2つの主キーを持つハッシュテーブル
- 2. 整数をキーとして持つハッシュテーブル
- 3. 複数の値と1つのキーを持つPowershellハッシュテーブル
- 4. 一意のキーを持つハッシュテーブルを1つのC++にマージする
- 5. has_many:throughテーブルを2つ持つ外部キー
- 6. Hibernateで2つの多対1キーを持つ複合キー
- 7. 私は2つの外部キーを持つモデル持っジャンゴ
- 8. プロパティのハッシュテーブル内の2つのオブジェクトの新しいハッシュテーブルに
- 9. 2つのハッシュテーブルの比較方法
- 10. 2つの異なるテーブルの2つの外部キーを持つコンポジットプライマリキーmvc
- 11. 単一ハッシュテーブルを持つPowershell配列
- 12. Mysql:外部キーを持つ2つのテーブルの行を削除
- 13. 同じキーを持つ2つの配列の値の追加
- 14. 同じテーブルの2つの外部キーを持つSql selectステートメント
- 15. 同じテーブルの2つの外部キーを持つDjangoモデル
- 16. 2つの外部キーを持つ結合クエリのMedoo構文
- 17. 外部キーを持つ2つのテーブル間のデータベース削除クエリ
- 18. 2つのキーを持つ重複レコードのSQLチェック
- 19. 同じテーブルの2つのForiiegnキーを持つMysql結合テーブル
- 20. Oracleの2つの列を持つ主キー?
- 21. 2つの "プライマリ"キーを持つテーブル上のNHibernate
- 22. 2つのパラメータを持つ多次元配列の検索キー
- 23. データフレームの2つのキーを持つ辞書
- 24. 2つの列を含む主キーを持つ表への外部キー参照
- 25. Mysql 2つの異なるテーブルの主キーである2つの列への参照を持つ外部キー
- 26. C++:2つの関連するキーを持つ高速構造
- 27. ハッシュテーブルA iが試み</p> <p>.. C#の でiはキー/値のペアが同じ であり、iは、二つハッシュテーブルのキー/値のペアが等しいかどうかを確認したい2つのハッシュテーブルオブジェクトを持ってハッシュテーブルB制御
- 28. は、2つの配列と、私は、次の二つの配列を持つキー
- 29. Hibernateマッピング - 外部キーを持つ1つのテーブルを参照する同じ列を持つ2つのテーブル
- 30. 1つのフォームから2つのテーブルにポストするキーを持つMySQLi
この構造に新しいデータを追加しますか? – Davidann
挿入にはすべてのキーの知識が必要であることは自明のことです。 –
どのようにあなたの要件を満たすことができません...ハッシュテーブルの最悪の場合のパフォーマンスは、O(1)ではなくO(n)です。 –