0

パラメータを含むを取得しArrayList<Conference> conferences、次のように並べ替える必要があります。まず、会議を の一意の月を表すバケットに分けてから、バケット内でそれ自体を並べ替えます。これは一般的なニーズだと確信しているので、ここの誰かがいくつかのヒントを持っていることを望んでいました.Conferencepublic Date beginDatebeginDatebeginDate

これに対する私の考えは次のとおりです。最適ではない理由を教えてください:)

  1. を作成しますHashMap<Date, ArrayList<Conference>>
  2. 繰り返しconferences、特別な静的関数を使用して、その月の最初の日を見つけ、そのためのbeginDateがあるかどうかを確認ArrayList<Conference>Dateます。ArrayList次に、それらをそのfor に追加しますDate( は同じであるため、すべて同じである必要がありますfirst_day_of_month(any_day_in_month)
  3. の各ArrayListメンバーを繰り返しHashMap処理し、標準の並べ替え手順を使用しArrayListて日付で並べ替えます。

これは必要以上に複雑に思えますが、なぜ悪いのか、どうすれば修正できるのか教えてください。

編集:また、それが重要な場合は、最終的にそれらすべてをコモンズウェアに追加する必要がありArrayListますArrayAdapter... MergeAdapter:(

4

1 に答える 1

3

月初からの日付でソートすると、その月のエントリはどちらの方法でもそれ以降になります。最初の並べ替えの後、エントリが新しい月の最初のものである場合は、すべてのエントリを繰り返し、人為的な「分割」を行うことができます。そのような差別化を行う必要があるかどうかもわかりません(おそらく、質問がこれについて少し曖昧であるためです)。

提案されたアルゴリズムの全体の複雑さは ですO(nlog n)。ここnで、 は要素の数であり、もちろんこれ以上の解決策はありません。

ところで、このアルゴリズムは、操作の複雑さにおいて、あなたが提案したものよりも優れています。

于 2012-04-30T19:25:04.557 に答える