それぞれ見て行きます。1番目に処刑される人は、3番目の人です。2番目に処刑されるのは、6ですが、これはnより大きいので、もともといる位置に変換します。n)を見ると1なので、1番目の人です。3番目に処刑されるのは、9ですが、これも同様に対応位置に変換して5になります。2と変換されるので、2番目の人です。4)の順で処刑されるということです。数学2011年11月10日木曜日アセンブラを出力して遊ぶ簡単なプログラムをアセンブラで出力して、スタックの動きを追ってみます。簡単なプログラムですが、結構面白いです。Cのソースコード(test.c)。k);}そして、アセンブラ(test.s)。test.cでアセンブラのコードを出力できます。.note.GNU-stack,"",@progbitsいろいろ分かることがあります。スタックのアドレスが番地の大きい方から小さいほうへと広がっているところです。これはx86マシンでは共通だと昔聞いたことがあります。alignmentを使っているようです。FFFFFFF0でマスキングして16の倍数になる次の数をスタックポインタに代入しています。これだとベースポインタとスタックポインタの整合性があわないようにみえるんですけど、結局ベースポインタ使ってないし、リターンする時ベースポインタをスタックポインタに戻す処理も省略されてるので別にいいような気もします。意外だったのは、スタック内の変数にスタックポインタからの差分でアクセスしているところです。スタックポインタは実行時に移動するから、ベースポインタからの差分で変数にアクセスするのが普通かと思いましたが、そうでもないみたいです。あと、最後にprintfの可変長引数のところの仕組みがおもしろいです。引数の%dが3つあるんで、第一引数をpopしたあと、3回popすればいいんですねー。当然といえば当然ですが、実際コード上でみるとちょっとした感動がありました。printfがcallされるときのstackの状態は下のようになっています。eNil最近、素数に関するNHKのドキュメンタリーを見た。それそれは、もう、感動でした。宇宙の神秘、数学の美に魅せられました。~リーマン予想・天才たちの闘い~』です。素数とは何か?それ自身と1以外に約数を持たない正の整数のことです。2,3,5,7,11,13....と無限に続きます。この素数列の並びはランダムに見えます。2人の有名な数学者が素数と自然界においてとても重要な数を結びつけました。レオンハルト・オイラーは、素数と円周率πの間に以下の関係を見出しました。ランダムに見える素数に関する式を無限個掛けあわせると、なんと世界で最も美しい数πがでてくるのです。これによって、オイラーは素数と円や球体が何らかの関係を持っていることを発見しました。それから、カール・フリードリヒ・ガウスは、ある正数xまでに現れる素数の数は以下の式で近似できることを発見しました。いわゆる素数定理ってやつですね。ln()は自然対数で、その底はeです。eは、カタツムリの渦巻き、台風、銀河なのどの自然界で多くみられる螺旋形状と関連のある数字です。オイラーとガウスの手によって、ランダムな素数が数のキングおよびクイーンと関連付けられました。素数と自然界には何らかの関係があるのではと考えられるようになったのです。その考えはベルンハント・リーマンによって『何らかの関係がある』から以下のような数学的な問題へと変換されました。ゼータ関数の非自明な零点は一直線上に並ぶ。ゼータ関数が零になるようなx(複素数)を複素平面上にプロットすると、なんとそれが一直線上に並ぶというのです。NP予想などと同様にミレニアム懸賞問題の一つです。たちがその証明を試みましたが、失敗に終わっています。時は流れて、違ったアプローチでリーマン予想にチャレンジする数学者が現れました。ヒュー・モンゴメリーは、直線状にならぶ零点の間隔に興味をもちました。出会った物理学者フリーマン・ダイソンに零点の間隔の式を見せた時に、ダイソンは言いました。素数と量子力学の世界、まったく異なる分野が一つになった瞬間でした。この発見を機に、多くの物理学者がゼータ関数の零点と同じ間隔をもった原子を探すようになりました。すると今度は、非可換幾何学というまったく異なる学問を研究しているアラン・コンヌが閃いたのです。「モンゴメリーの発見を発端として、物理学者たちは素数と関連をもつ空間をさがしている。量子力学を書き変え森羅万象の原理を説明する究極の法則『万物の理論』の基礎になると期待されていた学問でした。宇宙の創生と素数が繋がっていることを示す非常に興味深い話です!ある数学者はいいます。「非可換幾何学を使って素数の謎がとかれるとき、森羅万象を説明する万物の理論--いわば創造主による宇宙の設計図--も明らかになるだろう。2011『Webの世界はすさまじい速度で進化してきた。次世代のWebがどのようなものになるのか私は分からない。次世代の新しいWebはこの部屋にいる技術者たちによって作られだろう。未来のビジネスはあなた方がつくった新しい仕組みのうえで展開される。2011が横浜で開催されました。Googleの製品へ高い貢献をしているDeveloper、およびDevQuizで高得点を取り招待状をゲットしたエンジニア、約2000人が一同に会しました。Speech、午後は複数のSessionが同時進行するという形で構成されていました。EngineHTML5Google+などの技術の最新動向が発表されました。技術者同士が会話をしたり、Googleのエンジニアとコミュニケーションを取ったりできるような工夫が施されており、とても楽しいイベントでした。私自身も、缶バッジ交換のおかげでゲーム業界のエンジニアの人とお話することができ非常にいい経験となりました。私の印象に残ったのは以下の3点です。『これからのWebのサービスにおいて重要なものは、どうスケールするか、そして如何に柔軟な開発スタイルを取り入れていくかだ。』特に、アジャイル開発の重要性に関しては、Googleの東日本大震災に対する取り組みの中でも語られました。アジャイル開発を行うためには、プロトタイピング力を持ったエンジニアの存在が絶対条件だと思います。浮かんだアイディアをすぐに実装できるエンジニアは日本には決定的に少ないように感じます。これはそもそも、日本のシステム業界(とりわけSIer業界?)が要件定義/設計/開発/テスト/保守のように縦割りになっていることが原因じゃないかと。要件定義はできるけど、fizzbuzzも書けないエンジニア。開発はできるけど要件がまったく分からないエンジニア。アジャイル開発を取り入れるためには、まずこのあたりの体質を変えていく必要があるのかなと思いました。これは、単純にいいな~と(羨ましいなと)。会社のスローガンって見栄えだけ綺麗で中身が伴っていないことがしばしばありますが、Googleが大切にしているという以下の三箇条は本物だなと感じました。「Googleのクライシスレスポンス」というSessionで、東日本大震災に対するGoogleの取り組みが語られました。『すべてが自動化された完璧なシステムを届ける必要はない。人達が欲していたのは、スマートフォン上で起動するアプリでもクラウド上で動作するアプリでもなかった。エクセルやアクセスといったごく単純な技術だった。技術者として最新技術を追うことや完璧を求めることも大事だけど、今自分が持っている技術がどう世の中に役に立つのかと考えて実践するというのは本質的により重要なことだなと改めて考えさせられました。自分の技術なんて大したことないやと卑屈にならずに、少しでも世の中が変わる、少しでも世の中に役に立つはずと信じてサービスを提供していきたいなと思いました。interact$(`take`cycle"abcd").readinteract使って書くとごちゃごちゃしそうだったので、doブロックで書いた。Control.MonadのliftMは便利。bjinさんはゴルフ好きな感じである。operationにしてセクション(二項演算子の部分適用をするための手法)を実現してるのは面白いテクニックだなーと。Abacondaモナドを実装したり、メモ化したり、コンビネータを書いたりとかしたけど、Haskellらしいコードが全然書けない。一応は動くものは書けるけど、どうも命令型で関数型っぽくない。いうことで、Haskellらしいコードが書けるように修行する。"らしい"コードを書けるようになるためには、素晴らしいプログラマが書いた"らしい"コードをたくさん読んで吸収していくのが一番じゃないかなと思う。いうことで、しばらく以下をやっていこうと思います。(g.toLower)ポイント:elemconcatMapinteract”Haskellらしい”うんぬんより、まず便利な関数を覚えていくところからかな。教えてもらったので忘れないうちにメモ。MySQLのポートを調べたいときは、以下のようにします。TCPlsofはプロセスによって開かれているファイルの情報を出力するらしいです。ここでいう"ファイル"とは、通常のファイルやディレクトリ、さらにはライブラリ、ストリーム、ネットワークファイルまで含まれます。-Pオプションは、ポート番号をポートの名前(サービス名)に変換するのを抑制するという意味です。(LISTEN)のようにポートの番号で表示されます。調べてみたところ、-iオプションというものもあって、これを使うとネットワーク関連の情報だけを取り出せます。上のコマンドは以下のようにしてもいいです。mysqllsofの他にも、socklistというコマンドがあるみたい。socklistとすると、lsofと同様に通信プロトコル、ポート番号、プロセスID、サービス名などが表示されます。こっちの方が楽ですねー。y)の発生確率が二次元正規分布に従う事象をサンプリングしてみます。この分布はグラフに書くと下のようになります。この確率分布に従う乱数を発生させたいと思います。今回は一番簡単なメトロポリス法を用いて推移確率を決定します。Haskellで書きました。自分の実力足らずでいろいろとやばいです。IOモナドのところが何かぎこちないです。Haskellもっと勉強しないとっ。0)それっぽい形になっています。1に近づいていくでしょう。数学2011年10月22日土曜日MCMC入門まとめマルコフ連鎖モンテカルロシミュレーション(MCMC)の入門資料をいくつか読んだので、分かったことと考えたことをメモしておく。不定分布が分かっているものから、マルコフ性を仮定して遷移確率を推定する。適当な初期条件を選んで、1.の推移確率を用いて推移させる。十分な回数ループしたら終了。なければ、2.へ戻る。ある特定の不定分布におちつく遷移確率行列は複数あることに注意。推移確率の選定には「詳細釣り合い」の条件(状態遷移図を書いたときに、確率のフローのようなものが釣り合っていると考える)が一般的に使われる。詳細釣り合いだけでは、自由度が残り値がfixしないため以下いずれかの方法で値を決める。いろいろな初期解に対するある時刻における各事象の発生確率(パターン数を無限にする)と、ある初期解について無限回推移させた場合の各事象の発生確率が等しくなる(エルゴード性)という特性が活かされている。1)にしたがう乱数とか、もっとわけの分からない適当なp(x)にしたがう乱数発生器を作れて言われると難しい。MCMCを用いると、簡単に任意の乱数発生器を作成できる。2.は、1.の応用のように思える。事象xが起こる確率をp(x)としてf(x)の期待値を求めよ。d(x)を計算することになるが、xの次元が大きいと計算が困難なためMCMCを利用したモンテカルロ積分がしばしば利用される。[考えたこと]MCMCはマルコフ性のある事象に対するシミュレーション手法だと勘違いしていたが、どちらかというと任意の確率分布にしたがうサンプリングデータを生成できるということに利用価値がありそうだ。MCMCでマルコフ性のある事象をシミュレーションする場合は、確率遷移行列の選び方がとても重要だと思う。パラメータの取り方に自由度があるメトロポリスヘイスティングが一番使えそうだが、提案密度の選び方にはどうしても主観が入ってしまいそう。MCMCはベイズ識別にも応用されているらしいので、そのあたりを詳しく調べる必要がありそうだ。(というかそこがそもそも知りたかったところなので。確率遷移行列の形と定常状態マルコフ性(単純マルコフ過程)をもつ事象がある確率推移のもと、どのような定常状態に落ち着くのか実験してみた。Haskellで書きました。いうのはHaskellが綺麗に書けますねー。収束時の事象の分布をxnとおきます。