タグ

関連タグで絞り込む (2)

タグの絞り込みを解除

AlgorithmとLINQに関するunaristのブックマーク (1)

  • LINQ で重複なしのランダムサンプリング - 捨てられたブログ

    LINQ で重複なしのランダムサンプリング[A]を行うもっとも単純な方法は,おそらくランダムに並び替えて先頭から所望の数だけ要素を取り出す方法でしょう。 var random = new Random(); source.OrderBy(_ => random.NextDouble()).Take(n); 重み付きでサンプリングしたい場合は乱数に重みを与えて大きい順に取り出します。 source.Zip(weight, (x, w) => new { Value = x, Weight = w }) .OrderByDescending(x => { var u = random.NextDouble(); return Math.Pow(u, 1.0 / x.Weight); }) .Take(n) .Select(x => x.Value); しかしこの方法では全体をソートするので,デ

    unarist
    unarist 2015/02/13
    取り出したい量のバッファにランダム挿入していって、溢れた分は無視。OrderByで全体をソートするよりも計算量とメモリ効率が良い。
  • 1