アルゴリズム事典C++版
実装方針:オリジナルのソースコードを尊重しつつもC++ならではの良さを活かしたプログラムにする。
アルゴリズム部分はメイン関数(***_test.cpp)とは分けて実装し、それだけで使いまわせるようにする。
動作確認はMinGWのg++で行っていますが、Visual Studioでも動くようにはなっているはずです。。 g++ ***.cpp ***_test.cpp -o ***
グラフィックスはOpenGLを使用しています。
値の交換 swap.cpp swap.h swap_test.cpp
安定な結婚の問題 marriage.cpp marriage.h marriage_test.cpp
暗号 crypt.cpp crypt.h crypt_test.cpp crypt (入力ファイル名) (出力ファイル名) (暗号のキーとなる適当な整数)というように引数を渡して動かす。
石取りゲーム ishi1.cpp ishi2.cpp ishi.h ishi1_test.cpp ishi2_test.cpp
異性体の問題 isomer.cpp isomer.h isomer_test.cpp
因子分析 matutil.cpp matutil.h statutil.cpp statutil.h factanal.cpp factanal.h factanal_test.cpp
ビルド時はこれらのファイル全部を同じフォルダに入れて、その上で例えばg++ なら、g++ -o factanal matutil.cpp statutil.cpp factanal.cpp factanal_test.cpp という風にして下さい。
動かすときはfactanal.exe test.csv のように引数に読み込むcsvファイルを渡して下さい。オリジナルでは半角スペース区切りだけど、今回はcsv形式にしています。最初の行に5,4のように行数と列数を入れ、2行目以降に実際のデータをコンマ区切りで入れるようにします。
円周率 pi.cpp pi.h pi_test.cpp
エジプトの分数 egypfrac.cpp egypfrac.h egypfrac_test.cpp
エンディアンネス endian.cpp endian.h endian_test.cpp
黄金分割法 egypfrac.cpp egypfrac.h egypfrac_test.cpp
回帰分析
階乗進法 factrep.cpp factrep.h factrep_test.cpp
カイ2乗分布 chi2.cpp chi2.h chi2_test.cpp
カオスとアトラクタ
ガンマ関数
幾何分布
機械エプシロン
騎士巡歴の問題
基数の変換 radconv.cpp radconv.h radconv_test.cpp
逆行列
逆三角関数
逆写像ソート
共通の要素
行列 matutil.cpp matutil.h matutil_test.cpp
Javaによるアルゴリズム事典の方にvalarrayを使ったC++のものを自分が使いやすいように改造したものです。 他の線形代数関連のプログラムでも使いますが、その時はヘッダファイルをインクルードしてソースファイルをリンクしてコンパイルします。
行列の積
クイックソート qsort1.cpp qsort1.h qsort1_test.cpp
区間の包含関係
組合せの数
組合せの生成 gencomb.cpp gencomb.h gencomb_test.cpp
グラフィックス
原始根
五数要約
後置記法
合同式
小銭の払い方
小町算 komachi.cpp komachi.h komachi_test.cpp
5重対角な連立方程式
最大公約数
最大値・最小値 maxmin.h maxmin_test.cpp
テンプレート関数を使っているので、関数の中身をヘッダファイルに直接実装しています。
最短路問題
三角関数
三角関数による補間
算術圧縮
3次元グラフ
3次方程式
3重対角な連立方程式
3重対角化
シフトJISコード
四捨五入 roundoff.cpp roundoff.h roundoff_test.cpp
指数関数
自己組織化探索
自然対数の底 e.cpp e.h e_test.cpp
式の評価
主成分分析
樹木曲線
順位づけ
順列
順列生成
小数の循環節
常微分方程式
情報落ち
条件数
推移的閉包
スプライン補間
数値積分
整数の積
正規分布 normal.cpp normal.h normal_test.cpp
正弦積分
宣教師と人食い人
線形計画法
線形合同法 lcrand.cpp lcrand.h lcrand_test.cpp
選択
選択ソート
素因数分解 factoriz.cpp factoriz.h factoriz_test.cpp
素数
素数のLucasテスト
双曲線関数
挿入ソート inssort.cpp inssort.h inssort_test.cpp
相関係数
対数
多項式の計算
縦形探索
多倍長演算
多変量データ matutil.cpp matutil.h statutil.cpp statutil.h statutil_test.cpp test.csv cppファイル3つとhファイル2つを同じフォルダに入れてビルドして下さい。テストデータとしてtest.csvファイルが読み込まれるようになっています。
たらいまわし関数
単位球上のランダムな点
置換の符号
逐次探索
直角三角形の斜辺の長さ
テトロミノの箱詰めパズル
等高線
トポロジカル・ソーティング
ドラゴンカーブ
ナップザックの問題
2項分布 binomial.cpp binomial.h binomial_test.cpp
2次元の探索
2次方程式
2分探索
2分探索木 tree.cpp tree.h tree_test.cpp
2分法
2変量正規分布
秤の問題
はさみうち法
ハッシュ法
ハノイの塔 hanoi.cpp hanoi.h hanoi_test.cpp
バブルソート bubsort.cpp bubsort.h bubsort_test.cpp
ヒープソート
一筆書き
ひも付き2分木
百五減算 105.cpp 105.h 105_test.cpp
不完全ガンマ関数
不完全ベータ関数
複素数
覆面算 fukumen.cpp fukumen.h fukumen_test.cpp
プサイ関数,ポリガンマ関数
浮動小数点数
フラクタルによる画像圧縮
フラクタル補間
ブロック移動
分割数 partit.cpp partit.h partit_test.cpp
分布数えソート
平均値・標準偏差
平方根
補間探索
ポリトープ法
マージ
マージソート
魔方陣
幹葉表示
水をはかる問題
三山くずし
無作為抽出
迷路
面積 area.cpp area.h area_test.cpp
モンテカルロ法
文字列照合
有限体
曜日 dayweek.cpp dayweek.h dayweek_test.cpp
余弦積分
横形探索
ライフ・ゲーム
ラディックス・ソート
乱数
乱数の改良法
ランダムな順列
リスト
立方根 cuberoot.cpp cuberoot.h cuberoot_test.cpp
累乗
累乗法
連分数
連分数補間
Ackermann(アッカーマン)関数
Aitken(エイトケン)の$\Delta^2$法
Bernoulli(ベルヌーイ)数 bernoull.cpp bernoull.h bernoull_test.cpp
Bessel(ベッセル)関数
Boyer--Moore法
B木
Collatz(コラッツ)の予想 collatz.cpp collatz.h collatz_test.cpp
CRC
C曲線 plotter.cpp plotter.h ccurve.cpp ccurve.h ccurve_test.cpp
gccでコンパイルする場合はcpp3つとヘッダファイル2つを同じディレクトリにおいて、"g++ plotter.cpp ccurve.cpp ccurve_test.cpp -o ccurve -lfreeglut -lglu32 -lopengl32"とコンパイルして下さい。
Eratosthenes(エラトステネス)のふるい
Euler(オイラー)の関数
Euler(オイラー)の数 eulerian.cpp eulerian.h eulerian_test.cpp
FFT(高速Fourier変換)
Fibonacci(フィボナッチ)数列 fib.cpp fib.h fib_test.cpp
Fibonacci(フィボナッチ)探索
F分布
Gauss(ガウス)--Jordan(ジョルダン)法
Gauss(ガウス)--Seidel(ザイデル)法
Gauss(ガウス)の整数
Gauss(ガウス)法
Gray(グレイ)符号
Hamming(ハミング)の問題
Hilbert(ヒルベルト)曲線
Horner(ホーナー)法 horner.cpp horner.h horner_test.cpp
Householder(ハウスホルダー)変換
Huffman(ハフマン)法
ISBN番号
Jacobi(ヤコビ)法
Josephus(ヨセフス)の問題
Julia(ジュリア)集合
Knuth-Morris-Pratt法 kmp.cpp kmp.h kmp_test.cpp
Knuthの乱数発生法
Koch(コッホ)曲線
Lagrange(ラグランジュ)補間
Lissajous(リサジュー)図形
Lorenz(ローレンツ)アトラクタ
LU分解
LZ法
Mandelbrot(マンデルブロート)集合
McCarthy(マッカーシー)関数 mccarthy.cpp mccarthy.h mccarthy_test.cpp
M系列乱数
Neville(ネヴィル)補間 neville.cpp neville.h neville_test.cpp
Newton(ニュートン)補間
Newton(ニュートン)法
N王妃の問題
QR分解
QR法
rand()
Riemannのゼータ関数
Shellソート
Sierpiński(シェルピンスキー)の三角形
Sierpiński(シェルピンスキー)曲線
Stirling(スターリング)数
SWEEP演算子法
t分布
Wichmann--Hillの乱数発生法