アルゴリズム事典C++版

アルゴリズム事典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の乱数発生法

戻る