タグ

algorithmに関するnipotanのブックマーク (16)

  • nabokov7; rehash : 意外に奥が深いシャッフルアルゴリズム

    October 25, 201014:30 カテゴリプログラミング 意外に奥が深いシャッフルアルゴリズム 前の記事に引き続き,ブログチームの「シャッフルのお時間」の話をします。 毎週の進捗ミーティングのあと,次の週の監視(レビュー)相手を決めるためにシャッフルを行うのですが,ここはプログラマ集団。くじ引きとかではなく,ワンライナーでさらっとシャッフルのプログラムなどを走らせて決めたいものですよね。 ということで,進捗ミーティングの最後はシャッフルのお時間と呼ばれ,誰かひとりがプロジェクタにつながったマシン上でライブコーディングをし,その出力結果によって次週の監視相手が決まる,という儀式の時間になりました。 シャッフルの基のきまりは以下の通りです。メンバー名の配列を入力とし,「見る人→見られる人」の組み合わせを出力するプログラムを書く。「自分自身を担当する人」が発生してはダメ。その場でコー

  • MapReduce - naoyaのはてなダイアリー

    "MapReduce" は Google のバックエンドで利用されている並列計算システムです。検索エンジンのインデックス作成をはじめとする、大規模な入力データに対するバッチ処理を想定して作られたシステムです。 MapReduce の面白いところは、map() と reduce() という二つの関数の組み合わせを定義するだけで、大規模データに対する様々な計算問題を解決することができる点です。 MapReduce の計算モデル map() にはその計算問題のデータとしての key-value ペアが次々に渡ってきます。map() では key-value 値のペアを異なる複数の key-value ペアに変換します。reduce() には、map() で作った key-value ペアを同一の key で束ねたものが順番に渡ってきます。その key-values ペアを任意の形式に変換すること

    MapReduce - naoyaのはてなダイアリー
  • 最速インターフェース研究会 :: Mozilla24でしゃべってきました

    9/15日にMozilla 24 出張Shibuya.js 24でしゃべってきました。 http://shibuyajs.org/articles/2007/08/24/Shibuya-js-24 資料はこちら。 http://ma.la/files/shibuya.js/mozilla24.html JavaScriptBloom filterのデモ。今のところ実用性が無い。仕組みを理解するのには良いかも。 http://la.ma.la/misc/js/bloomfilter/ Bloom Filterについてはここら辺が詳しい。 http://chasen.org/~taku/blog/archives/2006/01/bloom_filter_1.html http://ja.wikipedia.org/wiki/%E3%83%96%E3%83%AB%E3%83%BC%E3%83

  • mixi Engineers’ Blog » OpenSSLの暗号文をJava/Perl/Rubyで開く

    秘密鍵やプライベートな情報などを秘匿するためにパスワードでデータを暗号化・復号したい場合があります。このとき、暗号化と復号するアプリケーションが同じであれば簡単ですが、例えばCで暗号化してJavaPerlRubyで復号するといった風に異なるプラットフォームで暗号データをやりとりする場合には、いくつか気 をつけなければいけないポイントがあります。 OpenSSLによる暗号化 OpenSSLはWebサーバのSSL/TLSサポートに利用されますが、その他にも付属しているopensslコマンドから基的な暗号アルゴリズムを利用できます。次のような簡単なコマンドで、パスワードを使ってデータを暗号化したり復号したりすることができます: $ echo 'Hello World!' | openssl enc -e -aes-128-cbc > cipher.txt enter aes-128-cbc

    mixi Engineers’ Blog » OpenSSLの暗号文をJava/Perl/Rubyで開く
  • Yet Another Hackadelic - 直積の導出と考えうる全ての値を網羅したハッシュの生成

    昨日から激しく悩んでいた内容で、id:kazuhookuさんとnishioさんに色々教わったので、その内容のまとめ。 やりたい事 my $entries = { A => [0..5], B => ["A".."D"], C => ["a".."c"] }; みたいな集合A, B, Cってのがあるとして、A, B, Cから一個ずつ値を抽出してくる組合せを列挙すると言うお話。 ちなみに場合の数として、6 * 4 * 3 = 72 通り存在するハズです。 List::Utilのreduceを使う id:kazuhookuさん案を適当に整形。 #!/usr/bin/perl use strict; use warnings; use Data::Dump qw(dump); use List::Util qw(reduce); my $entries = { A => [0..5], B =>

    Yet Another Hackadelic - 直積の導出と考えうる全ての値を網羅したハッシュの生成
  • 第10回 麻雀の役を判定する:ITpro

    図1に示す(1)から(3)までの麻雀(マージャン)の手牌があります。「あがり牌」はすべて山からツモったものとし,リーチはかけていません。またドラやハイテイ*1なども関係ないものとします。これらの役を判定して,親の場合の点数を計算するプログラムを作ってください。 「ややこしや~ややこしや~」というのは野村萬斎ですが,思わずそううなってしまうことがプログラミングをしているとよくあります。今回の麻雀の役判定は,考えれば考えていくほどややこしく,そうしたものの代表と言えるでしょう。排他処理や優先順位が複雑にからんでいて一筋縄ではいきません。 今回はややこしい組み合わせを解決する方法を考えてみます。麻雀になじみのない方も,ちょっとしたパズル気分で試してみてください。 麻雀の役を考える 麻雀を知らない方のためにルールをおおざっぱに説明しておきましょう*2。麻雀の牌には,大きく分けて「萬子(マンズ)」「

    第10回 麻雀の役を判定する:ITpro
  • perl - 勝手に添削^2 - loop control : 404 Blog Not Found

    2007年04月19日04:15 カテゴリLightweight Languages perl - 勝手に添削^2 - loop control 他にもつっこみどころはあるのですが今回は、loop controlに的を絞って。 Perl Best Practices Damian Conway [邦訳:Perlベストプラクティス] ここギコ!: 安易なループは慎むべきですね jnaoyaのはてな日記 - 添削その2 [H.Iさんのコメントを受け加筆訂正アリ] まずは、DCONWAY先生の一言から。Loopに関する黄金則です。Perl以外でも有効。 Reject As many iterations as possible, as early as possible. 繰り返しは排除せよ、それもなるべく早い段階で 以下をご覧下さい。 jnaoyaのはてな日記 - 添削その2 while (m

    perl - 勝手に添削^2 - loop control : 404 Blog Not Found
  • JavaScript でソートアルゴリズムを可視化 - bkブログ

    JavaScript でソートアルゴリズムを可視化 JavaScript でソートアルゴリズムを可視化するプログラムを書いてみました。元ネタは Jon Bentley による ソートアルゴリズムを可視化する Java アプレットです。 アルゴリズム 要素数 動作確認は Firefox 2, IE 7, Opera 9 で行いました。要素数は最大で200まで選べますが、かなり重くなるので遅いマシンで実行すると危険です。 English version is also available. ソースコード: sort-animation.js 解説 X軸が配列の添え字、Y軸が配列の要素の値を示しています。最初に要素がランダムに並んでいる配列 (値に重複なし) を作って、それを各種のソートアルゴリズムでソートする様子をアニメーションで表示します。 ただし、要素のあらゆる変更に対して毎回表示を更新し

  • perl - for(1..1e10) と Iterator : 404 Blog Not Found

    2006年12月22日11:00 カテゴリLiving on the Edge perl - for(1..1e10) と Iterator いい点に気づかれました。 perl の配列とメモリー: 国民宿舎はらぺこ 大浴場 面白いな、と思ったのは、上記リンク先の話題を手元で試していたときに、 @data = map { rand 10 } (1..1e7); $sum += $_ for @data; だとメモリーを喰いまくるのに、 $sum += rand 10 for 1..1e7; だとほとんどメモリーを喰わないこと。 実は、foreach($from..$to)は、Perl 5.005以来最適化されています。 perl5005delta - what's new for perl5.005 - search.cpan.org foreach (1..1000000) optimiz

    perl - for(1..1e10) と Iterator : 404 Blog Not Found
  • 404 Blog Not Found:javascript - Array#sortがオレquicksortより遅い!?

    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

    404 Blog Not Found:javascript - Array#sortがオレquicksortより遅い!?
  • Class::Data::Accessor と Class::Data::Inheritable は個人的には継承しなくてもいいと思う(継承せずに使う) - IT戦記

    Class::C3 を使うと継承順がかなりセンシティブになる。 たとえば、普段から Class::Accessor::Fast と Class::Data::Inheritable を同時に継承する場合にどちらが先かというのは、そんなに意識しないと思います。(僕はしません) でも、Class::C3 を使う場合は、同じツリー内に継承順の矛盾があると実行できなくなってしまいます。(d:id:amachang:20061007:1160232763) たとえば、以下のクラス郡とクラス群は同時に Class::C3 で呼べないことになる。 Class::Data::Inheritable が先 http://google.com/codesearch?q=Class%3A%3AData%3A%3AInheritable%5Cs%2BClass%3A%3AAccessor%3A%3AFast Cl

    Class::Data::Accessor と Class::Data::Inheritable は個人的には継承しなくてもいいと思う(継承せずに使う) - IT戦記
  • Class::C3, Algorithm::C3 を勉強したよ! - IT戦記

    DBIx::Class を少し使ったことがあったので Class::C3 をなんとなくで理解していたんです。(ふーん幅優先版の NEXT モジュールでしょ?みたいな感じで。) でも、これは絶対にちゃんと細かい挙動まで勉強しといたほうがいいと思いました。 多重継承とか mixin とかに強くなりたいなと C3 C3 というのは Python 2.3 のドキュメントに書いてある MRO(Method Resolution Order 多重継承したときにどんな感じでメソッドを探索するかという順番) を決めるアルゴリズムで。Algorithm::C3 っていうのがそのアルゴリズムの Perl 実装なんです。 それに! Parrot でも使えるみたいだし! ちなみに MRO ってこんな感じね A には add というメソッドがある B にも add というメソッドがある C は A と B を多重継

    Class::C3, Algorithm::C3 を勉強したよ! - IT戦記
  • javascript - シャッフルシャッフル : 404 Blog Not Found

    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 }); } でも、実践ではどうだろう。調べてみた。

    javascript - シャッフルシャッフル : 404 Blog Not Found
  • 最速インターフェース研究会 :: 実践JavaScriptで配列をシャッフルする方法リファクタリング

    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 ごく普通に実装

  • データへの最短ルートを確保せよ!(1/4) ― @IT

    前回「システムの寿命はコードで決まる!」ではコード設計について解説しました。今回はデータへの最短ルート、つまりSQLの最も効率的なアクセスパス(実行計画)を見つけ出すためのテクニックを解説します。 SQLはデータベースに関する最も基的な技術で、まずSQLから学んだ(でいる)という方は多いと思います。しかし、SQLを学ぶ際、データベースから必要なデータを取得する手段を学んでも、どのようなアクセスパスでデータを取得するかは後回しになることが多いのではないでしょうか。 商用のシステムで使用されるSQLは、必要なデータを取得できるだけでは不十分で、どれだけ素早く取得できるかも重要です。データ取得の素早さは、SQLに適用されるアクセスパスの良しあしで決まります。そこで、今回は「どんなアクセスパスが適しているか」「どうやってRDBMSに適切なアクセスパスを利用させるか」を以下のような構成で解説します

    データへの最短ルートを確保せよ!(1/4) ― @IT
  • プログラムを2倍から4倍早くする方法 - GIGAZINE

    プログラミングの話なので、ソフトウェアを使うだけのユーザーには関係ない話です。 要するに実行速度の遅いプログラムを2倍から4倍高速化させるには非常に基的なトリックというか技術を使えば可能ですよ、というお話。 アルゴリズムの考え方なので、仕事上どうしてもプログラムの実行速度を上昇させる必要があるが、やり方がイマイチよく分からないという人は必見。 Dr. Dobb's | An Algorithm for Compressing Space and Time | 3 1, 2006 かの有名な「ライフゲーム」を例に出し、プログラミングのコードの内容を高速化するにはどういうアプローチを取ればいいのか、その際に使用する再帰的アルゴリズムの考え方、複雑な式を簡単な式に圧縮する方法、圧縮することで実行時間の節約が可能になること、などをやたら詳細に解説しています。 ぶっちゃけ、これが理解できるのであれ

    プログラムを2倍から4倍早くする方法 - GIGAZINE
    nipotan
    nipotan 2007/08/13
    ひどい釣りタイトルを見た
  • 1