まず、質問は宿題に関する質問です。 私は実装について十分に長い間熟考してきました。借用ライブラリのデータ構造
私は、以下の機能を持っているライブラリソフトウェアを考えると、実装する必要があります。
- 新たな加入者を追加/削除します。
- 本を借りる/返す
- 次の加入者はどの書籍を持っていますか?
- どの加入者が以下の本を保有していますか?
- ほとんどの書籍を持つサブスクライバのリスト。
私はヒープと2つの赤い黒い木を実装することを考えましたが、スペースの複雑さが高いという問題があります。だから私は何か不足しているのだろうかと思っていた。
ユーザはIDで保存され、書籍にはコード名があります。 レッド・ブラック・ツリーは購読者用で、もう1つは借用した書籍用です。 最後の要件を実装するために、ヒープは最大のヒープです。
データ構造以外は使用できません。
ありがとうございました洞察と回答。
拡張できますか?あなたのR-Bツリーは、サブスクライバと書籍のためのものですか?たぶんハッシュテーブルはここで検討する価値があります。また、req 5のためのヒープは過度のように思えますが、二重にリンクされたリストの二重にリンクされたリストを使って、借用/復帰操作ごとにO(1)時間オーバーヘッドでそれを追跡することが可能でなければなりません。しかし、それはおそらくあなたの人のオブジェクトがDLLの知識を必要とすることを意味します。これは設計の観点からはうまくありません。 –
さて、あなたは1つのrbが購読者のためのものであり、1つは借りられた本のためのものです。そしてそれはちょうどそのための過剰ですが、私は加入者のリストを返す必要がありますO(n)はいいですが、これはO(n)のようにすることはできません。私はデータ構造を結合することを強くお勧めし、ハッシュテーブルを使ってEAVモデリングパターンを実行すると、検索に時間がかかります(おそらくO(n)、衝突があるかもしれません)。 – Cu7l4ss