2017-01-03 3 views
-2

私たちはm個の異なる製品(1からmの番号が付けられています)を持っています。入札者は、m日間オープンしています。n人が購入の申し出をしています。(それぞれのオファーは1つの製品を対象としています) 毎日の終わりに、最高のオファーをもった製品(まだ販売されていないすべての製品)販売されます。データ構造を実装する

我々は、以下の操作を提供するデータ構造を実装する必要があります。

  1. 初期化(M) - >提供せず、m個の要素を持つDSを初期化
  2. 入札(J、P) - >のオファーを追加複雑さの製品jへの価格pで0(1)償却
  3. 販売 - >最高のオファーを持つ製品を販売しています。複雑さO(対数m)で償却されたj(販売された製品)とp(製品が販売された価格)を返す。

私はfibonacceヒープを使用して、質問を解決しようとした:

  • 我々は新しいFIBヒープを作成し、(キーjと情報ヌルで製品)m回を挿入

  • 私はフィックスヒープの減少キーのアイデアを使用して、新しいpに情報を切り替えます

  • 私はdelete minというアイデアを使って最大値を削除します

この問題を解決するには、最大ヒープと最小ヒープを使用しないといけないと思うので、間違っていると思います。

誰かが真のソリューションを手に入れるのに役立つでしょうか。 **

+0

はい、最大ヒープが必要です。それ以外に、あなたが描く解答は正しいです。 –

答えて

0

商品のハッシュテーブルを最大入札価格に保ち、Bid()とO(1)をSell()にO(log M)、最大入札でソートした商品リストを得ることができます。

Bid()では、必要に応じてテーブルを更新し、必要に応じてリストをバイナリ検索で更新します。 Sell()では、リストから一番上の項目をポップし、地図から価格を取得するだけです。

+0

リストでO(log n)で入札を行う方法がわかりません。リストが二重リンクリストである場合、新しい入札が行われたときにアイテムを移動するには、O(n)検索が必要です。リストが配列内に維持されている場合、新しいスポットを見つけることはO(log n)ですが、スペースを作るためにすべてを動かす必要があるので、実際にはO(n)を挿入します。 –

+0

バイナリヒープ、バイナリヒープ、レイジーバイナリヒープ、ファイブヒープについて学習した後、この問題が発生したので、その答えはそれらのデータ構造のアイデアを使用するべきだと思います。 上記の複雑さに応じて、フィックスヒープを使用することが考えられますが、フィックスの最小値の代わりにmaxを販売し、フィックスのキーを減らす代わりに情報を増やすことで、ソリューションを完了することが難しくなります。 – user7370059

関連する問題