タグ

randomに関するSnowCaitのブックマーク (4)

  • MySQLでSQLのみを使用してランダム取得を劇的に早くする方法 - 僕のススメ。

    MySQLでランダムに20行をとるためには以下のようにやればいい。 SELECT * FROM table_name ORDER BY RAND() LIMIT 0, 20; 簡単に取得できるのはいいんだけど、行数が増えると劇的に遅い。どれくらい違うかって言うと10万行のデータベースでも↓ぐらい違う。 表示中の列 0 - 19 (20 合計, クエリの実行時間 0.0070 秒) SELECT * FROM table_name LIMIT 0 , 20 表示中の列 0 - 19 (20 合計, クエリの実行時間 1.1884 秒) SELECT * FROM table_name ORDER BY RAND() LIMIT 0, 20; なんでこんなに時間がかかるのかと調べてみると、どうも*を使うから遅いらしい。ということで、列名に主キーを指定して試してみる。 表示中の列 0 - 19

    MySQLでSQLのみを使用してランダム取得を劇的に早くする方法 - 僕のススメ。
  • LINQでIE<T>からランダムに要素を取り出す - Qiita

    を実装すると便利ですね。 今回は3種類のRandom()の実装を要素数100000の整数の列挙に対して1000回行った実行時間でパフォーマンスを比較しますが、IE<T>の内部実装によって挙動が変わるかもしれないので、サンプルの方も、 IE<T>型、配列型、List<T>型の3種類を用意しました。最終的なコードがこちら using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; namespace RandomPerformance { class Program { static void Main(string[] args) { var sw = new Stopwatch(); //IE<int> var sample1

    LINQでIE<T>からランダムに要素を取り出す - Qiita
  • neue cc - C#とランダム

    古くて新しいわけはない昔ながらのSystem.Randomのお話。Randomのコンストラクタは二種類あって、seed引数アリの場合は必ず同じ順序で数値を返すようになります。 // 何度実行しても同じ結果 var rand = new Random(0); Console.WriteLine(rand.Next()); // 1559595546 Console.WriteLine(rand.Next()); // 1755192844 Console.WriteLine(rand.Next()); // 1649316166 例えばゲームのリプレイなどは、ランダムだけど同一の結果が得られることを期待したいわけなので、大事大事ですね。(とはいえ、Windows-CLIとLinux-monoでは結果が違ったりするので、マルチプラットフォームでの共有などという場合は、別策を取ったほうがよさそう

  • 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); しかしこの方法では全体をソートするので,デ

  • 1