アルゴリズムある問題を解いていて、四則演算のパーサーってどんな風に書くのだろうと思って考えてみました。いわゆる「逆ポーランド記法」にパースできればあとは簡単なので、その方針で考えたのですが、自力ではちょっと荷が重かったですね。二分探索木を書いてみました。コードを多少簡略化しています。木(Tree)のクラスと要素(Node)のクラスを定義します。アルゴリズム選択ソートは決められた範囲の中から最小値(もしくは最大値)を選んでいくという、わかりやすいソートです。とそれ自身)もつ自然数ですね。除く)で割ることができるかどうかを確かめればよいわけです。アルゴリズム(追記)ヒープを作るのに、何だかふつうとはちがう(オリジナルの?)アルゴリズムを採用してしまったようですね。これでもちゃんと動作しますが、ふつうの方法よりも多少効率が悪いようです。最後にふつうの実装も載せます。アルゴリズムバブルソートはわかりやすいソートです。隣どうしを比較して、前の方が値が大きければ値を交換します。それを繰り返し行うことでソートします。わかりやすく実装も簡単ですが、効率はよくありません。Go言語で実装してみました。クイックソートは、配列の中からひとつ任意にサンプルを取ってきます。これを「ピボット」といいます。このソートは二つの配列をマージ(統合)する作業がキモです。それぞれソートされた二つの配列を、統合してひとつのソートされた配列を作るわけですね。これができればあとは簡単です。アルゴリズムC言語で挿入ソートです。挿入ソートは遅いけれどわかりやすい。カードで考えると、(ソート済の)並んだカードの正しい位置に、残ったカードをそれぞれ一枚ずつ挿入していく(なのでそれもソート済になっている)というやり方で全体をソートします。アルゴリズム・パズルブログにスターを頂いて、上のサイトを知りました。オリジナルの様々な迷路が出題されている、すばらしくおもしろそうなブログです。Go言語のお勉強に移植してみました。使って簡単にしています。ふつうはこれで充分ですよね。スタックは2本のキューで実装できるので、これも簡単です。コード例を移植してみました。参考にしたのはこのサイトです。実行するとこんな感じです。n進グレイコードへの変換式を作ることになった。グレイコードについてはここにあるとおりである。2進グレイコードなら、ネットを検索すればたくさん出てくる。ハッシュで表すとこんな感じだ。アルゴリズム文字列の「部分列」とは、文字列から任意の文字を取り除いたものをいう。「共通部分列」という。数学フロイド−ワーシャル・アルゴリズムは、グラフの全点から全点へのすべての最短経路を求めます。重みは負値を許しますが、負閉路は許しません。上のようなグラフは次のようなハッシュで表現されます。頂点を表わすオブジェクトは何でもかまいません。アルゴリズムベルマン−フォード・アルゴリズムは、ダイクストラ法にさらに辺の重みが負の場合も含めて最短経路を求めることができます。入出力などはダイクストラ法の場合を参照して下さい。アルゴリズム前エントリでは閉路なし有向グラフ(DAG)の場合に最短経路を求めてみましたが、ダイクストラ法は閉路があり、かつ辺の重みが非負の場合に最短経路を求めることができます。アルゴリズム上の閉路なし有向グラフ(DAG)のように、辺に「重み」が付いている場合において、最短経路を求めてみます。含む閉路なし有向グラフ。graph)のトポロジカルソートです。頂点をもつ閉路なし有向グラフ。アルゴリズム基数ソートは固定長の文字列のソートなどに使うアルゴリズムで、下の位(文字列の右の方)から順にソートしていって、すべての位をソートし終えたとき、全体のソートが終っているという方法です。アルゴリズムバケットソートはバケツソート、ビンソート、計数ソート(後記:計数ソートとバケットソートはちがう)などとも言います。アルゴリズム自分の実装で、マージソートとクイックソートのベンチマークをしてみました。マージソートの実装はこれ、クイックソートのはこれ(いちばん下の実装)です。