膨大な数のタスクを格納するシステムを持っています。各タスクには、以下のパラメータがあります。データ構造の中で最大の最小値と最大のキーの値を見つける
Time t
Priority p
すべてのタスクは、ユニークな時間を持っています。これは、2つのタスクが同じTimeパラメーターを持つことができないことを意味します。
ただし、優先度は一意ではありません。複数のタスクは同じ優先順位を持つことができます。
4種類のクエリに対処できるシステムを設計する必要があります。それぞれのタイプの問合せの可能性も同じです。次のクエリの種類があります:
UpdateTask(T、P)
このクエリは、優先順位p
までの時間t
でタスクの優先順位を設定するためのシステムを望んでいます。タスクがシステムに存在しない場合は、新しいタスクが作成されます。タスクが存在する場合、タスクの優先順位が更新されます。DeleteTask
このクエリは、システムが時刻t
に関連付けられているタスクを削除することを要求します。そのようなタスクがシステムに存在しない場合、何もする必要はありません。GetMaximumPriority()とGetMinimumPriority()
このクエリはシステムで利用可能なタスクの最低優先順位と最高優先順位を印刷するシステムを望んでいます。GetPriorityofTaskAtMaximumTime()
このクエリは、パラメータt
(時間)の最大値を持つタスク
の優先順位を印刷するシステムを望んでいる私は、このシステムのためのデータ構造を設計する必要がありますこれらのデータ構造のアルゴリズムを実装します。私はこれをJavaで実装する必要があります。
私のアプローチ:Key as TimeとValueを優先度としてHashMap
を作成しました。 HashMap
を使用すると、最初の2つのクエリを一定の時間内に処理できます。しかし、最後の2つのクエリは、O(n)
という時間の複雑さを持っています。
質問:この問題の効率的でスペース効率の良いデータ構造とアルゴリズムがありますか?私は主にこれを解決するアプローチが必要です。完全に実装されたコードは必要ありません。ありがとう。
自分で構造体を作り、問題がある場合はここで質問し、意見が必要な場合は[codereview]で質問してみませんか?これは、あなたが何かを学ぶ必要があるかのように見えます(それは自分で試してみるのが一番です)、それはあなたの仕事です(その場合は、努力のためにお金を得た人です。 – Thomas
時間はどのように見えますか? 'Map
私は一番難しい質問はQ4だと思いますが、この質問の詳細はありますか?それはリアルタイムで実行する必要がありますか、またはクエリをキャッシュしてバッチモードで処理できますか?それとも時間の範囲を知っていますか?一度にすべてのクエリをバッチ処理すると、O(lg n)時間で実行できますが、リアルタイム結果が必要な場合は簡単ではないようです。 –