はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
配列をシャッフル、つまりランダムに要素の位置を入れ替えるというのを、sortメソッドを使ってやってみたのだけど、明らかにダメダメなものになってしまった。その後、あーでもないこーでもないと考えたのだけど、算数が得意すぎて頭が痛くなった。ということを某所でぼやいたらはてのくんがコードを見つけてくれた。どうやらFisher-Yatesという有名なアルゴリズムでやると良いらしい。 最初に書いたコードは、 var a = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); a.sort( function (a, b) { return Math.ceil(Math.random() * 3) - 2; } ); というもの。sortメソッドは、パラメータに与えられた関数が負の値・0・正の値を返すことによって要素の順序を決定するので、その関数がランダムに値を返せばランダ
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 ごく普通に実装
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 }); } でも、実践ではどうだろう。調べてみた。
あえて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 }); }とりあえずFirefox1.5でOK。IEでもmap関数を自分で定義してやれば大丈夫のはず。 置換によるシャッフルと違って、weight値のところを適当に変化させれば、要素ごとに重みづけてのシャッフルもできると思う。たとえばよく聞く曲は優先的に前の方に持ってくるとか、その逆と
前のエントリのトラックバックが相手方になぜか反映されないのですが、言及していただけました。 404 Blog Not Found:perl - the sort pragma 「マージソートだから遅いわけじゃない」ってことが書いてありました*1。なるほど。 せっかくなので、マージソートもJavaScriptで作ってみました。 var msort = function(ary, cmp) { var aux = new Array(ary.length); for(var i=0,n=ary.length;i<n;i++) { aux[i] = ary[i]; } function m(src, dest, low, high, cmp) { var len = high - low; if(len <= 1) { return; } else { var mid = (high + low
404 Blog Not Found:javascript - Array#sortがオレquicksortより遅い!?について コメントしようと思ったけどちょっと長くなったのでTrackbackに。 コメントには"Perl-inspired"とあって使っているのはmerge sortなのだけど、なぜこんなに遅いのか、これだけじゃまだわからないなあ。 遅いのはマージソートだからでいいのでは? (注:これは間違でした。次のエントリも参照してください。) 計算量で言えばクイックソートもマージソートも同じO(nlog(n))ですが、現実的にはクイックソートの方が高速だと思います。例のAppletのデモでも見るからにクイックソートの方が速いですし。 では、なぜ遅いマージソートを使うのか。 同じくマージソートを採用している*1javaではjavadocに以下の記載があります。 このソートは固定である
2006年11月23日14:45 カテゴリLightweight Languages javascript - Array#sortがオレquicksortより遅い!? な、なんだってー!? ごっつええブログ - JavaScriptによるソートアルゴリズムの比較実験 『JavaScriptを使って一定以上の数量をもった数値配列をソートする場合は、組み込みメソッドよりもクイックソートを使用したほうが高速である』 自分でも検証してみた。 どうやらMozilla系列のJavaScript実装に関しては嘘ではないらしい。以下で確認してほしい。 Firefox 2に関してはほぼ同等だが、Mac IE 5, Safari 2.0.4, Opera 9.02ではbuiltinの方が速かった。しかしその差は最も大きかったSafariでも3倍程度で、builtinとしてはやはり遅いように見える。 # of
2006年11月03日05:30 カテゴリLightweight Languages javascript - Sorting Algorithms Sorting Algorithmsのデモと言えば、Java Appletによる有名なものがあります。 Sorting Algorithms Demo これの一部をJavaScriptでやってみようという試みです。 見ての通り、Bubble Sortとinsertion Sortしかありませんが、あとはSourceを見れば拡張も楽でしょう。というか、QuicksortとかMergesortとかといったRecursiveなものは、ただでさえcallbackを何度も読んで画面を書き直さなければならない現状のJavaScriptでは結構きついものがあります。 その代わり、Sortしている最中にAlgorithmを切り替えたりと面白いこともできます。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く