以下を実行するための効率的なアルゴリズムを探しています: N 個の項目の配列が与えられた場合、項目が M 個の等しいグループになるように並べ替えます。各グループは並べ替えられていませんが、グループは互いに並べ替えられています (すべての要素)あるグループの要素は、次のグループのどの要素よりも少ない)。
最も簡単な方法は、配列全体をソートすることです。しかし、特にグループの数が項目の総数よりもはるかに少ない場合 (たとえば、100 万の項目を 5 つのグループに分類する場合) は非効率的です。
現在、配列を2つのソートされていないグループにソートし、それをM-1回適用するquickselectアルゴリズム(具体的にはFloyd-Rivestのバリエーション)を使用することに決めました。大幅な改善は、クイック選択に分割統治法を適用することです。最初に配列を 2 つのグループにソートし、次に各半分をソートするというように、M 個のグループが得られるまで続けます。順序付けられていない部分的な並べ替えの問題の一種の一般化。
しかし、私は、この問題に対するより単純で効率的なアプローチがあるかもしれないという直感を持っています。足りないものはありますか?何か案は?これは、 RBush JavaScript ライブラリ(効率的な R* ツリーの実装)での一括挿入のパフォーマンスを向上させるために必要です。