データ ポイントに対するイテレータit
、データ ポイントの数、n
計算に使用するサンプルの最大数 ( maxSamples
) が与えられます。
関数を想像してみてくださいcalculateStatistics(Iterator it, int n, int maxSamples)
。この関数は、反復子を使用してデータを取得し、取得したデータ要素に対していくつかの (重い) 計算を実行する必要があります。
n <= maxSamples
もちろん、イテレータから取得した各要素を使用する場合n > maxSamples
見る要素とスキップする要素を選択する必要がある場合
私はこれにかなりの時間を費やしてきました。問題はもちろん、要素をスキップするタイミングと保持するタイミングをどのように選択するかです。これまでの私のアプローチ:
maxSamples
値が均等に分散されない可能性があるため、イテレータから最初に取得したくありません。- もう 1 つのアイデアは、乱数ジェネレーターを使用して、 と の間の (異なる) 乱数を作成し
maxSamples
、これらの位置の要素を取得することでした。しかし、たとえば、まだリストにない新しい固有の番号を見つけることがますます難しくなり、乱数の生成だけで多くの時間を失う場合0
n
n = 101
maxSamples = 100
- 私の最後のアイデアは、逆のことをすることでした:
n - maxSamples
乱数を生成し、これらの位置要素のデータ要素を除外します。しかし、これもあまり良い解決策ではないようです。
この問題について良いアイデアはありますか?これにはおそらく標準的な既知のアルゴリズムがありますか?