私は現在確率的最適化アルゴリズムを開発しており、次の問題に遭遇しました (これは他の場所にも現れると思います):完全に不安定な部分ソートと呼ばれる可能性があります:
サイズ n のコンテナとコンパレータが与えられ、エントリが等しく評価されるようにします。最良の k 個のエントリを返しますが、値が等しい場合、それらのいずれかを受け取る可能性は (ほぼ) 等しくなります。
(出力順序は私には関係ありません。つまり、最良の k の間で完全に等しい値をシャッフルする必要はありません。ただし、すべての等しい値をシャッフルすることは、関連する興味深い質問であり、十分です!)
非常に (!) 非効率的な方法はshuffle_randomly
and thenを使用することpartial_sort
ですが、実際には「選択境界で」同じ値のエントリのブロックをシャッフルするだけで済みます (同じ値のエントリのすべてのブロック、どちらもはるかに高速です)。多分その観察はどこから始めるべきか...
誰かが STL アルゴリズム (または少なくとも大部分) を使用したソリューションを提供できれば、非常に望ましいと思います。どちらも、通常は非常に高速で、適切にカプセル化され、OMP 並列化されているためです。
アイデアをお寄せいただきありがとうございます。