!文字列\(s\)から反転した文字列\(t\)を作成するとき、これまではコピーして反転という処理をしていました。!std::multisetをstd::priority_queueの代わりに使う実装例を目にしました。!縮約を伴ったUnion-Find木は高速に動作することで知られています。以下は蟻本からの抜粋です。STLをパラパラめくっていて、std::partial_sortのうまい用法を学びました(第31項「ソートの選択肢を知っておこう」)。!先日参加したコンテストで以下のような問題が出題されました1。シンプルなグラフがある。それぞれの頂点は最大で100個ほどのグループに分けられている。各頂点から各グループの頂点までの最短距離を求めよ。頂点の最大数は\(10^{5}\)である。Algorithmコンテストに参加していると、数列の部分的に降順になっている区間を列挙することを求められることがままあるのですが、苦手意識がありました。24]を列挙することです。この小問題、自分にはなかなか難しいものでした。Algorithmyambe2002さんの記事に面白い問題が掲載されていたことをふと思い出して、考えてみました。こちらは所謂「ホワイトボードコーディング」で出題された問題だそうです。!累積和を実装するとき、いつもインデックスの扱いに悩んでしまいます。イディオムとしてまとめようと思いました。0-indexの配列、\(a_i\)があるとします。!std::stringとして与えられた文字列がある特定の文字列から始まるかどうかを記述するのは簡単なことのように思えます。これが自分にとっては意外に難しく、いつも時間を割いてしまうのです。!1行シェルスクリプトとEmacsで極力物事を済ます方針になって久しいのですが、コンテスト中は時間がないので多少のスクリプトを用意しています。先日コンテスト中にこんなスクリプトがあったらいいなあ、と考えついたので早速作成しました。!今日参加したコンテストで有効な電話番号の組み合わせ数を求める問題が出題されました。longの大きな値、例えば\(10^{17}\)から小さな値、例えば10や1を引く演算を行う必要がありました。!先日参加したコンテストにこんな問題が出題されました。排他的論理和を使う問題です。n個の異なる整数のビットごとに排他的論理和を取ってxとなるようにしたい。プログラムを書いているとき、思ったことが思った計算量でできることは分かっているのに細かい処理がパッと書けないことってありますよね。!大津の方法の最も有名な応用例として画像の2値化が挙げられます。!異なるn個のものから異なるk個のものを選ぶ組み合わせは以下のように計算することができます。階乗を使うとより簡潔に書くことができます。シンプルに見えますよね。計算機で組み合わせの計算を行うのは意外と厄介なのです。!定理を素早く思い出したりするために自分にとっての「定型」の問題を用意しておくことがままあります。「モンティホール問題」が特に有名なので、それを「定型」としている方もいらっしゃるのではないでしょうか。!回文に関連する実装が苦手です。回文について考えなければならないときはいつも気が重かったのですが、与えられた文字列から回文となる部分文字列を列挙する方法を@nico_shindanninさんがニコニコ生放送で解説していらっしゃいました。!STLやPythonで範囲指定の多くは左閉半開区間を基調にしています。std::string::substrでの範囲指定は大きく異なり、戸惑います。気が付くと実装時に繰り返し同じことを考え、無駄を感じていたのでまとめてみました。!エラトステネスの櫛はN以下の素数を列挙するアルゴリズムとして知られています。素数を列挙するナイーブな実装を行い、計算量を落としていきながらエラトステネスの櫛を考えてみることにします。次の実装の計算量はO(N2)です。!素数を扱う簡単なアルゴリズムはO(√n)で行えます。以下の何れのアルゴリズムもO(√n)で行うことができます。0に対してが成り立ちます。この不等式はマルコフの不等式として知られており、確率変数の値がある正の定数以上になる確率の上限を与えます。inequalityではこの不等式の興味深い応用例を紹介しています。!期待値の線形性は期待値の重要な性質の一つです。任意の確率変数の和の期待値は個々の確率変数の期待値の和と等しい、というものです。この性質を用いると期待値の計算を極めて簡単化することができます。!計算機を使って確率を考えるのは楽しいことです。実装が考察した通りの結果であったときは嬉しいものです。確率を計算するのに予期しない工夫を求められることもあります。二項分布の計算はそれほど簡単ではないことが知られています。!数学を考えるとき、公式を自分で導くことができると有利であることが多いように感じます。そのため、自分の感覚と合う計算方法と出会えたときは嬉しいものです。確率pで成功する実験をn回独立に行うことを考えてみましょう。!id:practicalschemeさんの珠玉のエントリ、なんでも継続は以下のような一説から始まります。プログラミングの世界の概念には、禅の公案のようなものがある。!テキストデータを加工するとき、sedは欠くことの出来ないツールです。sedが改行を読み込まないことはあまり知られていません。入力に含まれる改行を全て削除するために以下のようなスクリプトを記述したとしましょう。!数値計算のプログラムを行うとき、端数処理に関して繰り返し調べていることに気が付きました。workoutの解法としてメモ化再帰を解説しました。今回のエントリではこれを元に、動的計画法を解説します。前回のエントリにて実装したsearch関数を見てみましょう。!昨年のSIGGRAPH参加後、9月ほどからでしょうか。Online(以下POJ)に参加するようになりました。!PostScriptにはSymbolというフォントが用意されています。ギリシャ文字を用いるにはこのフォントを使用します。πを出力するには以下のようにします。