2006年08月30日18:30 カテゴリLightweight Languages javascript - シャッフルシャッフル なるほど。Schwartzian Transformの意外な利用法だなあ。 snippets from shinichitomita’s journal - JavaScriptの配列をsort関数でシャッフルする Array.prototype.shuffle = function() { return this.map(function(a){ return { weight: Math.random(), value: a } }) .sort(function(a, b){ return a.weight - b.weight }) .map(function(a){ return a.value }); } でも、実践ではどうだろう。調べてみた。
モンテカルロ法で計算するときには、乱数の質についての話題がよく出てきます。 乱数に偏りがあると、正確な推定ができなくなるためです。 で、C言語標準のrand関数はあまり乱数の質が良くなくて、サンプリングする方向に偏りができてしまうとのことです。 そこで、別の乱数生成法を用いるのですが、レンダラ関係ではメルセンヌツイスタがよく用いられています。 が、今回はコチラ↓の記事で見かけたxorshift法というのを試してみました。 http://lucille.atso-net.jp/wiki/index.php?%CD%F0%BF%F4 xorshift法はxorとシフト演算のみで超高速に疑似乱数を生成するものです。 パストレなどでは、ロシアンルーレットで反射方向を決める際など、多くの場所で乱数を生成する必要があります。なので、xorshiftを用いることで高速化ができないかな、と思いxorshi
JavaScriptで配列をシャッフルする話を見て、そういえばArray#shuffleは以前書いた記憶があるなーと思って調べてみたらコピペだった。 http://www.fumiononaka.com/TechNotes/Flash/FN0212002.html Fisher-Yatesというアルゴリズムだそうです。 Array.prototype.shuffle = function() { var i = this.length; while(i){ var j = Math.floor(Math.random()*i); var t = this[--i]; this[i] = this[j]; this[j] = t; } return this; } a = [1,2,3,4,5]; a.shuffle() // 3,1,5,2,4 a // 3,1,5,2,4 ごく普通に実装
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く