2 シ リ ー ズ ・・
数学の世界 野ロ 廣 蹄
情報の数理 山本
慎 著
朝倉書店
ま え が き
大 学 で情 報 処 理 の リテ ラ シ ー 教 育 を 十 数 年 担 当 して い ます が,前
の 年 に行 っ
た こ とを そ の ま ま次 の 年 も同 じ よ う に行 う こ とは まず あ り ませ ん.す べ て の 準 備 を し直 さな け れ ば な ら ない とい った ら,少 しが 必 要 に な ります.去 テ ー マ や,逆
しオ ー バ ー で す が,か
な りの 手 直
年 は 扱 っ た け れ ど今 年 は や る ほ どの こ と は な い とい う
に,今 年 か ら は こ うい う こ と もや っ て お か な け れ ば と い うテ ー マ
が で て くる こ とが あ ります,去 年使 っ た ア プ リ ケー シ ョ ンソ フ トのバ ー ジ ョンが 上 が っ て,使 用 方 法 が 大 き く変 わ る とい う こ とや,去 年 まで は 一 般 的 で よ く使 わ れ てい た ア プ リ ケ ー シ ョン ソ フ トが 今 年 は よ りす ぐれ た 機 能 を もつ ほ か の も の に置 き換 わ っ て い る こ と も あ り ます.そ
して,3,4年
コ ン ピュ ー タそ の もの が リプ レー ス され て,使 と もあ ります.コ
に 一 度 は,授 業 で使 う
い勝 手 が全 く変 わ っ て し ま う こ
ン ピュ ー タが リプ レー ス され な くて も,OSが
バ ー ジ ョン ア ッ
プ した り,全 くほ か の もの に 変 わ っ て しま った り,ウ ィ ン ドウ ズ マ ネ ー ジ ャ ー と よば れ る基 本 的 な ソ フ トウ ェ ア が 変 わ る こ と もあ ります. コ ン ピュ ー タが リ プ レー ス され れ ば,CPUの リー が 桁 違 い に増 えて,い
処 理 能 力 が 向 上 し た り,メ モ
ま まで は で きな か っ た よ うな こ と も で きる よ うに な
り ます.し か し,コ ン ピ ュ ー タが 一 度 に処 理 で き る情 報 量 が 増 え た り,補 助 記 憶 装 置 の 容 量 が 大 き くな っ た り,そ れ に伴 っ て,ア
プ リケ ー シ ョ ン ソ フ トも よ
り便 利 な 性 能 を備 えた もの に な っ た り して も,基 本 的 に は 変 わ らな い も の もあ り ます. こ の本 で は,コ
ン ピ ュ ー タ の 中 で,整 数 や実 数 が どの よ う に表 さ れ て い る か
とい う よ うな,一 度 に 扱 え る桁 数 な ど は増 え て も,本 質 的 な と こ ろ に 変 化 の な い こ とが ら を説 明 す る こ とを1つ
の 目的 と して い ます.
ま た,ハ ー ドウ ェ ア の 進 歩 だ け で は な く,処 理 をす る 手 順,い
わゆ るアル ゴ
リズ ム を くふ うす る こ とで 処 理 を 高 速 化 で き ます が,そ
の よ う な こ とを 勉 強 す
る上 で,前 提 と され る知 識 を 説 明 す る こ と を も う1つ の 目的 と して い ます. こ の シ リー ズ の 趣 旨 にあ わせ て,な
るべ く前 提 知 識 を 仮 定 せ ず に読 み 始 め ら
れ る よ う に,ま た,解 答 の ない 練 習 問題 な ど も さけ て,例
や 例 題 は で きる だ け
て い ね い に説 明す る よ う に しま した.そ の よ うな わ け で,少
し難 しい こ と を前
提 とす る こ とが らの 証 明 は省 い て あ ります. 車 を運 転 す るの に,エ
ン ジ ン につ い て の 深 い 知 識 が 必 要 で ない よ うに,ほ
と
ん ど毎 日ふ れ て い る コ ン ピ ュー タ もそ の 内 部 で どの よ うな処 理 が さ れ て い る か な ど とい う こ とは 知 ら な くて も よ い の で す が,ち た い とか,詳
ょっ とそ ん な こ と も知 っ て み
し く知 りた い け れ どい きな り難 しい本 を読 む の は ど う も,と い う
方 に は役 に 立 つ と思 い ます. 最 後 に,全
く筆 の 進 ま ない 筆 者 を暖 か く見守 りつ つ,出 版 まで 導 い て くだ さ っ
た朝 倉 書 店 編 集 部 の方 々 に 心 か らの 感 謝 の 意 を表 した い と思 い ます. 2002年9月 山 本
慎
目
次
1 . ア ル ゴ リ ズ ム
1
1.1 ア ル ゴ リ ズ ム
1
1.2 プ ロ グ ラ ム
3
1.3 ア ル ゴ リ ズ ム の 記 述
5
1.4 ア ル ゴ リ ズ ム と計 算 量
8
1.5 大 き いO
記法
112
. 整 数 に つ い て 2.1 10進
数,2
13 進 数,そ
して β 進 数
13
2.1.1
整 数 の2 進 表 現
13
2.1.2
β進 数
14
2.1.3 2進
数 へ の変 換
2.2 累 乗 の 計 算 の ア ル ゴ リ ズ ム:2進 2.3
15 表 現 を利 用 して
コ ン ピ ュ ー タの 内 部 で の 整 数 の 表 現
18 21
2.3.1
整 数 の表 現
21
2.3.2
整 数 の加 減 算
25
2.4 桁 数 の 多 い 整 数 の 演 算
2.4.1
多倍長整 数の掛 け算
2.4.2
多 倍 長 整 数 の 割 り算
27
34
36
2.5 ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム
38
2.5.1
最大公約 数の計算
2.5.2
ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム と フ イ ボ ナッ チ 数
38
46
2.6 素 数 に つ い て の ア ル ゴ リ ズ ム
48
2.6.1
素
数
2.6.2
エ ラ トス テ ネ ス の 節(ふ
2.6.3
フェ ル マ ー の 小 定 理
51
2.6.4
フェ ル マ ー 数 と カ ー マ イ ケ ル 数
52
2.6.5
フェ ル マ ー の 素 数 判 定 テ ス ト
る)い
3. 実 数 に つ い て 3.1 実 数 の2進
48
53
表現
49
58
58
3.1.1
実 数 の2進
表現
58
3.1.2
実 数 の2進
表現へ の変換
59
3.2 浮 動 小 数 点 数 3.2.1
浮動小数点数
3.2.2
丸
め
3.2.3
浮動小数点数 の加減算
3.2.4
い ろ い ろ な誤 差
61 61
68 71
74
3.2.5
浮 動 小 数 点 数 と誤 差
75
3.2.6
四則演算の誤差 限界
77
3.2.7
2 次 方 程 式 の 解 の 公 式 と誤 差
78
3.2.8
累 和 を計 算 す る と きの 誤 差
804
. 方 程 式 の 数 値 解 法
81
4.1 解 析 学 の 初 歩 の 復 習
81
4.1.1
コ ー シー 列 と完 備 な 区 間
81
4.12
テ イ ラ ー展 開
82
4.2 多 項 式 の 計 算
85
4.2.1
素 朴 な 方法
85
4.2.2
ホーナーの方法
87
4.2.3
ホ ー ナ ー の 方 法 に よ る微 分 係 数 の計 算
4.3
ニ ュ ー トン法
89 91
4.3.1
方 程 式 の 直 接 解 法 と間接 解 法
91
4.3.2
ニ ュ ー ト ン 法 の 定 義 と例
92
4.3.3
ニ ュ ー ト ン法 と グ ラ フ
4.3.4
ニ ュ ー トン 法 と テ イ ラ ー 展 開
4.3.5
ニ ュ ー トン法 以 外 の 反復 法
98
4.3.6
縮 小 写 像 と不 動 点定 理
98
4.3.7
ニ ュ ー トン法 の 収 束
97
101
4.4 連 立 1次 方 程 式 の 数 値 解 法
102
4.4.1
連 立 1次 方 程 式 と行 列
4.4.2
ク ラ メ ルの 公 式 と計 算 量
4.4.3
行 列 が 正 則 で あ るた め の 十 分 条件
4.4.4
ガウスの消去法
4.4.5
LU分
102 103 105 106
解
4.5 連 立 1次 方 程 式 の 解 法:反
97
113 復 法
4.5.1
反復 法
4.5.2
連 立 1次 方 程 式 の 反 復 解 法 の 収 束 定 理
114 114 118
5. ソ ー トと サ ー チ の ア ル ゴ リ ズ ム
122
5.1 ソ ー トの ア ル ゴ リ ズ ム
122
122
5.1.1
ソー ト
5.1.2
単 純 選 択 ソー ト
122
5.1.3
単 純 挿 入 ソー ト
126
5.1.4
バ ブル ソー ト
130
5.1.5
シェル ソー ト
132
5.1.6
クイ ックソー ト
135
5.2 サ ー チ の ア ル ゴ リ ズ ム
137
5.2.1
逐次探索 法
137
5.2.2
バ イ ナ リー サ ーチ
138
5.3 文 字 列 照 合 の ア ル ゴ リ ズ ム
141
141
5.3.1
素朴 な方法
5.3.2
ボ イ ヤ ー 一ム ー ア の ア ル ゴ リ ズ ム
参 考 文 献
索
引
145
153
155
1 ア ル ゴ リ ズ ム
1か ら100ま
で の 整 数 の 和 を 求 め る の に,大
数 学 者 ガ ウ ス は,こ
ど もの こ ろ
に,1+2+…+100=(1+100)+(2+99)+…+(50+51)=101×100÷2 と し て,5050と
い う 答 を 出 し た と い う 話 は,よ
2+…+n=n(n+1)/2と
く 知 ら れ て い る.つ
い う 公 式 を 導 い た わ け で,あ
し ま う.で
は,n
が た と え ば3872685の
る の と,順
番 に1+2+…+3872685と
タ で す る の と で は,ど
と き に,こ
ま り,1+
っ と い う間 に計 算 で きて の公 式 を用 い て暗 算 で 求 め
い う3872684回
の 足 し算 を コ ン ピ ュ ー
ち ら が 速 く 計 算 で き る だ ろ う か.
ま た,1+2+3を
求 め る に は,こ
の ま ま,2 回 の 足 し算 を す る の と,3×4÷2
と 1回 の 足 し算,1
回 の 掛 け 算,1
回 の 割 り算 を す る の と で は,ど
ち らが 簡 単
で あ ろ う か. こ の 本 で は,問
題 を 解 く 手 順,い
わ ゆ る ア ル ゴ リズ ム に つ い て 述 べ る こ と が
1つ の テ ー マ で あ る.1+2+…+nを
求 め る の に,1
1つ の ア ル ゴ リ ズ ム で あ り,n(n+1)/2と
つ 1つ 足 し て い く の も
い う 式 か ら 求 め る と い う の も 1つ の ア ル
ゴ リ ズ ム で あ る. ま ず,ど
の よ う な 手 順 を ア ル ゴ リ ズ ム と よ ぶ の か,ア
に 記 述 す る の か,ア
ル ゴ リズ ム を どの よ う
ル ゴ リズ ム の 性 能 は ど の よ う に 評 価 す る の か,と
いった こ
と を 簡 単 に 述 べ る こ と か ら始 め よ う .
ア ル ゴ リ ズ ム(algorithm)と
1.1
ア ル ゴ リ ズ ム
は,与
え ら れ た 問 題 を 解 く手 順 で あ る.た
とえ
ば,異
な る 3つ の 実 数 5, 8, 2
を 小 さ い 順 に 並 べ る と い う 問 題 を 考 え る . こ れ は あ ま り に 簡 単 な 例 な の で,一 目 見 れ ば, 2, 5, 8 と 答 え が 得 ら れ,ど
の よ う に した か を 説 明 す る の が 難 し い ほ ど で あ ろ う.で
具 体 的 に 異 な る 3つ の 実 数 が 与 え ら れ て い る わ け で は な く,一
は,
般 に
x1,x2,x3 が 与 え ら れ て い る と き,小
さ い 順 に 並 べ る に は ど う す る か を,ど
し て も,誰
き る よ う に 説 明 す る と し た ら ど う し た ら よ い だ ろ う.
が や っ て も,で
ん な実 数 に対
次 の よ う に 説 明 す る の も 1つ の 方 法 で あ る .
(a1)
3 つ の 数x1,x2,x3の
中 で,最
(a2)
minと
(a3)
残 り をmaxと
(a4)
こ の よ う に す れ ば,min,mid,maxが
小 の も の をminと
し た も の 以 外 の 2つ の 数 の 小 さ い 方 をmidと
つ の 数 の 中 で,最
小 さ い 順 に 並 べ た も の で あ る.
ず,"3
番 問 題 な の に,ど
の よ う に探 す か は 示 さ れ て い な い.そ
(b1) x1とx2を
比 較 し,改
(b2) x1とx3を
比 較 し て,改
め て,小
(b3) x2とx3を
比 較 して,改
め て,小
め て,小
こ の と き のx1,x2,x3が
と す れ ば,か
す る.
す る.
こ の 手 順 で は,ま
(b4)
す る.
な り具 体 的 に な る.た
に つ い て こ れ を 実 行 し て み る と,
小 の も の"を 探 す と あ る が,そ
さ い 方 をx1,大
こ で,も
れが 一
う 少 し詳 し く,
き い 方 をx2と
す る.
さ い 方 をx1,大
き い 方 をx3と
す る.
さ い 方 をx2,大
き い 方 をx3と
す る.
小 さ い 順 に 並 ん で い る.
と え ば,最
初 の,x1=5,x2=8,x3=2
(b1) x1=5とx2=8を
比 較 し,小
と す る.こ
の と き は,最
(b2) x1=5とx3=2を x3と
さ い 方 の 5 をx1,大
比 較 し て,小
す る.つ
ま り,こ
き い 方 の 8 をx2
初 の 状 態 と何 も 変 わ っ て い な い . さ い 方 の 2 をx1,大
き い方 の 5を
の 結 果,x1=2,x2=8,x3=5と
な り,x1
が 3 つ の 数 の 最 小 の も の と な る. (b3) x2=8とx3=5を x3と (b4)
比 較 して,小
す る.結
果 は,x1=2,x2=5,x3=8と
し た が っ て,x1,x2,x3が
こ の 本 で は,最 (b1)∼(b4)を
さ い 方 の 5 をx2,大 な る.
小 さ い 順 に 並 ん で い る こ と に な る.
初 に 書 い た 手 順(a1)∼(a4)よ
ア ル ゴ リ ズ ム と よ び た い.つ
り,こ
ま り,あ
●何 か 入 力,す
な わ ち,ア
●各 操 作 は,た
だ 一 通 り に 行 わ れ る よ う に,厳
●や ろ う と 思 え ば,人
きい 方 の 8 を
の 2番 目 に書 い た 手 順
る 問 題 を 解 く手 順 で,特
ル ゴ リズ ム を 開 始 す る 前 に 与 え られ る 量,が
に,
あ っ て,
密 に 定 義 さ れ て い て,
が 紙 と鉛 筆 で そ の 操 作 を す る こ と が で き,
●有 限 回 の 操 作 で, ●出 力,す
な わ ち 何 ら か の 答 を 得 る,
と い う 条 件 を 満 た す もの を ア ル ゴ リズ ム と い う こ と に し よ う .こ の 手 順(b1)∼(b4)は
1.2
プ
こ の 本 で 扱 う ア ル ゴ リ ズ ム は,原 で あ る が,実 い る.そ
の 意 味 で,上
ア ル ゴ リズ ム と い う こ とが で き る.
際 に は,コ
の と き,1.1節
ロ
グ
ラ
ム
理 的 に は紙 と鉛 筆 で行 う こ とが で き る も の
ン ピ ュ ー タ を使 っ て 処 理 を す る と い う こ と を 意 識 し て に 書 い た ま ま を コ ン ピ ュ ー タ に 入 力 し た ら ,そ
れ をコ
ン ピ ュ ー タ が 実 行 して く れ る と い う ほ ど ま で に は ,現
在 の コ ンピュータはな っ
て い な い.ア
語"を
ル ゴ リ ズ ム を 記 述 す る た め の 特 別 な"言
ム を 書 き 表 し,そ
れ を コ ン ピ ュ ー タ へ 入 力 し,コ
に 書 き 換 え て,実
行 し,答
を得 る,と
用 い て ア ル ゴ リズ
ン ピュ ー タが 実 行 で き る もの
い う手 順 を 踏 む 必 要 が あ る.そ
の ような
"言 語"を
プ ロ グ ラ ミン グ言 語 とい い
語 の 文 法 と い う.あ
,書
き方 の ル ー ル を そ の プ ログ ラ ミン グ 言
る プ ロ グ ラ ミ ン グ 言 語 で ア ル ゴ リズ ム を 書 き表 し た も の が,
そ の ア ル ゴ リ ズ ム の プ ロ グ ラ ム で あ る.多
くの プ ロ グ ラ ム ミ ン グ 言 語 の プ ロ グ
ラ ム は 人 が 理 解 で き る よ う な 形 式 で 書 か れ て い る. プ ロ グ ラ ミ ン グ 言 語 に は い ろ い ろ な 種 類 が あ る が,た た ア ル ゴ リ ズ ム(手 順(b1)∼(b4))を と,そ
れ ぞ れ 次 の よ う に な る.
プ ロ グ ラ ム:C
言 語 に よ る例
\include<stdio>
int
main(void)
{
float
if(x1>x2)
{
x1,x2,x3,
t=x1;x1=x2;x2=t;
} if (x1>x3)
{
t=x1;x1=x3;x3=t;
}
if(x2>x3)
{
t=x2;x2=x3;x3=t;
} }
t;
C 言 語 とPascalと
と え ば,1.1節
にあ げ
い う言 語 で書 き表 す
プ ロ グ ラ ム
:Pascal言
program
var
procedure
語 に よ る例
sortalgorithm(input,output) x1,x2,x3,t:real
sort\verb+_+3;
begin
if(x1>x2)then
begin
if
t=x1;x1=x2;x2=t
(x1>x3) begin
end;
then t =x1;x1=x3;x3=t
end;
if (x2>x3)
begin
t =x2;x2
=x3;x3
= t end;
end begin
read(x1,x2,x3);
sort_3; write(x1,x2,x3);
writln end
ど ち ら も,細
か い と こ ろ は わ か ら な い と し て も,大
ま か に は 何 を して い る か
を 読 み と る こ と は で き る だ ろ う.
1.3
ア ル ゴ リズ ムの 記 述
ア ル ゴ リ ズ ム を ふ つ う の こ と ば で 書 く と,く と が あ る . か と い つ て,特
有 の 言 い 回 し な ど に 束 縛 さ れ て し ま う し,ア に 気 を使 う こ と に な る . そ こ で,本 す る.細
か い 説 明 は,必
ル ゴ リ ズ ム(b1)∼(b4)を
ど く な っ た り,不
正確 になる こ
定 の プ ロ グ ラ ミ ン グ 言 語 で 記 述 す る と ,そ
書 で は,独
要 な と き に,そ
の言語特
ル ゴ リズ ム の 本 質 的 で な い と こ ろ 自の 書 き方 を あ え て す る こ と に
の つ ど す る こ と に す る が,1.1節
例 に書 い て み よ う.
の ア
ア ル ゴ リ ズ ム1.1:3
つ の異 な る実 数 の 並 べ替 え
入 力:異
な る 3 つ の 実 数x1,x2,x3
出 力:小
さ い 順 に 並 べ 替 え たx1,x2,x3
ス ア ツ フ: (1) も し,x1>x2な
ら ば,次
を行 う
t←x1
x1←x2 x1←t
{こ れ に よ り,x1>x2の
(2) も し,x1>x3な
ら ば,次
と き,x1とx2の
値 が 入 れ 替 わ る}
を行 う
t←x1
x1←x3 x1←t
{こ れ に よ り,x1>x3の
(3) も し,x2>x3な
ら ば,次
と き,x1とx3の
値 が 入 れ 替 わ る}
を行 う
t←x2
x2←x3 x3←t {こ れ に よ り,x2>x3の (4) x1,x2,x3を
と き,x2とx3の
出力
こ こ で 使 わ れ て い る,t,x1,x2,x3は に は,入
変 数 と よ ば れ る.最
初 にx1,x2,x3
力 と し て 何 か 具 体 的 な 数 が 与 え ら れ て い る と 考 え て も よ い.
t←x1
と い う の は"変
数t
入 文 と い う.一
般 に,
値 が 入 れ 替 わ る}
も しA
に 変 数x1の
な ら ば,B
値 を代 入 す る"と
い う 操 作 を 表 す.こ
れ を代
と い う の は,条
件A
が 成 り 立 て ば B を 行 い,成
ス テ ッ プ へ 進 む こ と を 表 す.ス
テ ッ プ(1)で
り立 た な け れ ば何 もせ ず 次 の
は,A
が
x1>x2 で あ り,B
が,
t←x1 x1←x2 x1←t で あ る.こ
れ を 条 件 文 と い う.そ
{こ れ に よ り,x1>x2の
と い の は,ア
の あ との
と き,x1とx2の
値 が 入 れ 替 わ る}
ル ゴ リズ ム の 手 順 と は 直 接 関 係 な い 注 意 書 き で ,注 釈 文(comment)
と よ ば れ る.本
書 で は,注
釈 文 は{と}で
囲 っ て 表 す こ と に す る .条
成 り立 つ と き行 う こ と は ど こ か ら ど こ ま で か,次 か を わ か り や く す る た め に,条
い う.し
も し,x1>x2な
の ス テ ッ プが どこ か ら始 ま る
件 文 の 条 件 が 成 り立 っ た と き に 行 う部 分 の 各 行
の 先 頭 を 数 文 字 下 げ て 書 き 始 め る こ と に す る.こ (indentation)と
件文 が
の よ うに す る こ と を字 下 げ
た が っ て,
ら ば,次
を行 う
t←x1 x1←x2
x1←t と い う の は,x1>x2が の 値 とx2の
成 り立 つ と き,そ
値 を 入 れ 替 え る.x1>x2が
の あ と の 3 つ の 代 入 文 を 実 行 し てx1 成 り立 た た な け れ ば ,何
し た が っ て,こ
の ス テ ッ プ が 済 ん だ と き に は,最
び 直 さ れ る.こ
こ で,
も し,x1>x2な x1←x2
ら ば,次
を行 う
初 のx1,x2が
も し な い.
小 さい 順 に並
x2←x1 と し て し ま っ て は,x1に 意 して ほ し い.同
も,も
との 物
が 代 入 され て しま う こ とに 注
じ よ う に し て,
も し,x1>x3な
もx2に
ら ば,次
を行 う
t←x1
x1←x3 x1←t と い う ス テ ッ プ が 済 ん だ と き は,x1に
は,最
い も の が 蓄 え ら れ て い る こ と に な る.さ
も し,x2>x3な
ら ば,次
初 のx1,x2,x3の
中で一番小 さ
ら に,
を行 う
t←x2 x2←x3 x3←t に よ り,最
初 のx1,x2,x3の
も の がx3に
中 で 2 番 目 に 小 さ い も の がx2に,一
番 大 きい
入 っ て い る こ と に な る.
こ の ほ か の ア ル ゴ リ ズ ム の 書 き 方 は,新
し く出 て きた と き に そ の つ ど説 明 す
る こ と に す る.
1.4
xnを
求 め る こ と を 考 え る.た
x×x×x×xだ
か ら,こ
ア ル ゴ リズ ム と計 算 量
と え ば,n=7と
れ を 本 書 で の ア ル ゴ リ ズ ム の 書 き 方 で 表 す と,次
よ う に な る.
ア ル ゴ リ ズ ム1.2:x7の 入 力:実 出 力:x7
数x
し よ う. x7=x×x×x×
計 算(素 朴 な 方 法)
の
ス テ ツ プ: (1) x2←x×x (2) x3←x2×x (3) x4←x3×x (4) x5←x4×x (5) x6←x5×x (6) x7←x6×x (7) x7を
出力
こ こ で,少
し考 え て,
x7=(x2×x)2×x
と な る こ と を 利 用 す る と,次
ア ル ゴ リ ズ ム1.3:x7の
の よ う に す る こ と も で き る.
計 算(少
し く ふ う を し て)
入 力:実数x 出 力:x7 ス テ ツ プ: (1) x2←x×x (2) x3←x2×x (3) x4←x3×x3 (4) x5←x4×x (5) x5を
出力
ア ル ゴ リ ズ ム1.2と れ ぞ れ,6
ア ル ゴ リ ズ ム1.3の
回 と 4 回 で あ る.掛
紙 と 鉛 筆 で 行 う と き,電 そ れ ぞ れ 異 な る.紙
掛 け 算 の 回 数 を比 較 して み る と,そ
け 算 を す る の に か か る 時 間 は,暗
卓 を 使 う と き,コ
算 で 行 う と き,
ン ピ ュ ー タ を 使 う と き,な
と 鉛 筆 で 行 う に し て も 人 に よ り異 な る し,コ
どによ り
ン ピュ ー タ も
ど の よ う な 性 能 の も の を 使 う か で 異 な る.し
か し,掛
ア ル ゴ リ ズ ム1.2よ
ほ うが 掛 け算 の 回 数 が 少 な くて 済
む の で,計
り も ア ル ゴ リ ズ ム1.3の
算 の 手 間 が 少 な い.こ
け 算 の 回 数 を比 較 す れ ば,
の 意 味 で ア ル ゴ リ ズ ム1.3の
ほ うが 優 れ て い
る と い っ て よ い で あ ろ う. ア ル ゴ リ ズ ム の 中 で 行 わ れ る 主 要 な 操 作 を 1回 行 う こ と を 1単 位 と し て,そ の ア ル ゴ リズ ム の 中 で そ の 操 作 が 行 わ れ る 回 数 をそ の ア ル ゴ リ ズ ム の 時 間 計 算 量(time
complexity)と
ム1.2の
時 間 計 算 量 は 6,ア
ア ル ゴ リ ズ ム1.2で れ て い て,ア て い る.こ
い う.つ
ま り,掛
け 算 1 回 を 1単 位 と し て ア ル ゴ リ ズ
ル ゴ リ ズ ム1.3の
時 間 計 算 量 は 4 と な る.
は,x,x2,x3,x4,x5,x6,x7の
ル ゴ リ ズ ム1.3で の よ う に,あ
7個 の 変 数 が 使 わ
は,x,x2,x3,x4,x5の
5個 の 変 数 が 使 わ れ
る ア ル ゴ リ ズ ム の 中 で 必 要 と さ れ る 変 数 の 個 数 を,そ
の ア ル ゴ リ ズ ム の 領 域 計 算 量(space
complexity)と
領 域 計 算 量 は 7,ア ル ゴ リ ズ ム1.3の
領 域 計 算 量 は 6 で あ る.ア
は,次
の よ う に,領
ル ゴ リ ズ ム1.2の ル ゴ リ ズ ム1.3
域 計 算 量 を 2 と す る こ と が で き る.
ア ル ゴ リ ズ ム1.4:x7の 入 力:実
い う.ア
計 算(さ
ら に く ふ う を し て)
数x
出 力:y=x7 ス テ ツ プ: (1) y←x×x (2) y←y×x (3) y←y×y (4) y←y×x (5) yを
出力
ス テ ッ プ(2)の
y←y×x と い う の は,右
辺 で のy
は 直 前 の ス テ ッ プ(1)で
のx2が
蓄 え ら れ て い て,そ
れ にx
を掛 け た も の を あ ら た め てy
して,y
に はx3が
代 入 さ れ る.つ
に,x2,x3,x6,x7と
と す る,と
ま り,各
ス テ ッ プ で の 左 辺 のy
1.5
大 き いO
量 が ど の よ う に 変 化 す る か を 考 え る.入
つ う入 力 の サ イ ズ に 応 じ て,計
力 の サ イ ズ と は,入
き さ の 順 に 並 べ 替 え る ア ル ゴ リ ズ ム1.1な で あ っ た り,xnを
計 算 す る ア ル ゴ リ ズ ム1.2の
あ っ た りで あ る.た
と え ば,1+2+…+nを
回 の 足 し算 を す る 必 要 が あ り,n(n+1)/2と り 算1 回 と,n
の よ う に 計 算 量 は,n
が,n
の 関 数f(n)と
問 題 に な る.ま
た,n
た,
の 大 き さそ の もの で
し て 求 め る に は 足 し算1 回,掛
数 関 数3 と い う よ う に,入
算 量 を 比 較 す る と き は,そ
よ う な 項 が で て く る の か,定
の 多 項 式 に な る な ら,何
け 算1
つ で も3 回 の 演 算 で で き る. こ
か,定
し て 表 さ れ る.計
の 多 項 式 な の か,2nの
で あ っ た り,ま
こ の ま ま,1 つ1 つ 足 す と,n-1
の 大 き さ に 関 係 な く,い の1 次 関 数n-1と
力 され る もの の 個 数
と き に はn
力 さ れ る 数n
算
力 さ れ た もの を大
ど の よ う に,入
を 因 数 分 解 す る と か で あ れ ば,入
の サ イ ズn
の 値 は,順
記 法
ア ル ゴ リ ズ ム の 性 能 を 評 価 す る と き は,ふ
回,割
果 と
な る.
自 然 数n
い う操 作 を し て お り,結
力
の関数
数 な の か,な
どが
次 式 に な るの か が 大 き な関 心 に
な る. 0 以 上 の 整 数n n0が
の 関 数f(n)がO(g(n))で
存 在 し て,n0以
上 のn
あ る と は,正
の 定 数c
と 自然 数
に 対 し て,
f(n)〓cg(n) が 成 り立 つ こ と と 定 義 す る.こ
れ を 大 き いO
た と え ば,f(n)=an2+bn+cはO(n2)で が,O(n2)で
notation)と
い う.
あ る.f(n)はO(n3)で
あ る と い っ た ほ うが 精 密 で あ る.f(n)が2
明 記 し た い が,n で あ る,な
記 法(big O
もある
次 式 で,n2の
係 数a
を
の 係 数 や 定 数 項 は あ ま り重 要 で な い と き,f(n)はan2+O(n)
ど と い う こ と も あ る.
あ る ア ル ゴ リ ズ ム の 計 算 量 はO(log2n)で い う の で あ る が,n
あ る と か,O(n3/2)で
の 増 え 方 に 従 っ てlog2n,n2,2nな
あ る,な
どと
どが お よ そ どの よ う に
増 え る か を表 に す る と次 の よ う に な る. 表1.1 n の 増 分 に対 す る 各値
2 整
数
に
つ
い
て
コ ン ピ ュ ー タ の 中 で は 数 は 2進 数 で 表 さ れ て い る と い う こ と を 聞 い た こ と が あ る 読 者 も多 い こ と だ ろ う.こ 有 無,ス
れ は,簡
イッ チ の オ ン オ フ な ど,2
成 り立 っ て い て,そ
ン ピ ュ ー タ は,電
圧 の
つ の 状 態 に よ り情 報 が 表 現 さ れ る 部 品 か ら
れ ら の 2 つ の 状 態 を そ れ ぞ れ1,0
,0 の 組 み 合 わ せ に よ り,コ こ の 章 で は,整
単 に い う と,コ
と い う 値 に 対 応 さ せ て,1
ン ピ ュ ー タ の 状 態 を 表 現 す る か ら で あ る.そ
数 の 2 進 表 現 か ら 始 め る.そ
し て,最
こ で,
大 公 約 数 や 素 数 に関 す る
基 本 的 な ア ル ゴ リ ズ ム を 紹 介 し よ う.
2.1
2.1.1
10進
数,2
進 数,そ
して β 進 数
整 数 の 2進 表 現
数 は,普 通10進
数 で 表 され て い る.整
数 を10進
数 と し て 表 す と き は,1=100,
10=101,100=102,1000=103,10000=104,…
が そ れ ぞ れ い くつ ず つ あ
る の か を,0 か ら 9 ま で の 数 字 を 用 い て 右 か ら順 に 並 べ る.た
5×103+0×102+6×101+7×100
で あ り,100が い る.こ
7個,101が6
の と き,普
通 は,"1
が 5"と い う の だ が,こ 103の
と え ば,5067は
個,102が0
個,103が
の 位 が 7,10の
こ で は,"100の
5個 あ る こ と を 表 し て
位 が 6,100の
位 が7,101の
位 が0,1000の
位 が 6,102の
位
位 が0,
位 が 5"と い う こ と に す る.
10進 数 と 同 じ よ う に 考 え て,0
と 1 を 用 い て,20,21,22,…
つ あ る か を 右 か ら 順 に 並 べ る.た
と え ば,101011は
がそれ ぞれい く
1×25+0×24+1×23+0×22+1×21+1×20
を 表 し て い る こ と に な る.こ "20の
位 が 1 ,21の
の よ う な 数101011を
位 が 1,22の
位 が 0,23の
1"と い う こ と に す る.2 進 数101011を10進
101011=1×25+0×24+1×23+0×22+1×21+1×20
=1×32+0×16+1×8+0×4+1×2+1×1
=43
2 進 数 と い う.こ
位 が 1,24の
の と き,
位 が 0,25の
数 で 表 せ ば43で
位 が
あ る . な ぜ な ら,
(2.1)
だ か ら で あ る. 1 つ の 数 を10進
数 や 2進 数 で 表 す と き,10進
数 を そ の 数 の10進
数 を 2 進 表 現 と い う こ と に す る . 特 に 断 ら な い と き は,数 れ て い る と す る.ま は,(43)10,(101011)2の
た,10進
は10進
表現
2進
表現 で表 さ
表 現 か 2進 表 現 か を は っ き り示 す 必 要 が あ る と き よ う に,そ
の 数 に 添 え 字 を つ け て 表 す.ま
こ を 書 か な く て も 混 乱 し な い と き は,4310,1010112の
た,か
っ
よ う に 簡 略 に 表 す .10
進 数 の 添 え 字 は 省 略 す る こ と も多 い .
2.1.2
β 進 数
整 数 の 2 進 表 現 の 一 般 の 形 は,
±1×2u+du-1×2u‐1+…+d1×21+d0×20
で あ る.た
だ し,
du-1,…,dl,d0は
そ れ ぞ れ 0 また は 1
で あ る.こ の と き,こ の 数 の 2進 表 現 の,"2uの の 位 はd0で
あ る"と
い い,こ
位 は 1,2u-1の
の 数 の 2 進 表 現 は(dudu
位 はdu-1,…
-1…d2d1)2で
い う. 全 く 同 じ よ う に β を 2以 上 の 整 数 と す る と,整
±du×
βu+du-1×
βu-1+…+dl×
数 の β 進 表 現 と は,
β1+d0×
β0
,20 あ ると
の こ と で あ る.た
duは1
だ し,
以 上 β-1以 du-1,…,d1,d0は
で あ る.こ
下 の 整 数, そ れ ぞ れ0 以 上 β-1以
の 数 の β 進 表 現 の,"βuの
位 はdl,β0の
位 はd0で
あ る"と
下の整数
位 はdu,βu-1の
い い,β
位 はdu-1,…,β1の
進 表 現 は(dudu-1…d2d1)β
で あ
る と い う. β を 基 数(radix)ま
た は 底(base)と
い う.β
進 表 現 され て い る数 を β 進 数
と い う.
例2.1
10進
数59の3
進 表 現 を 求 め て み よ う.
5910=2×27+3+2
=2×33+0×32+1×31+2×30
で あ る か ら,5910の3
進 表 現 は20123で
2.1.3
あ る.
2進 数 へ の 変 換
2 進 表 現 され て い る 整 数 を10進
表 現 に す る こ と は,式(2.1)で1010112=4310
で あ る こ と を 示 した と き の よ う に,直 2 進 表 現 を8 進 表 現 に し て か ら,そ
接 計 算 す れ ば よ い. れ を10進
表 現 に す る と い う こ と が よ く行
わ れ る. 2 進 表 現 か ら8 進 表 現 を 得 る の は 簡 単 で あ る.た 進 数 を,右
か ら3 桁 ず つ 区 切 っ て,8=23だ
と え ば,1010112と
か ら,
101011=(1×25+0×24+1×23)+(0×22+1×21+1×20)
=(1×22+0×21+1×20)×23+(0×22+1×21+1×20)
=5×81+3×80
と 表 せ ば,53が1010112の8
進 表 現 と い う こ と に な る.つ
1010112=538
ま り,
い う2
で あ る. 整 数 の 2 進 表 現 か ら16進 じ よ う に 考 え て,2
表 現 へ 変 換 す る に は,16=24だ
か ら,上
進 表 現 の 右 か ら 4 桁 ず つ 区 切 っ て み れ ば よ い.た
と同
と え ば,
10101111102は
10101111102=1
0111
1110
=1×28
+(0×27+1×26+1×25+1×24)
+(1×23+1×22+1×21+0×20)
=1×162
+(0×23+1×22+1×21+1×20)×161
+(1×23+1×22+1×21+0×20)×160
=1×162+7×161+14×160
で あ る . こ こ で,10101111002の16進 162の
係 数14,161の
係 数 7,
係 数 1 を 右 か ら 並 べ れ ば よ い の だ か ら,
1714
と な る こ と に な る が,160の しい.そ に,そ
表 現 は,160の
こ で,16進
位 の14は10進
数 で あ っ て,こ
こで 使 うに は お か
表 現 で は,1010,1110,1210,1310,1410,1510を
れ ぞ れ,A,B,C,D,E,F
を 用 い る.し
表すの
た が っ て,1410はE16だ
か ら,
10101111102=17El6
の よ う に 表 す. た と え ば,ABCD16は,10進
表現で は
10×163+11×162+12×161+13×160=43981
であ る. 次 に10進
表 現 を 2進 表 現 に 変 換 す る 仕 方 を 考 え よ う.あ
る 整 数 n の 2進 表
現 が,(dudu-1・
・dld0)2で
あ る と す る と,
n=du×2u+du-1×2au-1+...+d1×21+d0×20
で あ る か ら,n
を 2 で 割 る と,商
で,そ
が
du×2u-1+du-1×2au-2+...+d1×20
の と き の 余 り と して,d0を
り がd1で
あ る.商
(2.2)
得 る.さ
を 2 で 割 る こ と を,商
に 各 位 の 数 字d0,d1,…,du-1で,商
ら に,こ
の 商(2.2)を
2で 割 っ た 余
が 1に な る ま で 続 け れ ば,余
りが 順
が 1 に な っ た と き そ の 1が 最 上 位 の 数du
で あ る.
ア ル ゴ リ ズ ム2.1:10進 入 力:10進 出 力:n
表 現 を 2進 表 現 へ
数 n の 2進 表 現dudu-1…d1
ステ ツ フ: (1) i←0 (2) q←n (3) q≠1の
間,次
d2←(q
q←(q
を行 う を 2 で 割 っ た 余 り)
を 2 で 割 っ た 商)
i←i+1 (4) u←i (5) du←1 (6) dudu-1…d1を
実 際 に は,次
例2.2
10進
出力
の よ う に して,10進
数41の
2進 表 現 は
表 現 を 2 進 表 現 に 変 え る こ と が 多 い.
2)41
2)20余
り 1 …
20の
係数
2)10余
り 0 … 21の
係 数
2)5
余 り 0 … 22の
係 数
2)2
余 り 1 … 23の
係 数
1 余 り 0 … 24の
係 数
↑
25の
と な る こ と か ら,1010012で
2.2
係 数
あ る.
累 乗 の 計 算 の ア ル ゴ リ ズ ム:2
第 1章 で,x7を
進 表 現 を利 用 し て
計 算 す る と き,
x7=(x2×x)2×x で あ る こ と を 用 い て 計 算 す る ア ル ゴ リ ズ ム を 紹 介 し た.実 2進 表 現 と 密 接 に 関 係 し て い る.一
般 に,x
す る と き,xnを
を 順 々 に 掛 け てx2,x3,…xnを
計 算 す る の に,x
ル ゴ リ ズ ム は 次 の よ う に 書 け る.
ア ル ゴ リ ズ ム2.2:累 入 力:実
数x,2
乗 の 計 算(素 朴 な 方 法)
以 上 の 整 数n
出 力:y=xn ス テ ッ プ: (1) y←x (2) i←2 (3) i〓nで
あ る 間 次 を行 う
y←y×x i←i+1
を 実 数 と し,n
は,こ
れ は 指 数 7の
を 2以 上 の 整 数 と 求 める ア
xn'=
(4) yを 出 力
こ の ア ル ゴ リ ズ ム で は,掛 2以 上 の 整 数n
け 算 はn-1回
行 わ れ る.
が2k〓n<2k+1の
と き,n
の 2進 表 現 は
n=(1dk-1dk-2…dld0)2
と 表 さ れ る.こ
こ で,k〓1で
あ り,di(0〓i〓k-1)は
0 ま た は 1で あ る .
n'を
n'=(1dk-1dk-2…d1)2
と す る と,n=n'×2+d0な
の で,実
数x
に 対 し て,
(xn' )2 (x n')2×x
xn =xn'×2+d0=xn'×2×xd0=
(d0=0の (d 0=1の
と き) と き)
で あ る . 同 じ よ う に n"を
n"=(1dk-1dk-2…d2)2
と す る と,n'=n"×2+dlな
の で,
で あ る . こ の こ と か ら,次
(xn")2
(d
(xn")2×x
(d1=1の
l=0の
と き) と き)
の よ う な ア ル ゴ リ ズ ム でxnが
か る.
ア ル ゴ リ ズ ム2.3:累 入 力:実
数x,2
出 力:b0=xn ス テ ツ プ: (1) bk←x (2) i←k-1
乗 の 計 算(指
以 上 の 整 数n
数 の 2 進 表 現 を 使 っ て)
の 2 進 表 現(1dk-1dk-2…dld0)2
計 算 で きる こ とが わ
(3) i〓0で
あ る 間,次
di=0の
を行 う
とき
bi←bi+12
d2=1の
とき
bi←bi+12×x
i←i-1 (4) b0を
n
出力
の 2 進 表 現 が(1dk-1dk-2…dld0)2と
い う こ と は,2k〓n<2k+1で
あ り,
k=[log2n]
と い う こ と で あ る.こ ズ ム で,掛
こ で,[x ] はx
け 算 は,di=0な
の アル ゴ リ
らば
bi←bi+12
に お い て,bi+12=bi+1×bi+1と
以 下 の 最 大 の 整 数 を 表 す.上
し て,1
回,di=1な
ら ば
bi←bi+12×x
に お い て,2 で,ア
回 行 う.ま
た,i
はk-1,k-2,…,1,0
ル ゴ リ ズ ム 全 体 で は,n=(11…1)2の
多 く,そ
の 回 数 は,2k=2[log2n]
と2.3に
つ い て 次 の こ と が 成 り 立 つ.
性 質2.1
ア ル ゴ リ ズ ム2.2で
のk と き,掛
回 で あ る.し
は,n-1回
お い て 実 行 さ れ る 掛 け 算 の 回 数 は2log2n以
通 りの 値 を と る の
け 算 をす る回 数 が 最 も
た が っ て,ア
掛 け 算 を 行 う.ア 下 で あ る.
ル ゴ リ ズ ム2.2
ル ゴ リ ズ ム2.3に □
2.3
2.3.1
コ ン ピュ ー タの 内部 での 整 数 の表 現
整 数 の表 現
計 算 機 の 内 部 で は,数 る."計
は 有 限 桁 の 2 進 数 か16進
算 機 の 内 部 で は"と
い う の は,"プ
ロ グ ラ ム な ど を 実 行 し た と き に,そ
の プ ロ グ ラ ム の 中 で 与 え ら れ て い る 数 値 や,キ ら デ ー タ と し て10進 は"と
数 で 表 され る の が 普 通 で あ
ー ボ ー ドか ら ま た は フ ァ イ ル か
数 で 与 え られ る 数 値 が 計 算 機 に よ っ て処 理 さ れ る と きに
い う 意 味 で あ る.整
数 が 計 算 機 の 内 部 で ど の よ う に 表 さ れ る か,最
も一
般 的 な パ ソ コ ン や ワ ー ク ス テ ー シ ョ ン で 使 わ れ て い る 2進 数 の 場 合 を 考 え よ う. 2進 数 1桁 を 1 ビ ッ ト(bit)と
い う.bitはbinary
digitを
略 し た も の で,2
進 数 の 1桁 と 同 じ情 報 量 を も つ 情 報 の 単 位 と し て も使 わ れ る. 計 算 機 の 内 部 で は,定 り,記
め ら れ た 長 さ の ビ ッ トの 列 を 1単 位 と し て,計
憶 装 置 に 読 み 書 き す る.こ
と い う.1 語 の 長 さ は,コ
算 した
の 定 め ら れ た 長 さ の ビ ッ ト列 を 1 語(word)
ン ピ ュ ー タ に よ る が,32ビ
ッ トま た は64ビ
ッ トの
も の が 多 い. コ ン ピ ュ ー タ の 内 部 で 整 数 が ど の よ う に 表 さ れ る か を 考 え よ う .32ビ 64ビ
ッ トで 例 を示 す と 煩 雑 に な る の で,こ
列 で 例 示 す る こ と が 多 い.た ば,表2.1の
よ う に24=16個
と え ば,1
ッ トや
の 本 で は 4 ビ ッ ト程 度 の 短 い ビ ッ ト
語 を 4 ビ ッ ト とす る と,単
純 に考 え れ
の 整 数 を 表 す こ と が で き る.表2.1で,ビ
ッ ト
パ タ ー ン と い う の は 各 語 の ビ ッ ト列 を 具 体 的 に 書 き 出 し た も の で あ る. 表2.1で
は,負
な い が,負
の 整 数 も扱 う と き は くふ う が 必 要 に な る .
の 整 数 が な い.0
す ぐ に 思 い つ くの は,最 正,1
以 上 の 整 数 だ け を扱 うの な ら こ れ で か まわ
初 の 1 ビ ッ ト を符 号 の た め に 使 っ て,そ
な ら 負 と す る と い う 方 法 で あ る.た
+1 を1001は-1 が,整
を 表 す,と
す る の で あ る.こ
ッ トパ タ ー ン が0001は
の 方 法 は原 理 的 に は 簡 単 で あ る
数 を 表 す と き に は ほ と ん ど使 わ れ な い.
普 通 は 2 の 補 数 と い う も の を 使 う.た う に,ビ 710を
と え ば,ビ
れが 0な ら
ッ トパ タ ー ン が0000か
表 す と し て,ビ
ら0111ま
ッ トパ タ ー ン1000か
と え ば,4 で は,そ ら1111ま
ビ ッ トの と き,表2.2の
よ
の ま ま,そ
ら
で は,そ
れ ぞ れ010か
れ を 2進 表 現 と
表2.1
4ビ
ッ トの 整 数(符 号 を考 え な い)
み た と き に 正 の 整 数 n を 表 し て い る と き,負 つ ま り,ビ
ッ トパ タ ー ン1000を
の 整 数n-24を
2進 表 現10002と
タ ー ン1000は23-24=-8を
表 す,と
タ ー ン1001は,10012=23+1だ
み れ ば23だ
す る の で あ る.同
一 般 に,整
き,n-2kを
ツ トパ
ビ ッ トの 2 進 数 で 表 す と き,最
上 位 ビ ッ トが 1の も の は,そ
表 す と す る.こ
し た が っ て,0111な
じ よ う に ビ ッ トパ
ようになる.
数 を 1語 の 長 さ がk
現(2'scomplement)と
ッ トパ
か ら24-1-24=-1
つ ま り最 も左 側 の ビ ッ トが 0 で あ る も の は,そ そ の ま ま 表 し,最
か ら,ビ
か ら(23+1)-24=-7を,…,ビ
タ ー ン1111は11112=23+22+21+20=24-1だ を 表 す と して,表2.2の
表 す も の と す る.
上 位 ビ ッ ト,
れ を 2進 表 現 と み て,表
す数 を
れ を 2 進 表 現 した らn で あ る と
の よ う に し て 負 の 整 数 を 表 す 表 し方 を 2 の 補 数 表
い う. ど と書 か れ て い る と き は ビ ッ トパ タ ー ン と 2進 表 現 と 同
じ も の と み る こ と が で き る が,1011な
ど と書 か れ て い る場 合 は そ う考 え る わ け
に い か な い の で,2 進 表 現 と 区 別 す る た め に,こ う こ と ば を 使 い,2 進 表 現 に は 原 則 と し て,添
の 本 で は,ビ
ッ トパ タ ー ン と い
え 字 の 2 を 書 く よ う に し て い る.
2 の 補 数 表 現 を 求 め る に は 次 の よ う に す れ ば よ い.
表2.2
性 質2.2 1 -nを
語 の 長 さ がk
表 すk
ビ ッ トの と き,2k-1以
下 の 正 の 整 数n
ビ ヅ トの 2 の 補 数 表 現 を 求 め る に は
を 反 転 さ せ,そ こ こ で,ビ
4 ビ ッ トの 整 数(負 の 数 は 2 の補 数)
に 対 し て,
,n
の 2進 表 現 の 各 ビ ッ ト
な ら ば l に,1
な ら ば 0 に 置 き換 え る
れ に 1 を 加 え れ ば よ い. ッ トを 反 転 さ せ る と は,0
こ と で あ る.
証 明 2k-1以 2kと
下 の 正 の 整 数n
な る m のk
て,n
と m
に 対 し て,-nの
2 の 補 数 表 現 と は,-n=m-
ビ ッ ト 2 進 表 現 で あ る こ と か ら,m=2k-nで
っ
を 加 え る と,
n+m=2k
(2.3)
で あ る.一 る と,k
あ る.よ
方,n
のk
ビ ッ ト 2進 表 現 と,そ
ビ ツ トす べ て が 1 と な る か ら,そ
に 等 し い.つ る よ う にn
の各 ビ ッ トを反 転 した もの を加 え
の 数 は,
2k-1+2k-2+…+22+21十20=2k-1 ま り,-nの のk
2 の 補 数 表 現 は,式(2.3)と
(2.4) 式(2.4)を
比 べ る とわ か
ビ ッ ト 2 進 表 現 の 各 ビ ッ ト を 反 転 し た も の よ り 1大 きい.し
た が っ て,-nの
2の 補 数 表 現 を 求 め る に は,n
のk
ビ ッ ト2進 表 現 の 各 ビ ッ
ト を 反 転 し た も の に 1 を 足 せ ば よ い.
例2.3
□
た と え ば,1 語 の 長 さ が 4 ビ ッ トの と き,整
で あ る.各
ビ ッ ト を 反 転 さ せ る と,1001と
表 現 は10012に00012を
こ こ で,ビ
加 え,1010と
数 6の 2進 表 現 は,01102
な る . し た が っ て,-6の
2の補 数
な る.
ッ トを 反 転 して 1 を 加 え る と い う操 作 を よ く 見 て み る と,2
の補
数 表 現 を 求 め る に は 次 の よ う に し て も よ い こ と が わ か る.
性 質2.3
1 語 の 長 さ が k ビ ッ トの と き,2k-1以
-nを 表 すk ビ ッ ト(20の
ビ ッ トの 2 の 補 数 表 現 を 求 め る に は,n 位)か
ら,順
の ま ま に し て お い て,そ
例2.4
下 の 正 の 整 数n
に 対 し て,
の 2進 表 現 を最 も右 の
に 左 の ビ ッ ト を 見 て い き,最
初 に現 れ る 1 まで は そ
れ よ り上 位 の 各 ビ ッ トを 反 転 さ せ れ ば よ い.
た と え ば,610は01102だ
か ら,一
の ビ ッ トの 1 は そ の ま ま に して お い て,右 番 目 の ビ ッ トの 0 を 1 に 置 き換 え て,得
□
番 右 の ビ ッ トの 0 と 右 か ら 2番 目 か ら 3 番 目 の ビ ッ トの 1 を 0 に,4
ら れ る1010が-6の
2の補 数 表 現 と
な る の で あ る.
現 在 の パ ソ コ ン や ワ ー ク ス テ ー シ ョ ン で 多 く 使 わ れ て い る 1語 の 長 さ が32 ビ ッ トの 場 合 に,1 32ビ
語 で 表 す こ と の で き る 整 数 の 範 囲 を 求 め て お こ う.
ッ トの 整 数 で,負
の 整 数 は 2 の 補 数 で 表 さ れ て い る と き は,
か ら か ら
を 表 す こ と が で き る.
まで の 0以 上 の 整 数 と, まで の 負 の 整 数
例 題2.1 64ビ ッ トの 整 数 で,負 の整 数 は 2の 補 数 で 表 さ れ て い る と き,表 す こ との で きる 整 数 の 範 囲 を求 め よ. 解 答 32ビ ッ トの整 数 と 同 じ よ うに 考 えて, か ら
ま で の 0以 上 の 整 数 と,
か ら
ま で の 負 の整 数
を 表 す こ とが で きる.
2.3.2
□
整 数の加減 算
前 項 で み た よ う に,コ
ン ピュ ー タで は,扱
え る整 数 には 範 囲 が あ る の で,足
し算 を す る と きな ど注 意 しな い と,意 外 な こ とが 起 こ る こ とが あ る.負 の 整 数 は 2の 補 数 で 表 す と き,足
し算 や 引 き算 は ど う な る か を,1 語 の長 さが 4 ビ ッ
トの と き を例 に と りなが ら,考 え て み よ う.
0001+0101=0110の
よ う に,0 以 上
の 整 数 の 足 し算 で 和 が0111以
下 になる も
の は 問 題 な く正 し い 値 を得 る.
0101+0011=1000だ
か ら,2
表 現 で は1000は-810に
なっ て し ま うた
め,正
の補 数
し い 結 果 を 得 る こ と が で き な い.
(-4)10+610=1100+0110=10010 と な る が,1
語 の 長 さ は 4 な の で,右
4桁 し か 考 え ら れ な い.し ら 5桁 目 の,つ れ て,0010=2と
か ら
た が っ て,右
か
ま り一 番 左 の 1は 無 視 さ 正 し く計 算 で き る.
引 き算 は 符 号 を変 え て 足 す こ と と 同 じ だ か ら710-310=710+(-3)10= 0111+1101=10100と
な る が,右
4桁 しか 考 え ら れ な い の で,つ の 1は 無 視 さ れ て,0100=42と
か ら
ま り一 番左 な り,結
果 は 正 し く な る.
(-3)10-410=(-3)10+(-4)10= 1101+1100=11001と
な る が,一
の 1は 無 視 さ れ て,1001=-7と
番左 正 し く
計 算 で き る.
(-7)10-(3)10=(-7)10+(-3)10= 1001+1101=10110で
あ る が,最
上位
の ビ ッ トは 無 視 さ れ て,0110=(6)10と な っ て 正 し く計 算 で き な い.
こ の よ うな 整 数 の 表 し方 と足 し算 の 関 係 は,次 の よ うな 図 にす る とわ か りや
図2.1
整 数 の 2 の 補 数 表 現 と足 し算 の 関 係(4 ビ ッ トの例)
す い.図2.1で,+1す
る と右 回 り に 1つ ず つ,-1す
る と 左 回 り に 1つ ず つ ず
れ て い く.
a.
2.4
桁 数 の 多 い整 数 の 演 算
桁 数 の 多 い整 数 の 演 算 に くふ うが 必 要 な こ と
前 項 で 述 べ た よ う に,1 語 の 長 さ は32ビ で 表 す と す る と,表 あ る.こ
れ は,そ
りは 小 さ い . た と え ば,20=1か
に 対 し て,2n=2n-1×2と て 計 算 す る と,230は と 正 し く な くな る.こ
の 数 は 2の補 数
す こ と の で き る 最 大 の 整 数 は,231-1=2147483647で
れ ほ ど 大 き な 数 で は な く,12!=479001600よ
13!=6227020800よ
と な り,こ
ッ トで あ る と き,負
り は 大 き い が, ら始 め て,n=1,2,…
して 2の 累 乗 を 求 め る単 純 な プ ロ グ ラム をつ くっ 正 し く1073741824と れ は,230は
計 算 さ れ る が231は-2147283648
2進 表 現 で
れ に 2 を 掛 け る と 各 ビ ッ トが 左 へ 1つ ず つ シ フ ト し て,
と な る.こ れ は,最 上 位 ビ ッ トが 1な の で 2の補 数 表 示 で は231-232=-2-31 を表 して い る わ け で あ る. そ こ で,桁 数 が 多 い 数 の 計 算 を す る には,何 ない.コ
らか の くふ う を しな け れ ば な ら
ン ピ ュ ー タで の 実 数 の扱 い は次 章 で 説 明 す る が,コ
ンピュータでは整
数 しか扱 え ない わ け で は な く,実 数 も扱 え る し,実 数 は 整 数 よ りは 非 常 に多 く の 桁 数 の計 算 もで き るの で 整 数 の範 囲 とい う狭 苦 しい とこ ろ で は な く,実 数 の 範 囲 で計 算 す る の も もち ろ ん 1つ の 方 法 で あ る.そ れ で も,や は り扱 え る数 の 範 囲 に は 限 界 が あ る.こ
こで は,桁 数 の多 い 整 数 の 演 算 につ い て基 本 的 な方 法
を説 明 し よ う.こ の 基 本 的 な 方 法 は,別 に 難 しい こ と を行 うわ け で は な く,ふ つ う 1桁 ず つ 行 う計 算 を何 桁 か ず つ ま とめ て行 う だ け で あ る. こ こで桁 数 が 多 い とい うの は,2 語 以 上 使 わ な け れ ば表 現 で きな い数 の こ とで
あ る . そ の よ う な 数 を 多 倍 長 数(multiprecision て,1 語 で 表 現 さ れ て い る 数 を 単 精 度(sigle タ で 多 倍 長 数 を 扱 う に は,配 な け れ ば な ら な い が,そ
number)と
precision)の
い う.こ
れ に対 し
数 と い う. コ ン ピ ュ ー
列 と よ ば れ る も の を 使 う な ど し て 表 現 を くふ う し
れ は プ ロ グ ラ ミ ン グ の 本 な ど に 譲 る こ と に す る.多
倍
長 数 の 演 算 を 多 倍 長 演 算 と い う. b. 多 倍 長 整 数 の 足 し 算 ま ず 足 し算 か ら始 め よ う.た
と し て,A+Bを
と え ば,
A=68719476736
(=236)
B=17179869184
(=234)
求 め る こ と を 考 え る.A
もB
も 長 さ32ビ
ッ トの1 語 で 表
す こ と は で き な い. こ こ で は,い A+Bを
わ ゆ る 筆 算 の 拡 張 に よ る 方 法 を考 え よ う.
手 で 足 し算 す る と き は,1
足 し算 の 結 果 の1 の 位 を0 と し,10の て12な
の で10の
で9,繰
位 は2,100の
の 位 の6 と4 を 足 し,そ
位 の3 と8 と 繰 り上 が りの1
位 は6 と9 を 足 して5,…
1の 位 か ら1 桁 ず つ 繰 り 上 が り を 考 え な が ら 足 し て い く.こ
が,10進5
で 掛 け 算 を す る と き に,16ビ
下 で,10進4
桁 の 数 を2 つ 掛 け た と き は32ビ
手 順 は 次 の よ う に な る. を1 の 位 か ら4 桁 ず つ 区 切 っ て,
A3←6736
A2←1947 Al←687
と す る.
とい う よ うに
れ をそ の ま ま実 現
ッ ト の2 進 数 の 最 大 数
桁 の 数 を2 つ 掛 け て も32ビ
で あ る.
1) A
と を足 し
う 少 し ま と め て,4 桁 ず つ で 同 じ よ う な こ と を す る.4 桁
に し た 理 由 の1 つ は,後 216-1=65535以
の で,
位 は7 と1 と 繰 り上 が りの1 を 足 す と9 な の
り 上 が り は な い の で1000の
し て も よ い の だ が,も
れ が10な
ッ トで 表 さ れ る
ッ トで は 表 せ な い こ と が あ る か ら
2) B
を1 の 位 か ら4 桁 ず つ 区 切 っ て,
B3←9184
B2←7986
B1←171
と す る.
3)
c←0と
し て お く.
4) C3←(A3+B3+cの
下 位4 桁)
A3+B3+c〓9999な
A3+B3+c〓10000な
と す る.
ら ばc←0 ら ばc←1
こ の と き は,A3+B3+c=15920な
の で,C3=5920,c=1で
5)
C2←(A2+B2+cの
下 位4 桁)
A2+B2+c〓9999な
ら ばc←0
A2+B2+c〓10000な
と す る.
こ の と き は,A2+B2+C=9934な
6)
C1←(Al+B1+cの
下 位4 桁)
Al+B1+c〓9999な
ら ばc←0
A1+B1+c〓10000な
と す る.
こ の と き は,A1+B1+c=858な
7)
C0←cと
こ の と き は,c=0で
ら ばc←1
あ る.
ら ばc←1
の で,C1=858,c=0で
あ る.
あ る.
と き は,C1,C2,C3を,C0=1の に,左
85899345920と
と き は,C0,C1,C2,
か ら並 べ て 得 ら れ る 数 が,A+Bで
こ の と き は,c=0な
最 後 は,本
の で,C2=9934,c=0で
す る.
8) C0=0の C3を,順
あ る.
あ る.
の で,A+B=C1×108+C2×104+C3= な る.
当 は,cl×108+C2×104+C3は1
れ が 扱 え る よ う に くふ う が 必 要 に な る が,本
語 で は 表 せ な い の で,そ 書 で は,そ
の 具 体 的 な 方 法 に はふ
れ な い こ と に す る. 要 す る に,次
の よ う に し て い る の で あ る.
一 般 に は次 の よ う に す る こ とに な る .
ア ル ゴ リ ズ ム2.4:多 入 力:10進
倍 長 整 数 の 足 し算
表 現 で 与 え ら れ た 多 倍 長 整 数A,B
出 力:A+B ス ア ツ フ: (1) 正 の 整 数A,B
k=1,2,3な
の 桁 数 の 多 い ほ う の 桁 数 を4n+kと
す る
らば
N←n+1 k=0な
らば N←n
(2) A を 1の 位 か ら 4桁 ず つ 区 切 っ て,順 つ き た ら そ れ 以 降 のAi,Ai-1,…Alは (3) B を 1の 位 か ら 4 桁 ず つ 区 切 っ て,順 つ き た ら そ れ 以 降 のBj,Bj-1,…,B1は (4) c←0 (5) i←N
に,AN,AN-1,…
と し,桁
数 が
と し,桁
数 が
0 と す る. に,BN,BN-1,… 0 と す る.
(6) i〓1で
あ る 間,次
Ci←(Ai+Bi+cの
下 位 4桁)
Ai+B2+c〓9999な
を行 う
らば
c←0 Ai+Bi+c〓10000な
らば
c←1
(7) C0←c (8) C0=0な
らば
A+B=C1×10000N-1+C2×10000N-2+…+CNを C0=1な
出力
らば
A+B=C0×10000N+Cl×10000N-1+C2×10000N-2+...+CN を出力
例2.5
A,B
を
A=9999876543210987
B=123465439102
と す る.
A は16=4×4桁,B Ai,Bi,c,Ciを
は12桁
だ か ら,N←4と
表 に す る と次 の よ う に な る.た
A0の 値 を 表 し,c の 行,1
の 列 はi=1の
した が っ て,
A+B=10000000008650089 表2.3
す る. と え ば,A
と き のcの
の 行,0
値 を表 す.
の列が
を 得 る. c. 多 倍 長 整 数 の 引 き 算 足 し算 と 同 じ よ う に 考 え て,多 の よ う に す る こ と が で き る.簡
ア ル ゴ リ ズ ム2.5:多 入 力:10進
倍 長 の 正 の 整 数A,B 単 の た め にA〓Bと
の 引 き 算A-Bも
次
す る.
倍 長 整 数 の 引 き算
表 現 で 与 え ら れ た 多 倍 長 整 数A,B.た
だ しA〓Bと
す る
出 力:A-B ス テ ッ プ: (1) A〓Bな
の で,A
k=1,2,3な
の 桁 数 を4n+kと
す る.
らば
N←n+1
k=0な
らば
N←nと
す る.
(2) A を 1の 位 か ら 4 桁 ず つ 区 切 っ て,順 (3) B を 1の 位 か ら 4桁 ず つ 区 切 っ て,順
つ き た ら そ れ 以 降 の 、Bj,Bj-1,…,B1は
(4) b←0 (5) i←N (6) Ai〓Biな
らば
Ci←Ai-Bi-b
b←0
Ai<Biな
らば
Ci←10000+Ai-Bi-b
b←1
(7) i〓2な
らば
i←i-1
ス テ ッ プ(6)を
i=1な (8) C1≠0な
行 う
らば 次 へ 進 む らば
に,AN,AN-1,…Alと に,BN,BN-1,… 0 と す る.
す る. と し,桁
数が
A-B=C1×10000N-1+C2×10000N-2+…+CNを
出 力
C1=…=Ce=0(1〓l<N)な A
ら ば
-B=Ce+1×10000N‐(e+1)+…+CNを
C1=…=CN=0な A
ら ば
-B=0を
列2.6 A, B
出 力
出力
を
A=1234567890123
B=987664321012
と す る. ●A
は13=4×3+1桁
だ か ら,N←3+1=4と
す る.
●A4←123,A3←6789,A2←2345,Al←1と ●
す る.
B4←1012,B3←6432,B2←9876,B1←0と ●b←0と
す る.
す る.
●i ←N,つ
ま り こ の 例 で は,i←4と
●A4=123,B4=1012で
す る.
あ り,A4<B4だ
10000+123-1012-0を
計 算
か ら,1000+A4-B4-b=
し,そ
の 結 果911をCiに
代 入 し,b=1
と す る. つ ま り,C4←9111,b←1と ●i
=4〓2な
す る.
の で ,i←i-1=3と
す る.
●A3=6789,B3=6432で
あ り,A3〓B3だ
6789-6432-1を
計 算 し,そ
つ ま り,C3←356 ●i=3〓2な
,b←0と
の 結 果911をCiに
10000+2345-876-0を
つ ま り,C2←2469,b←1と
す る.
す る. あ り,A2<B2だ 計 算 し,そ
と す る.
代 入 し,b=0と
す る.
の で,i←i-1=2と
●A2=2345,B4=9876で
か ら,A3-B3-b=
す る.
か ら,1000+A2-B2-b= の 結 果2469をCiに
代 入 し,b=1
●i
=20〓2な
の で,i←i-1=1と
●A1=1,B1=0で
す る.
あ り,Al〓B1だ
計 算 し,そ
の 結 果 0 をCiに
代 入 し,b=0と
つ ま り,C1←0,b←0と ●i
=1な
進 み ,C1=0(つ
ま り,l=1)な
の で
A-B=C2×100002+C3×10000+C4
す る.
す る .
の で ス テ ッ プ(8)へ
か ら,Al-B1-b=1-0-1を
=246903569111 を 出 力 す る.
2.4.1
多 倍 長 整 数 の 掛 け算
多 倍 長 の 正 の 整 数A,B 行 う こ と に し よ う.こ
の 掛 け 算 も 足 し算 と 同 じ よ う に,4
こ で は,簡
て 高 々 4桁 の 場 合 を 考 え よ う.B
単 の た め に,A
ア ル ゴ リ ズ ム2.6:多
数 と し
は 単 精 度 の 整 数 で あ る.
倍 長 整 数 の 掛 け算
入 力:10進
表 現 で 与 え ら れ た 多 倍 長 整 数A>0,
表 現 で 与 え ら れ た 高 々 4桁 の 整 数B>0
10進
桁ず つ区切 って
が 多 倍 長, B は10進
出 力:A×B ス テ ッ プ: (1) 正 の 整 数A
k=1,2,3な
N←n+1
k=0な
の 桁 数 を4n+kと
す る.
らば
らば
N←n
(2) A を 1 の 位 か ら 4 桁 ず つ 区 切 っ て,順 (3) c←0 (4) i←N (5) Ci←(Ai×B+cの
Ai×Bi+c〓9999な
下 位 4桁) らば
に,AN,AN-1,…,Alと
す る.
c←0 A2+Bi+c〓10000な
らば
c←(Ai×Bi+c-Ci)/10000
(6) i〓2な
らば
i←i-1
ス テ ッ プ(5)を
i=1な
行 う.
らば
C0←c
次 の ス テ ッ プ(7)へ
(7) C0=0な
進 む
らば
A×B=cl×10000N-1+C2×10000N‐2+…+CNを C0≠1な
出力
らば
A×B=C0×10000N+C1×10000N-1+…+CNを
B も多 倍 長 整 数 の と き は,B
出力
も 4桁 ず つ 区 切 っ て,上
の 区 切 っ た 1つ 1つ に つ い て 行 い,そ
と同 じよ うな計 算 をそ
れ ら を位 取 り に 注 意 し て,桁
数の多 い整
数 の 足 し算 を 行 う こ と に な る.
例2.7 A,B
を
A=1234567890123456
B=9876
と す る. ●A は16=4×4桁
だ か ら,N←4と
す る.
●A4←3456,A3←9012,A2←5678,Al←1234と
●
●c←0と
す る.
●i←4と
す る.
A4×B+c=3456×9876+0を 桁1456を
C4に 代 入 し,c←3413と
す る.
計 算 し,そ す る.
の 結 果34131456の
下位 4
●i=4〓2な
の で,i←i-1=3と
す る.
●A3×B+c=9012×9876+3413を 4桁5925を
計 算 し,そ
C3に 代 入 し,c←8900と
●i=3〓2な
計 算 し,そ
代 入 し,c←5608と
代 入 し,c←1219と
●C0=1219≠0な
計 算 し,そ
の で,C0←c=1219と
の 結 果12192592の
下位
す る.
●Al×B+c=1234×9876+5608を
●i=1な
下位
す る.
の で,i←i-1=1と
4 桁2592をC1に
の 結 果56084828の
す る.
●A2×B+c=5678×9876+8900を
●i=i〓2な
下位
す る.
の で,i←i-1=2と
4桁4828をC2に
の 結 果89005925の
す る. し て,ス
テ ッ プ(7)へ
進 む.
の で,
C0×100004+…+03×10000+C4=12192592482859251456 をA×Bと
2.4.2
して 出 力 す る.
多 倍 長 整 数 の 割 り算
多 倍 長 の 正 の 整 数A,B
の 割 り算A÷Bは,や
は り,4 桁 ず つ 区 切 っ て,多
倍 長 整 数 ど う し の 掛 け 算 や 引 き 算 を 組 み 合 わ せ て 行 え ば よ い わ け だ が,話 単 に す る た め に,A
が 多 倍 長 整 数 で, B は10進
を簡
数 で 高 々4桁 の場 合 だ け を考
え る こ と に す る.
ア ル ゴ リ ズ ム2.7:多 入 力:10進 10進
倍 長 整 数 の割 り算
表 現 で 与 え ら れ た 多 倍 長 整 数A>0, 表 現 で 与 え ら れ た 高 々 4 桁 の 整 数B>0
出 力:A÷Bの
商 と余 り
ス テ ッ プ: (1) 正 の 整 数A
k=1,2,3の
の 桁 数 を4n+kと
す る.
と きN=n+1,k=0の
(2) A を 1 の 位 か ら 4 桁 ず つ 区 切 っ て,順 (3) c←0
と きN=nと に,AN,AN-1,…,A1と
す る. す る.
(4) i←1 (5) Ai÷Bを
計 算 し,そ
の 商 をCiと
し,余
り を c と す る.
(6) i←i+1 (7) (c×10000+Ai)÷Bを (8) i〓N-1な
の 商 をCi,余
り を c と す る.
らば
ス テ ッ プ(6)へ
i=Nな
計 算 し,そ
戻 る
らば
次 の ス テ ッ プ(9)へ
(9) C1≠0な
進 む
らば
A÷B=C1×10000N-1+C2×10000N-2+…+CN余
り c を
出力 C1=0な
らば
A÷B=C2×10000N-2+C3×10000N-3+…+CN余
り c を
出力
例2.8
A=123456789012345をB=34で
●A
は15桁
割 る と 次 の よ う に な る.
な の で,4n+k=4×3+3で
あ り,N←n+1=3+1=4
と す る. ●A
を
1の 位 か ら 4桁 ず つ
A 2←4567,Al←123と ●c←0と ●i ←1と
●i←i+1と
り21だ
か ら,C1←3,c←21と
す る.
す る. り27だ
か ら,C2←6310,
り33だ
か ら,C3←8202,
す る. す る.
●(c×10000+A3)÷B=278901÷34=8202余 c←33と
す る.
す る.
●(c×10000+A2)÷B=214567÷34=6310余 c←27と
に,A4←2345,A3←8901,
し て お く.
●Ai÷B=123÷34=3余 ●i←i+1と
切 っ て,順
す る.
●(c×10000+A4)÷B=332345÷34=9774余 c←29と
り29だ
か ら,C4←9774,
す る.
●C1×100003+C2×100002+C3×10000+C4がA÷Bの
商 で あ り,c
が 余 り で あ る か ら,
123456789012345÷43=3631082029774余
り29
を 出 力 す る.
2.5.1
2.5
ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム
最 大公約数 の計算
2 つ の 自 然 数 の 最 大 公 約 数 を 求 め る ア ル ゴ リ ズ ム と して,ユ 助 法,ま
ー ク リ ッ ドの 互
た は ユ ー ク リ ッ ドの ア ル ゴ リズ ム と よ ば れ る も の が あ る.こ
れ は,次
の 性 質 を 利 用 す る.
性 質2.4
m,n
1〓r<nと
をm>nな
す る と,m
証 明 自然 数
m,n
る 自 然 数 と し,m=qn+r,q,r とn
の 最 大 公 約 数 と,n
,nと
す る.よ
っ て,r=m-qn=dm'-qdn'=d(m'-qn')と
す る と, m=dm',n=dn'を
数 で も あ る.つ
と r の 最 大 公 約 数 は 等 し い.
の 正 の 公 約 数 全 体 の 集 合 をDm,nで
d∈Dm
ま り,d∈Dn,rで
あ る.し
は 自 然 数,
表 す こ と に す る.
満 た す 自 然 数m',n'が
存 在
な り,d
は rの約
た が っ て,
Dm,n⊂Dn,r
(2.5)
ま た,d'∈Dn,rな ら ば,r=m-qn=d'm",n=d'n"を n"が 存 在 す る .よ っ て,m=(m-qn)+qn=d'm"+qd'n"=d'(m"+qn") と な り,d'は
m の 約 数 で あ る.つ
ま り,d'∈Dm
Dn,r⊂Dm,n ゆ え に,式(2.5)と
式(2.6)か
ら,
,nで
満 た す 自 然 数 m",
あ る.し
た が っ て, (2.6)
Dm,n=D,n,r が 成 り立 つ.し
た が っ て,Dm
,nの 最 大 要 素 で あ る m,n
の 最 大 公 約 数 と,Dn,r
の 最 大 要 素 で あ る n,r の 最 大 公 約 数 は 同 じ も の に な る.
自然 数 m
□
とn の 最 大 公 約 数 を 求 め る ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム と は 次 の
よ う な も の で あ る.
ア ル ゴ リ ズ ム2.8:ユ 入 力:自
ー ク リ ッ ドの ア ル ゴ リ ズ ム
然 数 m,n
出 力:m,n
の 最 大 公 約 数 d と ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム の 長 さ〓
ス テ ッ プ: (1) r0←m
r1←n
(2) i←1 (3) ri≠0で
あ る 間,次
qi←ri-1÷riの
ri+1←ri-1÷riの
を行 う 商 余 り
{ri-1=qiri+ri+1で
あ る}
i←i+1 (4) ri=0の
とき
d←ri-1 〓←i-1
(5) d と〓 を 出 力
"性 質2.4"に は,m riがm
よ り,各i(i=1,2,…,〓)に
とn の 最 大 公 約 数 に 等 し い.し とn
の 最 大 公 約 数 で あ る.そ
qi←ri-1÷riの
ri+1←ri-1÷riの
商 余 り
つ い て,ri-1とriの た が っ て, ri-1がriで の と き のi に 対 して,ス
最大公 約数 割 り切 れ る と き, テ ッ プ(3)の
に よ り,ri+1=0と
な り,こ
の代 入 文 の直 後 に
i←i+1 を 実 行 す る の で,そ し て,そ
の あ と の ス テ ッ プ(4)で
の と き のi-1をlと
し て,ユ
は,ri-1が
最 大 公 約 数 に な る.そ
ー ク リ ッ ドの ア ル ゴ リ ズ ム の 長 さ と い
う こ と に し よ う.
例2.9
1024と40の
最 大 公 約 数 を こ の ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム で 求 め る
と 次 の よ う な 手順 に な る. ●m=1024,n=40な
r0←1024
r1←40
の で,
●i←1 ●ri=r1=40≠0な
の で 次 を 行 う.
ri-1÷ri=r0÷r1=1024÷40=25余
qi=q1←25
ri+1=r2←24
り24な
の で,
i←i+1{=2} ●ri=r2=24≠0な
の で 次 を 行 う.
ri-1÷ri=r1÷r2=40÷24=1余
qi=q2←1
ri+1=r3←16
り16な
の で,
i←i+1{=3} ●ri=r3=16≠0な
の で 次 を行 う.
ri-1÷ri=r2÷r3=24÷16=1余
qi=q3←1
ri+1=r4←8
り 8 な の で,
i←i+1{=4} ●ri=r4=8≠0な
の で 次 を 行 う.
ri-1÷ri=r3÷r4=16÷8=2余
り 0 な の で,
qi=q4←2 ri+1=r5←0 i←i+1
{=5}
●ri=r5=0な
の で
d←ri-1=r4=8
l←i-1=4 ●d=8とl=4を
例 題2.2
出 力.
m=49とn=64の
最 大 公 約 数 を ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム で
求 め よ. 解 答 ●m=49,n=64な
r0←49
r1←64
の で,
●i←1 ●ri=r1=64≠0な
の で 次 を 行 う.
ri-1÷ri=r0÷r1=49÷64=0余
qi=q1←0
ri+1=r2←49
り49な
の で,
り15な
の で,
i←i+1{=2} ●ri=r2=49≠0な
ri-1÷
の で 次 を 行 う.
ri=r1÷r2=64÷49=1余
qi=q2←1
ri+1=r3←15
i←i+1{=3} ●ri=r3=15≠0な
ri-1÷ri=r2÷r3=49÷15=3余 qi=q3←3
ri+1=r4←4
i←i+1{=4}
の で 次 を行 う. り 4 な の で,
●ri=r4=4≠0な
の で 次 を 行 う.
ri-1÷ri=r3÷r4=15÷4=3余
qi=q4←3
ri+1=r5←3
り 3 な の で,
i←i+1{=5} ●ri=r5=3≠0な
の で 次 を 行 う.
ri-1÷ri=r4÷r5=4÷3=1余
り 1 な の で,
qi=q5←1
ri+1=r6←1
i←i+1{=6} ●ri=r6=1≠0な
の で 次 を行 う .
ri-1÷ri=r6÷r7=3÷1=3余
qi=q6←3
ri+1=r7←0
り 0 な の で,
i←i+1{=7} ●ri=r7=0な
ので
d←ri-1=r6=1
l←i-1=6 ●d=1とl=6を
出 力.
{49と64の
最 大 公 約 数 は 1,す な わ ち,49と64は
互 い に 素}
ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム を 使 っ て 次 の こ と を 示 す こ と が で き る.
性 質2.5
自然 数 m
とn
の 最 大 公 約 数 が d の と き,
mx+ny=d と な る 整 数x
こ のx,y "性 質2.5"を
とy が 存 在 す る.
を ベ ズ ー(Bezout)係 示 す た め に,次
数 と い う こ と が あ る. の ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム を拡 張 し た も の
を 考 え よ う.
ア ル ゴ リ ズ ム2.9:拡 入 力:自
張 さ れ た ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム
然 数 m,n
出 力:m,n
の 最 大 公 約 数 d,mx+ny=dと
な るx,y,お
よび ユ ー ク リ ッ
ドの ア ル ゴ リ ズ ム の 長 さl ス ア ツ フ: (1) r0←m r1←n
S0←1
t0←0
s1←0
t1←1
(2) i←1 (3) ri≠0で
あ る 間,次
qi←(ri-1÷riの
を 繰 り返 す. 商)
ri+1←(ri-1÷riの
余 り)
si+1←si-1-qisi
ti+1←ti-1-qiti
i←i-1+1 (4)
ri=0の
と き
l←i-1
d←ri-1{=re}
x←si-1{=se} (5)
y←ti-1{=te} d,x,y,lを
性 質2.5の し て,
出 力.
証 明 ア ル ゴ リ ズ ム2.9に
お い て,各i(i=1,2,…,l+1)に
対
が 成 り 立 つ こ と は,次 の と き,そ
sim+tin=ri
(2.7)
の よ う に 数 学 的 帰 納 法 を 用 い て 示 す こ と が で き る.i=0,1
れ ぞ れ,
s0m+t0n=1×r0+0×r1=r0
s1m+t1n=0×r0+1×r1=r1
が 成 り 立 つ.2〓i〓l+1の
と き,0〓j<iな
る j に 対 し て,sjm+tjn=rj
が 成 り 立 つ と 仮 定 す る と,
sim+tin-(si-2-qi-1si-1)m+(ti-2-qi-iti-1)n
=Si-2m+ti-2n-qi-1(Si-1m+ti-1n)
=ri-2-qi-1ri-1
=ri
と な り,式(2.7)を i=lの
得 る.
と き,rl=d,x=sl,y=tlだ
か ら,
xm+yn=slm+tln=rl=d で あ り,"性
例 題2.3
質2.5"が
証 明 さ れ た.
m=1260,n=299と
を 満 た すx,y
し て,m,n
□
の 最 大 公 約 数 と,xm+yn=d
を 拡 張 さ れ た ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム を 使 っ て 求 め よ.
解 答 拡 張 さ れ た ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム は 次 の よ う に な る. 1) r0←1260
r1←299
s0←1
t0←0 s1←0
t1←1
2) i←1 3) ri=r1=299≠0な
qi=q1←4
ri+1=r2←64
si+1=s2←1
ti+1=t2←-4
i←i+1
の で,次 {r0÷r1=1260÷299の
余
{=si-1-qisi=s0-q1s1=1-4×0} {=ti-1-qiti=t0-q1t1=0-4×1} {=2}
qi=q2←4
ri+1=r3←43
の で,次
商}
{r1÷r2=299÷64の
余 り}
{=si-1-qisi=sl-q2sa=0-4×1}
ti+1=t3←17 i←i+1
を行 う
{r1÷r2=299÷64の
si+1=s3←-4
{=ti-1-qiti=t1-q2t2=1-4×(-4)} {=3}
5) ri=r3=43≠0な
の で,次
qi=q3←1
商}
{r0÷r1=1260÷299の
4) ri=r2=64≠0な
を行 う
を行 う
{r2÷r3=64÷43の
商}
ri+1=r4←21{r2÷r3=64÷43の si+1=s4←5
{=Si-1-qisi=s2-q3s3=1-1×(-4)}
ti+1=t4←-21 i←i+1
{=ti-1-qiti=t2-q3t3=-4-1×17)} {=4}
6) ri=r4=21≠0な qi=q4←2
の で,次
商}
{r3÷r4=43÷21の
Si+1=s5←-14
{=5} の で,次
を行 う
{r4÷r5=21÷1の
ri+1=r6←0
{r4÷r5=21÷
ti+1=t5←-1260
余 り}
{=ti-1-qiti=t3-q4t4=17-2×(-21))}
qi=q5←21
si+1=s6←299
,
{=si-1-qisi=s3-q4s4=-4-2×5}
ti+1=t5←59
7) ri=r5=1≠0な
を行 う
{r3÷r4=43÷21の
ri+1=r5←1
i←i+1
余 り}
商} 1 の 余 り}
{=si-1-qisi=s4-q5S5=5-21×(-14)} {=ti-1-qiti=t4-q5t5=-21-21×59)}
り}
i←i+1{=6} 8) ri=r6=0な l←5
の で,次
を行 う
{=i-1=6-1} d←1{=ri-1=r5}
x←-14
{=Si-1=s5}
y←59
{=ti-1=t5}
9) d,x,y
を 出力
した が っ て,1260と299の
最 大 公 約 数 は 1,す な わ ち,1260と299と
は互い
に 素 で あ り, (-14)×1260+59×299=1 とな る.
2.5.2
ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム と フ イ ボ ナ ツ チ 数
フ イ ボ ナ ツ チ 数(Fibonachi
number)と
F0=0,F1=1
と し,2 以 上 の 自 然 数iに
は,
対 して,
Fi=Fi-1+Fi-2
に よ っ て 与 え ら れ る 数 の こ と で あ る.つ
ま り,F0=0,F1=1,F2=1,
F3=2,F4=3,F5=5,F6=8,F7=13,F8=21,F9=34,F10=55, …
であ る.
自 然 数 N〓2が
与 え られ た と き,N
以 下 の 2 つ の 異 な る 自 然 数 m,n
大 公 約 数 を ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム で 求 め る と き,ユ リ ズ ム の 長 さlが
一 番 大 き く な る の は,余
ー ク リ ッ ドの ア ル ゴ
りが 0 と な ら な い 割 り算 に お い て 商
が い つ も 1 と な る と き で あ ろ う と 考 え ら れ る.も の と き,99と98の
の最
ち ろ ん,た
と え ば,N=100
最 大 公 約 数 を ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム で 求 め る と き,
99=1×98+1
98=98×1
と な る の だ か ら,商
が 1 で あ れ ば い つ も ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム の 長 さ〓
が 大 き い と い う わ け で な い. N 以 下 の フ イ ボ ナ ツ チ 数 で 最 大 の も の をFkと 約 数 を 求 め る と き,ユ
す る とFkとFk-1の
最大公
ー ク リ ッ ドの ア ル ゴ リ ズ ム の 長 さ〓 が 一 番 大 き く な る こ
と を 示 す こ と が で き る.FkとFk
-1の
最 大 公 約 数 を ユ ー ク リ ッ ドの ア ル ゴ リ
ズ ム で 求 め る と 次 の よ う に な る.
i=1の
とき
Fk=1×Fk-1+Fk-2
i=2の
とき
Fk-1=1×Fk-2+Fk-3
i
=k-2の
と き
F3=1×F2+F1
i
=k-1の
と き
F2=2×F1
=1×2+1
=2×1
よ っ て,FkとFk-1の
性 質2.6
(2.8)
最 大 公 約 数 は 1で あ る.
2 以 上 の 自 然 数 N に 対 して,N
以 下 の 自 然 数 m,n(m>n)の
最
大 公 約 数 を ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム で 求 め る の に,ユ
ー ク リ ッ ドの ア ル ゴ
リズ ム の 長 さ は,N
す る と,FkとFk-1
以 下 の 最 大 の フ イ ボ ナ ツ チ 数 をFkと
の 最 大 公 約 数 を 求 め る と き の ユ ー ク リ ッ ド の ア ル ゴ リ ズ ム の 長 さk-1に
等
しい.
証 明 N 以 下 の フ イ ボ ナ ツ チ 数 で 最 大 の も の をFkと
す る.FkとFk-1の
最
大 公 約 数 を ユ ー ク リ ッ ドの ア ル ゴ リズ ム で 求 め る と き の ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム の 長 さ〓 は,上
の 式(2.8)で
示 した よ う にk-1で
あ る.m>nと
し,
m とn の 最 大 公 約 数 を ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム で 求 め る と き の ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム の 長 さ〓 がk-1な
ら ば,m〓Fkで
あ る.実
の 最 大 公 約 数 を ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム で 求 め る と,m=r0,n=r1と して,
際,m
とn
i
=1の
と き
r0=q1r1+r2
i
=2の
と き
r1=q2r2+r3
i=k-2の
と き rk-3=qk−2rk-2+rk-1
i=k-1の
と き rk-2=qk-1rk-1
と な る が,式(2.8)と
最 後 の 式 か ら 比 べ て い っ て,
rk-1〓1=F1, qk-1〓2
だ か ら, rk-2=qk-1rk-1〓F2 ま たqk-2〓1で
あ る か ら,
rk-3〓qk-2rk-2+rk-1〓F2+F1=F3
同 じ よ う に して,い
つ もrk-j〓Fj(j=1,2,…,k)と
な る こ と が い え る.し
た が っ て,
m=r0〓Fk
で あ る. も し,N さ が,k
以 下 の 自 然 数 m,n(m>n)で
以 上 に な る も の が あ っ た ら,上
ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム の 長 の こ と か ら,
Fk+1〓m〓N と な り,Fkが
N 以 下 の 最 大 の フ イ ボ ナ ツ チ 数 で あ る こ と に 反 す る . よ っ て,
ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム の 長 さが k 以 上 に な る m は N 以 下 で は あ り え な い.
□
2.6.1
2.6
素 数
2以 上 の 自 然 数 が,1 数(prime
素 数 に つ い て の ア ル ゴ リズ ム
number)と
と 自 分 自 身 以 外 の 正 の 約 数 を も た な い と き,こ い う.素
れ を素
数 で な い 2 以 上 の 自 然 数 を 合 成 数(composite
number)と
い う.
2.6.2
エ ラ トス テ ネ ス の 飾(ふ
あ る 自 然 数N
る)い
が 与 え ら れ た と き,1 以 上 N 以 下 の 素 数 を す べ て 見 つ け る ア
ル ゴ リ ズ ム と し て エ ラ トス テ ネ ス の 節 い(sieve は,次
の よ う な 手 順 で,1
か ら N
ま で の 整 数i
of Eratosthenes)が
数 で な け れ ばPi=0を
対 応 さ せ る も の で あ る.
ア ル ゴ リ ズ ム2.10:エ
ラ トス テ ネ ス の 節 い
に,i が 素 数 な らPi=1,素
入 力 :3以 上 の 自 然 数 N 出 力:1
以 上 N 以 下 の 整 数i に,
Pi=
0
(iが 1また は合 成 数 の と き)
1
(iが 素 数 の と き)
と な るP1,…,PN ス テ ッ プ: (1) P1←0
{1 は 素 数 で は な い の でP1=0と
し て お く}
(2) i←2 (3) i〓Nの
間,次
を 繰 り返 す
Pi←1
i←i+1
{i〓2に
対 し てPiの
初 期 値 を す べ て 1 と し て お く}
(4) i←2 (5) i〓〓√N」
の 間,次
も しP2=1な
間,次 Pi*j←0 j←j+1
i←i+1
らば
j←2
i×j〓Nの
を 繰 り返 す
を 繰 り返 す
あ る.こ
れ
(6) P1,…PNを
例2.10
出力
N=20と
し て,上
の エ ラ トス テ ネ ス の 節 い の ア ル ゴ リ ズ ム を 実 行 し
て み よ う. ●P1=0と
す る.
●P2←1,…,P20←1 ●i←2 ●i=2の
と きP2=1だ
j=2か
ら10ま
か ら次 を行 う で 次 を行 う
Pi*j←0
i←i+1=3
こ れ に よ り,2 よ り大 き く20以 14,16,18,20に
P2は
1
●i=3の
ま り,4,6,8,10,12, なる
ま まで あ る と きP3=1だ
j=2か
下 の 2 の 倍 数,つ
対 し て,P4=0,P6=0,…,P20=0と
か ら次 を行 う
ら 6 まで 次 を行 う
Pi*j←0 i←i+1=4 こ れ に よ り,3 よ り大 き く20以
に 対 し て,P6=0,P9=0,…,P18=0と
P3は
下 の 3 の 倍 数,つ
ま り,6,9,12,15,18
なる
1の ま まで あ る
●i=4の
と きP4=0だ
か ら,何
も行 わ な い
●i=5の
と きi>〓√N」=〓√20」=4.47…
進 む ●P1,…,P20を こ れ に よ り,次
出力 の 表 を 得 る. 表2.4
20以 下 の 正 の 整 数 の 素
だ か ら,ス
テ ッ プ(6)へ
し た が っ て,20以
下 の 素 数 はPi=1と
な るi,す
なわ ち
2,3,5,7,11,13,17,19
と い う 結 果 を 得 る.
2.6.3
フ ェル マ ー の小 定 理
2 つ の 整 数a,b
が 整 数p
割 り切 れ る こ と で あ る.そ
を 法 と し て 合 同 で あ る と い う の は,a-bがp
で
の と き,
a≡b
mod
p
(2.9)
と 表 す.
例2.11p=3と
す る.5
と 2 は5-2=3で
あ り,こ
れ は 3 で 割 り切 れ る
か ら で あ る.1
5≡2 と-8は1-(-8)=9で
で あ る.3
あ り,こ 1≡-8
と 0 は3-0=3で
で あ る.1
mod3
と 2 は1-2=-1で
れ は 3 で 割 り切 れ る か ら
mod 3
あ り,こ
れ は 3 で 割 り切 れ る か ら
3≡0
mod
あ り,こ
1〓2
3
れ は 3 で 割 り切 れ な い か ら
mod 3
で あ る.
以 後,整
数 全 体 の 集 合 をZ,自
然 数 全 体 の 集 合 をNで
表 す こ と に す る.
次 の 性 質 は 定 義 か ら 自 然 に 導 く こ と が で き る.
性 質2.7 a,b,c∈Z,n∈N,n〓2と
す る と き,次
が 成 り立 つ.
1)a≡a
mod n
2)a≡b
mod
n
ならば
3)a≡b
mod
n
かつ
b≡a
mod
b≡c
n
mod n
4)a≡b
mod n
な ら ば a+c≡b+c
5)a≡b
mod n
な ら ば ac≡bc
な ら ば a≡
c
mod n
mod n mod n
次 の 定 理 は フ エ ル マ ー の 小 定 理 と よ ば れ て い る 有 名 な 定 理 で あ る.
定 理2.1
p∈Nを
素 数 と し,a∈Zと
す る と,
ap≡a
mod
が 成 り立 つ.さ
ら に,も
し,a
がpの
p
倍 数 で な い な ら ば,
ap−1≡1
mod
p
が 成 り立 つ.
証 明 は そ れ ほ ど難 し く な い が,こ n∈Nに
対 して,集
合{1,2,…,n-1}をXnで
nと互 い に 素 な も の の 集 合 をXxnで
ψ(6)=2,…
2.6.4
関 数 と い う.た
要 素 の 個 数 を 対 応 さ せ る 関 数 を ψ(n)で と え ば,ψ(2)=1,ψ(3)=2,ψ
で あ る.p∈Nが
F3
表 し,オ
イ ラー
(4)=2,ψ(5)=4,
素 数 な ら ψ(p)=p-1で
あ る.
フエルマー数 とカーマ イケル数 い う数 を フ ェ ル マ ー 数 と い い,こ
こで
表 す.F0=220+1=3,F1=221+1=5,F2=222+1=17,
=228+1=257,F4=224+1=65537で
で あ る.フ
要 素 の 中 で,
な わ ち,
は 互 い に 素}⊂Xn
0 以 上 の 整 数 n に 対 し て,22n+1と はFnで
表 し,Xnの
表 す こ と に す る.す
Xxn={a∈Xn|aとn
で あ る.n∈NにXxnの (Euler)の
こ で は 省 略 す る こ と に す る.
エ ル マ ー は,Fn=22n+1は
あ り,こ
れ らは ど れ も素 数
み な 素 数 だ ろ う と予 想 し た.し
か し,
F5
=225+1=4294967297=641×6700417で
あ り,こ
の 予 想 は 正 し くな
か っ た.
フ ェ ル マ ー の 小 定 理 は,p ap-1≡1
mod pで
て,an-1≡1 つ ま り,合
が 素 数 な ら ば,任
あ る と い っ て い る が,逆
mod nな
に,任
ら ば n は 素 数 だ ろ う か.実
成 数 n で 任 意 のa∈Xxnに
が 存 在 す る.こ
意 のa
∈Xxp 意 のa
は,こ
対 し て,an-1≡1
の よ う な 合 成 数 を カ ー マ イ ケ ル(Carmichel)数
に 対 し て, ∈ Xxpに
対 し
れ は 成 り立 た な い. mod nと
な る数
と い う. カ ー マ
イ ケ ル 数 は 次 の よ う に し て 特 徴 づ け ら れ る.
性 質2.8
正 の 整 数 n が カ ー マ イ ケ ル 数 で あ る た め の 必 要 十 分 条 件 は,n
意 の 素 因 数p (1)nはp2で
の任
に 対 し て, 割 り切 れ な い,
(2)n-1はp-1で
割 り切 れ る,
が 成 り立 つ こ と で あ る.
□
カ ー マ イ ケ ル 数 を小 さ い も の か ら い くつ か を あ げ る と, 561=3×11×17
1105=5×13×17
1729=7×13×19
2465=5×17×29
2821=7×13×31
6601=7×23×41
8911=7×19×67
で あ り,無
限 に 多 くの カ ー マ イ ケ ル 数 が 存 在 す る こ と も 最 近 証 明 さ れ て い る.
2.6.5
フ ェル マ ー の 素 数 判 定 テ ス ト
与 え られ た正 の整数
n が 素 数 で あ る か ど う か を 判 定 す る に は,n
2,3,4,…,[√n] で 割 っ て,ど
を順 に
れ か で 割 り切 れ る と き,n は 素 数 で は な く,そ
うで
ない とき素 数 で あ る,と す る素 朴 な方法 があ る.こ の 方 法で は,2,3,4,…,[√n] 司 の す べ て で 割 っ て み て は じめ て 素 数 か 素 数 で な い か が わ か る こ と もあ る の で, 最 悪 の 場 合,[√n] 回 の割 り算 を実 行 す る必 要 が あ る.こ こ で は,も
う少 し簡
単 に 素 数 で あ る か ど う か を 判 定 す る 方 法 を考 え る こ とに しよ う. 次 の ア ル ゴ リズ ム は フェ ル マ ー テ ス トと よば れ る素 数 判 定 の ア ル ゴ リ ズ ム で あ る.
ア ル ゴ リ ズ ム2.11:フェ 入 力:3
ルマー テス ト
以 上 の 整 数N
出 力:"合
成 数"ま
た は"素
数 か も し れ な い"
ス テ ッ プ: (1)a を{2,3,…,N-2}か (2)b←(aN-1をNで (3)も
ら全 くラ ン ダム に 選 ぶ 割 っ た 余 り)
しb≠1な
らば
"合 成 数"を
出力
そ うで な け れ ば "素 数 か も しれ な い"を
こ の ア ル ゴ リ ズ ム で,ま N
ず,N
と 互 い に 素 で な い の で,"合
aと N が 互 い に 素 と す る.も す る と,フェ
と 互 い に 素 で な いa が 選 ば れ た と き は, b も 成 数"を
し,こ
出 力 し,正
し い 答 を 得 る こ と が で き る.
の ア ル ゴ リ ズ ム が"合
ル マ ー の 小 定 理 に よ り,そ
マ イ ケ ル 数 の と き,こ が っ て,カ
出力
成 数"を
れ は 正 し い 答 で あ る.N
の ア ル ゴ リズ ム は,"素
数 か も し れ な い"を
出 力 した と
が 素 数 か カー 出 力 し,し
た
ー マ イ ケ ル 数 の と き は 正 しい 答 で な い こ と に な る.
次 の こ と が 証 明 で き る.
性 質2.9
フ ェ ル マ ー テ ス ト(ア ル ゴ リ ズ ム2.11)は,N
ル 数 の と き,"素
数 か も しれ な い"を
出 力 す る.フェ
が素 数か カーマ イケ ル マ ー テ ス ト(ア ル ゴ リ ズ
ム2.11)は,N
が カ ー マ イ ケ ル 数 で な い 合 成 数 の と き,少
で,"合
出 力 す る.
成 数"を
証 明 の概 略 前半 は上 で 説 明 した とお りで あ る.N
な く と も1/2の
確 率
が カ ーマ イケ ル数 で ない 合 成
数 とす る.a と N が 互 い に 素 で な け れ ばb と N も互 い に素 で な いの で,"合 成 数"を
出 力 す る,XxNの
数 は,{ψ(N)/2以
要 素 の 中 で,aN-1≡1
(mod N)と
下 で あ る こ と が 証 明 で き る.し
の 中 か ら,"合
成 数"を
返 す よ う なa
な る 要 素a の 個
た が っ て,a∈{2,…,N-2}
を 選 ぶ 確 率 が1/2以
上 で あ る こ とが 証 明
で き る.
□
実 は,次
の よ う に す る と,カ
ー マ イ ケ ル 数 の と き も,合
成 数 で あ る こ とが 判
定 で き る.
ア ル ゴ リ ズ ム2.12:フ 入 力:3
ェ ル マ ー テ ス トの 改 良 版
以上 の整数 N
出 力:"合
成 数",ま
た は"素
数 か も しれ な い",ま
たは N の約数
ス テ ッ プ: (1)a
を{2,3,…,N-2}か
ら全 く ラ ン ダ ム に 選 ぶ
(2)g←gcd(a,N) (3)も
しg>1な
gを
出力
(4)N-1=2km,
k,m∈N,
b0←(amを
(5)も
らば
しb0=1な
k〓1, mは
N で 割 っ た 余 り) らば
" 素 数 か も し れ な い"を
出力
(6)i←1 (7)i〓kの
間,次
bi←(b2i-1を
を行 う N で 割 った 余 り)
i←i+1 (8)も
しbk=1な
らば
奇 数,と
表 す と き,
j←min{i|0〓i<k,bi+1=1}
そ うで な け れ ば
"合 成 数"を
出力
(9)g←gcd(bj+1,N) (10)も
しg=1ま
た はg=Nな
らば
"素 数 か も し れ な い"を
出力
そ う で な け れ ば
g を出 力
こ の ア ル ゴ リ ズ ム に つ い て,次
性 質2.10
が 成 り立 つ.
ア ル ゴ リ ズ ム2.12は,N
力 す る.ア
ル ゴ リ ズ ム2.12は,N
な く と も1/2の
確 率 で,"合
カ ー マ イ ケ ル 数 の と き,少
が 素 数 の と き,"素
数 か も しれ な い"を
出
が カ ー マ イ ケ ル 数 で な い 合 成 数 の と き,少
成 数"を
出 力 す る.ア
な く と も1/2の
ル ゴ リ ズ ム2.12は,N
確 率 で,N
が
の 約 数 を 出 力 す る.
こ の ア ル ゴ リ ズ ム に つ い て は,参 考 文 献[1]な ど を参 照 され た い.
例2.12
N=561と
し て,ア
ル ゴ リ ズ ム2.12を
実 行 し て み よ う.561は
マ イ ケ ル 数 で あ り素 数 で は な い. ● ス テ ッ プ(1)で,a
と し て 7 が 選 ば れ た とす る.
● ス テ ッ プ(2)でgに
はgcd(7,561)=1が
● ス テ ッ プ(3)の
条 件 は 成 り立 た な い か ら,ス
●N-1=561-1=560=24×35だ b0←(735を561で ●b0≠1だ
か ら,ス
●i←1 ●ス テ ッ プ(7)で
b1←298
代 入 さ れ る. テ ッ プ(4)へ
か ら,k=4,m=35で
進む あ る,
割 っ た 余 り)=241 テ ッ プ(5)の
条 件 は 成 り立 た な い の で,次
へ 進 む
カー
b2←166
b3←67
b4←1
●ス テ ッ プ(8)でbk=1な
j←3
と して,次
へ 進む
● ス テ ッ プ(9)で
ので,
,
g←gcd(67+1,561)=17
とす る ●g=17≠1か
こ れ は,正
つg=17≠N=561な
の で ,g=17を
出力
し く 判 定 さ れ る 場 合 で あ る.
正 し く判 定 さ れ な い 場 合 も あ る. ● ス テ ッ プ(1)で,a
と し て103が
■ ス テ ッ プ(2)でgに ●ス テ ッ プ(3)の
はgcd(103
選 ば れ た とす る . ,561)=1が
●N-1=561-1=560=24×35だ b0←(10335を561で ●b0=1が 561に
対 し て,2〓a〓559な
テ ッ プ(4)へ
か ら ,k=4,m=35で
進 む あ る.
割 っ た 余 り)=1
成 り立 つ の で,"素
は,a=103,256,460,511の
代 入 され る.
条 件 は 成 り立 た な い か ら ,ス
数 か も しれ な い"を るa
で,"素
と き で あ る.
出力
数 か も しれ な い"を
出力 す る の
3 実 数 に つ い て
第 2章 で は,整 数 が コ ン ピ ュ ー タ で は どの よ う に表 され る か とい う こ と を説 明 した.実 数 も整 数 の と き と同 じ よ う に,2 進 数 で 表 され る の だ が,で
きる だ
け正 確 に表 す た め に,整 数 の場 合 と は異 な る表 現 を用 い る.こ の 章 で は,実 数 が どの よ う に表 さ れ,ど
の よ う な特 徴 が あ る の か,ま
た,コ
ン ピュ ー タ を用 い
て計 算 す る と き に どの よ う な こ とに 注 意 しな け れ ば な らな い の か を説 明 し よ う.
3.1
3.1.1
実 数 の 2進 表 現
実 数 の 2進 表 現
実 数 の 2 進 表 現 か ら 始 め よ う. た と え ば13.625と
数 は,
1×101+3×100+6×10-1+2×10-2+5×10-3
の こ と で あ る.同
い う10進
じ よ う に 考 え て,2
進 数(1101.101)2は
1×23+1×22+0×21+1×20+1×2-1+0×2-2+1×2-3
を 表 し て い る, 直 接 計 算 す れ ば,
1×23+1×22+0×21+1×20+1×2-1+0×2-2+1×2-3
=8+4+0+1+0.5+0+0.125
=13.625
で あ る か ら,(1101.101)2は10進
数 で は13.625で
あ る こ とが わ か る.
実 数 の 2進 表 現 の一 般 の 形 は
au×2u+au-1×2u-1+...+a1×21+a0×20
+b1×2-1+b22β-2+...+bl×2-l
で あ る.た
だ し,i=u,u-1,…,1,0,j=1,2,…l
ま た は 1 で,au≠0と
す る.こ
に 対 して,ai,bjは
の 表 現 で,絶
0
対 値 が 1 よ り小 さ い 2進 数 は,
±b1×2-1+b2×2-2+…+bl×2-l と表 さ れ る が,こ
の と き は,必
0.25=1/4=2-2=0.012で
ず し も,b1≠0と
と え ば,
あ る.
3.1.2
実 数 の 2進 表 現 へ の 変 換
ま ず,1
よ り小 さ い 正 の10進
小 さ い 正 の 数xの
な る 必 要 は な い.た
数 を 2 進 数 に 変 換 す る こ と を 考 え よ う.1
2進 表 現 が,(0.b1b2…bl)2
よ り
で あ る と す る と,
x=b1×2-1+b2×2-2+…+bl×2-l で あ る.こ
れ に 2 を 掛 け る と,
と な り,b1は
2x=b1+b2×2-1+…+bl×2-l+1 0 か 1 で,
b2×2-1+...+bl+1×2-l+1<1
だ か ら, 0 …2x<1 b1= 1
…2x>1
で あ る. 2x〓1の
と き は2x-1を
じ よ う に して,b2を
2倍 し,2x<1の
求 め る こ と が で き る.こ
と き は2xを
2 倍 す れ ば,同
の 操 作 を 繰 り返 し,2 倍 した 結 果
が ち ょ う ど 1 に な る ま で 繰 り返 せ ば,x た だ し,こ
の 2進 表 現 を 求 め る こ と が で き る.
の 操 作 が 必 ず 有 限 回 で 終 わ る と は 限 ら な い.そ
の と き は,そ
が 2進 数 と して 無 限 小 数 に な っ て い る こ と を 意 味 す る.
例3.1
た と え ば,10進
だ か ら,0.625に2を
表 現 で0.625の
2進 表 現 を 求 め て み よ う.0〓0.625<1
掛 け る こ と か ら始 め る.
0.625×2=1.25>1…b1=1
(1.25-1)×2=0.5<1…b2=0
0.5×2=1=1…b3=1
し た が っ て,
0.62510=0.1012
で あ る.
例 題3.1
10進
数0.09375の
2 進 表 現 を 求 め よ.
解 答 上 の 例 と 同 じ よ う に して,
0.09375×2=0.1875<1…b1=0
0.1875×2=0.375<1…b2=0
0.375×2=0.75<1…b3=0
0.75×2=1.5>1…b4=1
(1.5-1)×2=1=1…b5=1
と な る こ と か ら,
例 題3.2
0.0937510=0.00011
10進
数0.1の
2進 表 現 を 求 め よ,
解 答 上 と 同 じ よ う に し て,0.1の
2 進 表 現 を 求 め る と,
の数
0.1×2=0.2<1…b1=0 0.2×2=0.4<1…b2=0 0.4×2=0.8<1…b3=0 0.8×2=1.6>1…b4=1
(1.6-1)×2=1.2>1…b5=1
(1.2-1)×2=0.4<1…b6=0
と な り,こ
の 最 後 の 行 か ら は,0.2×2の
り返 す こ と に な る.し
行 か ら,(1.6-1)×2の
た が っ て,0.110の
0.0 0011
(b2の と こ ろ と 同 じ に な る) 行 まで を繰
0011
2進 表 現 は
0011
と い う 無 限 小 数 に な る.
1以 上 の 実 数 の 2 進 表 現 は,そ
の 数 の 整 数 部 分 と小 数 部 分 の 2進 表 現 を 別 々
に 求 め て,そ
れ ら を 足 せ ば よ い.
例3.2
数43.625は,整
10進
部 の0.625の
数 部 分 の43の
2 進 表 現 が0.101だ
2進 表 現 が101011で
あ り,仮
数
か ら,
43.62510=101011.1012
で あ る.
3.2.1
3.2
浮 動 小 数 点 数
浮 動小 数 点 数
計 算 機 で の 数 の 表 し 方 は,第 表 し 方 と,そ
れ と は 別 に,実
す る 浮 動 小 数 点 数(floating
1章 で 述 べ た 整 数 を 扱 う い わ ゆ る 整 数 型 と い う
数 型 と い う 表 し 方 が あ る.実 point
実 数 の β 進 表 現 の 一 般 の 形 は,
number)で
表 さ れ る.
数 型 は こ れ か ら説 明
±cu×
βu+cu-1×βu-1+...+c1×
+d1×
β1+c0×
β-1+d2×
β0
β-2+…+dl×
β-l
で あ る. β 進t 桁 の 浮 動 小 数 点 数 と は,
±(d1×
β-1+d2×β-2+…+dt-1×
=±(0
.d1d2…dt-ldt)β
下 の 整 数 で,p
ま た,あ
る 整 数L,U
囲 を 制 限 す る.± は 小 数 部 分,p
だ し,各i=1,…,t
以 上
は 整 数 で あ る. を 決 め て,L〓p〓Uと
を 符 号,0.dld2…dt-idtの
し てp
く の 場 合,2
の 取 り得 る 値 の 範
部 分 を 仮 数 部(mantissa)ま
た
い う.
進 浮 動 小 数 点 数 が 使 わ れ て い る.単
(single precision)と
よ ば れ る2 進 浮 動 小 数 点 数 は,1
と き,そ
の 最 初 の1
ビ ッ トを 符 号 を 表 す た め に,次
め に,残
りの23ビ
と,次
βp
に つ い て,diは0
を 指 数 ま た は 指 数 部(exponent)と
計 算 機 で は,多
β-t)×
× βp
と い う表 し方 の こ と で あ る.た β-1以
β-(t-1)+dt×
精度実数型
語 の 長 さ が32ビ
ッ トの
の8 ビ ッ ト を 指 数 を 表 す た
ッ ト を 仮 数 部 を 表 す た め に 使 う.ビ
ッ トパ タ ー ン を 図 示 す る
の よ う に な る.
浮 動 小 数 点 数 で は,整
数 と異 な り,符
号-絶 対 値 表 示 が 使 わ れ て い る.符
ビ ッ トパ タ ー ンの 符 号 に 格 納 さ れ て い る 数 が0 の と き+を,1 す.(-1)0=+1,(-1)-1=-1が
号 は
の と き-を
仮 数 部 に 掛 か る と考 え れ ば よ い.2
表
の補数
表 示 と は 異 な り,0 は2 つ の 表 現
00…00…0
10…00…0
を も つ.ビ 256個
ッ トパ タ ー ン の 指 数 部 は8 ビ ッ トで,0
の 数 を 表 現 す る こ とが で き る が,指
数 に127を
か ら28-1=255ま
での
加 え た も の を ビ ッ トパ タ ー
ン の 指 数 部 に 格 納 す る こ と で 負 の 指 数 も処 理 で き る よ う に し,
と な る.こ
L=-127,U=128 の よ う に指 数 部 に一 定 の 数 を加 え て 0以 上 の 整 数 で 表 現 す る こ と を
ゲ タ ば き 表 現 ま た は バ イ ア ス 表 現(biased 定 の 数 を バ イ ア ス(bias)と
い う.指
exponet)と
い う.指
数 部 に 加 え る一
数 と ビ ッ トパ タ ー ンの 指 数 部 に 格 納 さ れ る
数 の 対 応 は 次 の よ う に な る. 表3.1
指 数 と指 数 部 の 対 応
ビ ッ トパ タ ー ン の 仮 数 部 に は,dld2…d23が
格 納 さ れ る.
a. 正 規 化 仮 数 部 が 0で な い と き,最 ビ ッ トを 有 効 に 使 え て,精
上 位 ビ ッ トが 0 で な い ほ う が,仮 度 が 高 め ら れ る.た
と え ば,0.1は
限 小 数 に な り,そ
れ を 単 精 度 浮 動 小 数 点 数 と し て 書 く と,
+0.0
で あ る が,最
0011
上 位 ビ ッ ト,す
0011
0011
な わ ち,2-1の
0011
0011
数 部 の すべ て の 2進 表 現 で は 無
00×20
位 が 0 で な い よ う に 表 す と,
とな り,少 しで は あ るが,(*)の
部 分 だ け0.1に
よ り近 い値 とな る.
浮 動小 数 点 数 に対 して,指 数 部 を調 整 して,仮 数 部 の最 上 位 ビ ッ トが 0で な い よ う にす る こ と を正 規 化(normalization)す を正 規 表 現,正
る と い う.正 規 化 して 表 す こ と
規 化 され た 数 を正 規 化 数 とい う.
2進 浮 動 小 数 点 数 の場 合,最 上 位 ビ ッ トが 0で な い と う こ とは,1 に な る と い う こ とで あ る. 正 規 化 さ れ た 2進 浮 動 小 数 点 数 の 仮 数 部 をfと
す る と,
1/ 2〓f<1 で あ る. 正 規 化 さ れ な い で 表 さ れ て い る 数 を デ ノ ー マ ル(denormal)ま
たは非正規化
数 と い う.
b.
2進 浮 動 小 数 点 数 の 正 規 化
2 進 浮 動 小 数 点 数 を 正 規 化 す れ ば,そ
の 仮 数 部 をfと
す る とい つ も
0.1d2d3...dt
と い う よ う に 小 数 第 1位 は 1 に な る の だ か ら,仮
数 部 がt 桁 の と き,い
っその
こ と仮 数 部 は
1.d2d3…dtdt+1
と表 さ れ て い る と 考 え れ ば,も ば,0.7は
う 1桁 有 効 桁 数 を 増 や す こ と が で き る.た
2進 表 現 で は(0.1011001100110…)2と
とえ
い う 無 限 小 数 で あ り,単
精 度 浮 動 小 数 点 数 で は, で あ る が,こ
+0.10110011001100110011001×20 れ は,
+1.01100110011001100110011×2-1
と有 効 数 字 を 1桁 増 や し て 少 し だ け よ り真 の 値 に 近 く表 す こ と が で き る.0 正 規 化 さ れ て い な い 数 は 別 と し て,正
規 化 さ れ て い る 場 合 は,こ
や
の よ う に表
現 さ れ て い る と す る こ と を,け 1.d2d3…dt+1の
ち 表 現(economized
最 初 の 1 は,本
form)と
い う こ と が あ る.
来 の 仮 数 部 の ビ ッ トよ り さ ら に 最 上 位 に 見 え な
い ビ ッ トが も う 1 ビ ッ トあ る と考 え て い る わ け で,こ
れ を イ ン プ リ シ ッ トMSB
(implicit most significant digit)と
略 記 す る.こ
と 次 の よ う に な る.IMSBの
い い, IMSBと
れ を図 示 す る
1 ビ ッ トは 常 に 1で あ る.
以 後,2 進 浮 動 小 数 点 数 が 正 規 化 され て い る とい う と き は,IMSBを
含 めて上
の よ う に表 され て い る こ と とす る.
c. 指 数 部 に 関 す る注 意 2進 単 精 度 浮 動 小 数 点 数 が,IMSBも
考 え て,
と な っ て い る と き は, (-1)s×2e-127×1.f を 表 し て い る こ と に な り,指 ら255ま
で,2
進 表 現 で00000000か
実 際 に は,255(=111111112)の aNumber:非
数 部 に 格 納 さ れ て い る 数 e は,10進 ら11111111ま
ル を 表 す の に 用 い る. こ れ を 整 理 す る と 次 の よ う に な る. ●1〓e〓254の
と き,
(-1)s×2e-127×1.f
を 表 す. ●e=255か
つ,f=0の
で の 値 を と れ る わ け だ が,
と き は,Inf(Infinity:無
数)を 表 す の に 用 い,0(=000000002)の
と き,Infを
表 す.
表 現 で 0か
限 大)とNaN(Not と き は,0
とデ ノ ー マ
●e=255か
つ,f≠0の
●e=0か
つ,f≠0の
表す.
と き,
と き,NaNを
(-1)s×2-126×0.f を 表 す. ●e=0か
つ,f=〓0の
と き,0
を表 す 。
0 で の 割 り算 な ど を 行 っ た と き な ど に は,そ と な る の は,∞-∞
の 結 果 はInfと
表 示 さ れ る.NaN
や0/0と い う 計 算 を し た と き な ど で あ る .
d. オ ー バ ー フ ロ ー 正 規 化 さ れ て い る 2進 単 精 度 浮 動 小 数 点 数xで max normαl│x│と
と な る.〓
は お よ そ 等 し い と い う 意 味 で あ る.演
大 き く な る こ と を オ ー バー フ ロー(overflow)と と き,絶
絶対値 最大 の数の絶対値 を
表 す こ と に す る と,
算 の 結 果 ,絶 対 値 が こ れ よ り い う.ま
対 値 最 小 の 数 の 絶 対 値 をmin nortnal │x│で
た,正
規 化 され て い る
表 す と,
とな る. 正 規 化 しな け れ ば も っ と絶 対 値 の小 さ な数 を表 す こ とが で き る .
e. ア ン ダ ー フ ロ ー 演 算 の 結 果,絶
対 値 が 表 現 で き る 絶 対 値 最 小 の 数 よ り小 さ く な る こ と を ア ン
ダ ー フ ロ ー(underflow)と 値 最 小 の 数 と な る が,デ
い う.デ
ノ ー マ ル を 考 え な け れ ば,±2-126が
ノ ー マ ル を 考 え れ ば,絶
絶対
対 値 が もっ と小 さ い 数 を表 現
で き る. 2進 単 精 度 浮 動 小 数 点 数 をxと 対 値 をmin denormal│x│と
し,デ
ノ ー マ ル も含 め て絶 対 値 最 小 の 数 の 絶
す る と
と な る.
f. 倍 精 度 浮 動 小 数 点 数 単 精 度 よ り精 度 を高 め る ため に倍 精 度 浮 動 小 数 点 数 が あ る.倍 精 度 浮 動 小 数 点 数 は,1 語 の 長 さが32ビ を 表 す.IMSBを
と 表 さ れ る.IMSBは
の と き,1〓e〓2046の
ッ トの と き,2 語 を使 っ て,64ビ
含 め た表 現 で は,
常 に 1で あ る.単
精 度 と 同 じ よ う に,
整 数 で
(-1)s×2e-1023×1.f
ッ トで 1つ の実 数
と正 規 化 さ れ て い る と し,e=2047の と き 0 ま た は デ ノ ー マ ル,す
と き,Infま
た はNaNを
表 す.e=0の
な わ ち,
(-1)s×2-1022×0.f
を 表 し て い る こ と に す る.
例 題3.3
倍 精 度 浮 動 小 数 点 数xに
対 して,max
normal│x│,min
denormal│x│
を 求 め な さ い. 解 答 単 精 度 の と き と 全 く 同 じ よ う に 考 え て,
と な る.
3.2.2
丸
め
β 進t 桁 の 浮 動 小 数 点 数 は,t 桁 で 実 数 を 表 現 す る た め に,t+1桁 り捨 て た り,四
捨 五 入 を す る.こ
の よ う に す る こ と を,t+1桁
目 を,切 目 を丸 め る と
かt 桁 に 丸 め る と い う. 丸 め る 方 法 は,め
っ た に 使 わ な い 方 法 も含 め て 次 の よ う な も の が あ る.
●切 り 上 げ る
絶 対 値 の 大 き い 方 に 丸 め る.
10.2→11,10.7→11,-10.7→-11 ●切 り捨 て る
0 に 近 い 方 に 丸 め る. 10.2→10,10.7→10,-10.7→-10 ●大 き い 方 へ 丸 め る 。
10.2→11,-10.2→-10,-10.7→-10 ●小 さ い 方 へ 丸 め る.
10.2→10,-10.2→-11,-10.7→-11 ●ふ つ う の 四 捨 五 入
最 も 近 い 数 に 丸 め る.
最 も 近 い 数 が 2 つ あ る と き は 絶 対 値 の 大 き い 方 へ 丸 め る.
10.2→10,10.5→11,10.7→11,-11.5→-12 ●小 さ い 方 へ の 四 捨 五 入 最 も 近 い 数 に 丸 め る.
最 も 近 い 数 が 2 つ あ る と き は 絶 対 値 の 小 さ い 方 へ 丸 め る. 10.5→10,-11.5→-11 ●偶 数 へ の 四 捨 五 入
最 も 近 い 数 に 丸 め る.
最 も 近 い 数 が 2 つ あ る と き は,丸
め た あ と の,末
位 の 数 字 が 偶 数へ な る
め た あ と の,末
位 の 数 字 が 奇 数へ な る
よ う に 丸 め る.
10.5→10,11.5→12 ●奇 数 へ の 四 捨 五 入 最 も 近 い 数 に 丸 め る. 最 も 近 い 数 が 2 つ あ る と き は,丸 よ う に 丸 め る.
10.5→11,11.5→11
こ れ 以 外 に も あ る が,科
学 技 術 計 算 な ど で は,偶
数 へ の 四捨 五 入 が 標 準 的 で
あ る.
例3.3
2進 数 の 次 の よ う な 計 算 を 考 え よ う.た
だ し,2 進 表 現 で あ る こ と を 表
す 添 え 字 の 2 は 省 略 す る.
答 は1.0と
1.0+0.01-0.01+0.01-0.01 な る は ず で あ る.こ
れ を,左
か ら 順 に 足 し算 を し,そ
の 四 捨 五 入 を す る と,
(((1.0+0.01)-0.01)+0.01)-0.01
=((1.11-0.01)+0.01)-0.01 =((1.1-0.01)+0,01)-0.01
=(1.11+0.01)-0.01
=(1.1+0.01)-0.01
=10.0-0.01
=10-0.01
=10.0
=10
偶 数 へ の 四 捨 五 入 で 計 算 す る と,
(((1.0+0.01)-0.01)+0.01)-0.01
=((1.0-0.01)+0.01)-0.01
=((1.0-0.01)+0.01)-0.01
=(1.0+0.01)-0.01
=(1.0+0.01)-0.01 =1.0-0.01 =1.0-0.01
の つ どふ つ う
=〓
=1.0
とな る.
3.2.3
浮 動小数点 数の加減算
浮 動 小 数 点 数 の 加 減 算 が どの よ う に行 わ れ る か を 説 明 し よ う.簡 単 の た め, 丸 め は ふ つ う の 四 捨 五 入 で 行 う もの とす る.仮 数 部 がt 桁 の 浮 動 小 数 点 数 の 加 減 算 を行 う と き,2t桁
を使 っ て行 われ る とす る.2 つ の 正 規 化 され た β 進t 桁
の浮 動 小 数 点 数 を
a=(u1×
β-1+u2×
β-2+...+ut-1×
β-(t-1)+u×
β-t)×
β-1+v2×
β-2+...+vt-1×
β-(t-1)+v×
β-t)×βq
b=(v1×
とす る と き,±a±bは 下 で,復
次 の よ う に計 算 さ れ る.た
す る.以
号 は 同 順 で あ る.
1) 指 数 部 に つ い て,p-q>tの ±a±b=±
とき
α とす る
2) p−q〓tの
と き,次
を行 う
a) bを,指
b) 仮 数 部 の 加 減 算 を 実 行 す る
数 がpと
な る よ う に,仮
c) 仮 数 部 が1/β
d) 仮 数 部 が1 以 上 の と き は,仮 増 や し て,f)を
だ し,0〓b〓aと
βp
e) 仮 数 部 が1/β
数 部 を 右 へp-q桁
以 上1 未 満 の と き は,f)を
シ フ トす る
行 う
数 部 を 右 へ1 桁 シ フ ト し て,指
数 を1
行 う よ り小 さ い 場 合 は,仮
ま で 仮 数 部 を 左 ヘ シ フ ト し,シ
数 部 の 第1 桁 が0 で な く な る
フ トした 桁 数 分 だ け指 数 を減 ら し
,f)を 行 う
f) t+1桁 g)
目を 丸 め る
丸 め た こ と に よ り,仮
a) の よ う に,指
数 部 が1 以 上 に な る と き は,d)へ
戻 る
数 部 が 等 し く な る よ う に 桁 を ず ら す こ と を 桁 揃 え と い う.
例3.4
β=10,t=4,つ
た め に,ふ
ま り,10進
4桁 の 浮 動 小 数 点 数 で 考 え る.簡
つ う の 四 捨 五 入 で 丸 め る こ と に す る.
1)0.9876×102+0.1234×10-3は
次 の よ う に 計 算 さ れ る.
0.9876×102と0.1234×10-3の
0.9876×102+0.1234×10-3=0.9876×102と は,次
単の
の よ う にt+1桁
指 数 部 の 差 は2-(-3)>tだ
か ら
な る. な ぜ そ う な る か
目 を 丸 め る と き に0.1234×10-3は
す べ て切 り
捨 て ら れ る こ と に な る か ら で あ る.
2)0.9876×102+0.5432×10-2は
0.9876×102と0,5432×10-2の ら,桁
3)0.9876×102+0.1234×10-1は
指 数 部 の 差 は2-(-2)=4〓tだ
揃 え を し,0.00005432×102と
五 入 す る と い う 手 順 に な る.つ
次 の よ う に 計 算 さ れ る.
0.9876×102と0.1234×10-1の
し,足
し算 を 実 行 し,結
か 果 を四 捨
ま り,
次 の よ う に 計 算 さ れ る. 指 数 部 の 差 は2-(-1)=3〓tだ
か ら,0.1234×10-1を0.0001234×102と 結 果 を 四 捨 五 入 す る と い う 手 順 に な る.つ
桁 揃 え し,足 ま り,
し算 を 実 行 し,
4)0.9876×102+0.2345×101は
5)0.9753×10-1+0.2468×10-2は
6)0.1234×10-3-0.8642×10-4は
次 の よ う に 計 算 さ れ る.
次 の よ うに計 算 され る .
次 の よ う に 計 算 さ れ る.
3.2.4
い ろ い ろ な誤 差
た と え ば,10進
数0.1を
2 進 数 で 表 す と 無 限 小 数 に な り,計
桁 の 2進 数 に す る た め に あ る 桁 で 丸 め ら れ る た め,そ 0.110を
表 す こ と に は な ら な い.こ
き,e=x-xAをxAの る.ま
誤 差(error)と
た,eR=〓
をxAの
の丸 め られ た 数 は 正 確 に
の よ う な と き,0.110を
に 丸 め た 数 を そ の 真 数 の 近 似 値 と い う.真
数 をx,そ
真 数,そ
れ を有 限桁
の 近 似 値 をxAと
い う.xA-xを
相 対 誤 差(relative
算 機で は有 限
す る と
誤 差 とい う こ と もあ error)と
い う.相
対誤差 を
〓と す る こ と も あ る. │e│〓Eと ERを
な る と き,E
相 対 誤 差eRの
限界
を誤差
e の 限 界 と い い,│eR│〓ERと
あ る 桁 を 丸 め る こ と に よ り 生 じ る 誤 差 を 丸 め 誤 差(round 計 算 機 で 関 数f
のx
則 演 算 で 近 似 し て,そ
に お け る 値 を 計 算 す る と き は,そ の 近 似 式fAのxの
そ の 計 算 結 果fA(xA)が
な る と き,
と い う.
近 似 値xAに
丸 め ら れ(fA(xA))Aが
error)と
の 関 数 を有 限 回 の 四 お け る 値 が 計 算 さ れ,
得 ら れ る.こ
の と き,誤
f (x)-(fA(xA))A
=(f(x)-f(xA))+(f(xA)-fA(xA))+(fA(xA)-(fA(xA))A)
と 書 く こ と が で き る.こ ●f(x)-f(xA)を ●f(xA)-fA(xA)を ●fA(xA)-(fA(xA))Aを と い う.
の 式 の 右 辺 に つ い て,
代入 誤差 打 ち 切 り 誤 差,離
散 化 誤 差,公
生 成 誤 差 ま た は発 生 誤 差
い う.
式 誤差
差 は,
3.2.5
浮 動 小 数 点 数 と誤 差
一 般 に,t 桁 の β 進 浮 動 小 数 点 数 が 数 直 線 上 に ど の よ う に 分 布 し て い る か を 考 え よ う.計
算 機 で よ く使 わ れ る よ う に 1 語 の 長 さ を32ビ
雑 に な る の で,次
ッ ト と す る と,煩
の よ う な 簡 単 な 例 で 考 え て み よ う.
● 1語 は 6 ビ ッ ト ● 符 号 が 1 ビ ッ ト ●指 数 部 が 3 ビ ッ トで バ イ ア ス は310=112 ●仮 数 部 が 2 ビ ッ ト ●IMSBが
1ビ ッ ト
正 規 化 さ れ て い る と き は,
1.00×2p
で あ る.ビ て,次
(p=-2,-1,0,1,2,3)
ッ トパ タ ー ン を 表 に す る と 符 号 の 1 ビ ッ トをs=0ま
の よ う に な る.
表3.2
ビ ッ トパ ター ン
これ ら を数 直 線 上 に 表 す と次 の 図 の よ うに な る.
た は 1と し
こ の 図 か ら,一
様 に,つ
な い こ と が わ か る.指
ま り,い
た る と こ ろ 等 間 隔 に,分
数 部 をpと
す る と,間
布 して い る わ け で は
隔は
0.01×2p=2-2×2p
で あ る が,左
辺 の 最 初 の 項 の2-2の
数 が 3桁 で,そ
れ か ら1を
の で,も
数 部 がIMSBも
し,仮
指 数-2は,仮
引 い て,そ
れ に−(マ
含 め てt桁
数 部 のIMSBも
含 め た桁
イ ナ ス)を つ け た こ と に な る
な ら,間
隔 は
2-(t-1)×2p=21-t×2p
で あ る. した が っ て,ふ は,分
つ う の 四 捨 五 入 で は,1.f×2pに
布 し て い る 間 隔 の1/2で,こ
丸 め られ る数 の誤 差 の 限 界
の 例 で は,
2-3×2p
で あ り,仮
数 部 がIMSBも
含 め てt 桁 な ら
で あ る.相
2-t×2p
対 誤 差 が 最 大 に な る の は,1.00×2pへ
対 誤 差 の 限 界 は,こ
の 例 で は,
で あ り,仮 数 部 がIMSBも
で あ る.つ
ま り,相
含 め てt 桁 な ら
対 誤 差 の 限 界 は 指 数 部 に 関 係 な く,仮
の よ う な 丸 め 方 を す る か だ け に 依 存 す る.こ (machine
epsilon)と
丸 め ら れ る と き な の で,相
い う.
マ シ ン イ プ シ ロ ン に つ い て 次 が 成 り 立 つ.
数 部 の 桁 数t
と ど
の 誤 差 の限 界 をマ シ ンイ プ シ ロ ン
性 質3.1
ふ つ う の 四 捨 五 入 で 丸 め る と き,マ
め て(1+ε)Aと
す る と き,(1+ε)A>1を
シ ン イ プ シ ロ ン は,1+
ε を丸
満 た す 最 小 の 正 の 数 ε で あ る. □
こ の 例 の デ ノ ー マ ル の 場 合 を 考 え て お こ う.指
数 部 が000の
と き は,デ
ノー
マ ル で, ●0 000
0 00は+0を
●0 000
0 01は0.01×2-2を
表 す.
●0 000
0 10は0.10×2-2を
表 す.
●0 000
0 11は0.11×2-2を
表 す.
指 数 部 が111の
表 す.
と き は,Infま
た はNaNを
●0 111
00はInfを
●0 000
01はNaNを
表 す.
●0 000
10はNaNを
表す.
●0 000
11はNaNを
表 す.
3.2.6
表 す が,
表 す.
四則演算 の誤差限界
浮 動 小 数 点 数a,b
の 加 減 算a±bを
と 表 す と,│(a±b)-(a±b)A│の
計 算 し た と き に 得 ら れ る 値 を(a±b)A
限 界 は,ε
を マ シ ン イ プ シ ロ ン と す る と き,
次 で 与 え ら れ る.
│(a±b)-(a±b)A│〓max{│a│,│b│,│a±b│}×
ε
な ぜ な ら,t 桁 の 浮 動 小 数 点 数 と し てa, b が 表 さ れ て い る と す る と,も │a│>│b│ でa,b
の 指 数 の 差 がt よ り大 き け れ ば,指
加 減 算 の 手 順 か ら,a±bの あ り,し
た が っ て,そ
以 下 な ら ば,a±bを
数 の 小 さ い ほ う の 数 b は,
計 算 結 果 に 反 映 さ れ な い.こ
の と き の 誤 差 は,ε│a│以 計 算 し,こ
の と き,│b│<
下 で あ る.a,b
ε│a│で
の 指 数 の 差 がt
れ をt 桁 に 丸 め る と き に 誤 差 が 発 生 す る が,そ
れ は,ε│a±b│以
下 で あ る.
乗 除 算 で は,誤
差 は 結 果 を 丸 め る と き に 発 生 す る の で,誤
│(a×b)-(aA×bA)│〓│a×b│×
し,
ε
差 の限界 は
│(a÷b)-(aA÷bA)│〓│a÷b│×
ε
で 与 え ら れ る.
3.2.7
2次 方 程 式 の 解 の 公 式 と誤 差
2次 方 程 式
axe+bx+c=0
の 解 は,解
の 公 式 を 使 っ て,
で 求 め る こ と が で き る.実 て,た
数 が10進
7桁 の 浮 動 小 数 点 数 で 表 さ れ て い る と し
と え ば, 1.234567x2-876.5432x+0.3578642
と い う 2 次 方 程 式 の 2 つ の 解 を 解 の 公 式 で 求 め て み よ う.
b2-4ac=(-1×0.8765432×103)2
-(0.4000000×101)×(0.1234567×101)×(0.3578642×100)
=0.7683280×106-0.1767229×101
=0.7683280×106-0.000001767229×106
=0.7683262×106
だ か ら,
√ b2-4ac=√0.7683262×106
で あ り,
=0.8765422×103
=0
とな る.こ
.7100001×103
こ で,x2を
求 め る と き に,分 子 の 計 算
-b-√b2-4ac
で,0.0000010×103と
い う よ う に,有
の よ う に な る こ と を 桁 落 ち と い う.こ 対 で,絶
効 数 字 が2 桁 に 減 っ て し ま っ て い る.こ れ は,-bと-√b2-4acが,符
対 値 が ほ ぼ 等 し い こ と に よ っ て い る.こ
め に,x2を,解
と係 数 の 関 係 を 使 っ て,ま
の こ とが 起 こ る の を避 け る た
た は 解 の 公 式 で 分 子 を 有 理 化 し て,
と 変 形 す る と,
x2=
=(0.3578642×100)/(0.1234567×101)/(0.7100001×103)
=0.4082678×10-3
と な り,こ
れ は 真 の 解 に7 桁 と も 一 致 す る.
一 般 に,2
次方程式
ax2+bx+c=0
の 解 を コ ン ピ ュ ー タ な ど で 求 め る と き は,1
●b>0の
ときは
号が 反
つ の 解x1を
●b<0の
と して,も
と きは
う 1 つ の 解x2は,解
と係 数 の 関 係 を 使 っ て,
と す る.
3.2.8
累 和 を計 算 す る と きの 誤 差
0に0.01を10000回
加 え れ ば,100に
丸 め 誤 差 な ど が 累 積 し て,必 ロ グ ラ ム を 作 成 し,実 れ は,主
に,0.01が
な る は ず で あ る が,コ
ず し も そ う は な ら な い.次
の ア ル ゴ リズ ム3.1で
際 に 計 算 し て み る と ,結 果 は,100,0030な 2進 数 と し て は 無 限 小 数 で あ り,そ
き の 誤 差 が 積 も り積 も っ て,無
ン ピ ュー タで は プ
ど と な る.こ
れ を有 限 桁 に丸 め る と
視 で き な い 誤 差 と し て 現 れ る と考 え ら れ る.傍
証 と な る か ど う か わ か ら な い が,た
と え ば,0.01に
近 い2進
数 と して有 限小 数
の0.0117187510=0.000000112や0.00976562510=0.0000001012を10000 回 加 え れ ば,同
じ コ ン ピ ュ ー タ で,そ
れ ぞ れ,117.18750,97.656250と
な い 結 果 が 得 ら れ る.
ア ル ゴ リ ズ ム3.1:累
和 の 計 算(誤
入 力:x=0.01 出 力:xを10000個
足 した和
ス テ ッ プ: (1)i←1 (2)sum←0 (3)i〓1000の
間,次
sum←sum+0.01
i←i+1 (4)sumを
出力
を行 う
差 を 生 じ や す い)
誤差 の
4 方程式 の数値解法
方程式 f(x)=0 を解 く こ と を考 え る. た と え ば, ax2+bx+c=0 とい う 2次 の 代 数 方 程 式 が 与 え られ れ ば,解 の 公 式
で 解 くこ とが で き る.3 次 方 程 式,4 次 方程 式 も公 式 で解 くこ とが で きる が ,5 次 以 上 の代 数 方程 式 は,一 般 的 な公 式 は な い こ とは よ く知 ら れ て い る .こ の 章 で は,代 数 方 程 式 に限 らず,方 程 式 を コ ン ピュ ー タ を使 って 解 くア ル ゴ リズ ム で よ く知 られ て い る も の を説 明 す る.
4.1.1
4.1 解 析 学 の 初 歩 の 復 習
コー シ ー列 と完 備 な区 間
こ こで,こ
の 章 で 必 要 とな る 解 析 学 の 初 歩 的 な事 柄 を復 習 し よ う.
実 数 全 体 の 集合 をRで
表 す.
実 数 の 数 列{xj}が コー シ ー(Cauchy)列 で あ る と は,任 意 の ε>0に て,整 数n(ε)が 存 在 し,n,n'>n(ε)な らば, │xn−xn'│<
ε
対し
と な る こ と で あ る. R の 部 分 集 合Aが
完 備(complete)で
ま れ る 任 意 の コ ー シ ー 列 がAの
あ る と は,全
て の 要 素 がAに
要 素 に 収 束 す る こ と で あ る.区
含
間R=
(-∞,∞),(-∞,b]={x∈R│x
完 備 で あ る.
た と え ば,xn=1/n(n∈N)と 区 間(0,1]に
す る と,数
お い て,任
意 の 自 然 数n
limn→ ∞1/n=0=(0,1].し
列{xn}は
コ ー シ ー 列 で あ る.半
に対 し て,xn∈1で
た が っ て,半
開 区 間(0,1]
あ り,limn→
開
∞xn=
は 完 備 で は な い.同
じよ
う に して,(a,b)={x∈R│a<x
完備
で な い こ と が わ か る.
4.1.2
テ イ ラ ー展 開
も う 少 し,復
習 を 続 け よ う.
あ る 区 間 に お い て,f(x)は て,x0を
一 つ 定 め,xを
で あ る.こ
階 ま で 微 分 可 能 と す る と,そ
だ し,
ξ=a+θ(x-a) れ を テ イ ラ ー(Taylor)の
(0<
θ <1)
公 式 と い う.こ
を 剰 余 項 と い う. た と え ば,n=1の
の 区 間 にお い
そ の 区 間 の 任 意 の 点 と す る と き,
を 満 た す ξ が 存 在 す る.た
第n
と き を 考 え る と,
の公式 の右辺の最 後の項
を 満 た す ξ=x0+θ(x-x0),(0< x≠x0の
θ <1)が
存 在 す る と い う こ と だ か ら,
と き,
とな る ξ がx0とxの
間 に存 在 す る とい う こ とで あ り,こ れ は,平 均 値 の 定 理
で あ る. f(x)が
任 意 のn∈Nに
つ い てn 階微 分 可 能 で,区
間 内 の す べ て のxに
関
して,
で あ る と き,テ
イ ラ ー の 公 式 は,
と 無 限 級 数 の 形 に か け る.こ と か,x0=0の
れ をf(x)のx0=0を
周 り の テ イ ラ ー 展 開 と い う.
例4.1 f(x)=sinxのx0=0の
周 り の テ イ ラ ー 展 開 を 求 め て み よ う.
f'(x)=cosx f"(x)=-sinx f3(x)=-cosx f4(x)=sinx
f2n(x)=(-1)nsinx f2n+1(x)=(
だ か ら,
中 心 とす る テ イ ラ ー 級 数
-1)ncosx
f'(0)=1 f"(0)
=0
f3(0)=-1 f4(0)=0
f2n(0)=0 f 2n+1(0)
で あ る.し
=(-1)n
た が っ て,
と な る. 同 じ よ う に し て,
で あ る.
例4.2 f(x)=exと
す る と,f(n)(x)=ex,(n=1,2,…)だ
の 周 りで テ イ ラ ー 展 開 す る と,
で あ る.同
で あ る.
じ よ う に し て,
か ら,exを0
4.2
4.2.1
多 項 式 の計 算
素 朴 な方 法
多項式 f(x)=anxn+an-1xn-1+…+a1x+a0 のx=tに
お け る 値 を 次 の よ う に して 計 算 す る こ と が で き る,
ア ル ゴ リズ ム4.1:多 入 力:多
項 式 の 計 算(素
朴 な 方 法)
項 式f(x)=anxn+an-1xn-1+…+alx+a0の
次 数n,
係 数a0,al,…,an-1,an,
x
の 具 体 的 な 値t
出 力:f(x)のt
に お け る 値z=f(t)
ス テ ッ プ: (1)x1←t (2)i←2 (3)i〓nの
間,次
を 行 う {x2にt2,…,xnにtnを
蓄 え る}
間,次
を 行 う {x1にa1t,…,xnにantnを
蓄 え る}
間,次
を 行 う {a0+a1t,a0+alt+a2t2,…
を 順 に 求 め る}
xi←xi-1×t i←i+1 (4)i←1 (5)i〓nの xi←ai×xi
i←i+1
(6)z←a0 (7)i←1 (8)i〓nの
z←z+xi
i←i+1 (9)zを
出力
例4.3
f(x)=x3-7x2+14x-8のx=5に
お け る 値 を 求 め て み よ う.
●x1←5 ●i←2 ●i=2〓n=3な
の で,次
を行 う
x2←x1×t=5×5=25 i←i+1=2+1=3 ●i=3〓3な
の で,次
を行 う
の で,ス
テ ッ プ(4)へ
x3←x2×t=25×5=125 i←i+1=3+1=4 ●i=4>3な
進 む
●i←1 ●i=1〓n=3な
の で,次
を行 う
の で,次
を行 う
の で,次
を行 う
x1←a1×x1=14×5=70 i←i+1=1+1=2 ●i=2〓n=3な x2←a2×x2=-7×25=-175 i←i+1=2+1=3 ●i=3〓n=3な x3←a3×x3=1×125=125 i←i+1=3+1=4 ●i
=4>3な
の で,ス
テ ッ プ(6)へ
●z←a0+x1=-8+70=62 ●i ←2 ●i=2〓n=3な
の で,次
を行 う
の で,次
を行 う
z←z+x2=62+(-175)=-113 i←i+1=2+1=3 ●i
=3〓n=3な z←z+x3=-113+125=12
i←i+1=3+1=4
進 む
●i=4>3な
の で,ス
●z=12を
性 質4.1 う.ま
テ ッ プ(9)へ
進 む
出力
上 の ア ル ゴ リ ズ ム4.1で
た,変
数 は2n+5個
は,掛
使 う.た
け 算 を2n-1回,足
だ し,足
し算 をn
し算 にi+1は
回行
含 め ない もの と
す る.
証 明 掛 け 算 は,ス (5)で,i
テ ッ プ(3)で,i
が 1か らn
ま で のn
足 し算 は,各i+1を
が 2 か らn
回 行 う か ら,あ
除 く と す る と,ス
ま で のn-1回,ス
わ せ て2n-1回
テ ッ プ(8)でi
テ ップ で あ る.
が 1か らn
まで の
n回 行 う, 使 用 し て い る 変 数 は,a0,a1,…,anのn+1個,x1,…,xnのn に,i
とn
4.2.2
とt とz で あ る か ら,全
部 で,2n+5個
個,さ で あ る.
ら □
ホ ー ナ ーの 方 法
多項式 f(x)=anxn+ate,-1xn-1+...+alx-1-a0 のx=tに
(4.1)
お け る 値 を 次 の よ う に して 計 算 す る 方 法 を 組 立 除 法 ま た は ホ ー ナ ー
の 方 法(Honer's
rule)と
ま ず,f(x)をx-tで
い う. 割 っ て,
f(x)=(x-t)(bnxn-1+bn-1xn-2+…+b2x+b1)+b0 と な っ た と す る.式(4.1)と
(4.2)
式(4.2)のxkじ ん の 係 数 を 比 較 す る と,
(4.3) と な る. 式(4.2)でx=tと
す れ ば,明
ら か に,
f(t)=b0
(4.4)
で あ る か ら,漸 り,最
化 式(4.3)に
後 に 得 ら れ るb0が
よ りbn,…,b0を 求 め るf(t)の
順 に 計 算 す れ ば,式(4.4)に
よ
値 で あ る.
こ れ は,f(x)を
f(x)=(((…((anx+an−1)x+an-2)x+…)x+a2)x+a1)x+a0 と 変 形 し,x=tと
し て,ま
ずbn=anと
し,最
も 内 側 の か っ こ の 中 か ら順 に,
bn-1=bnt+an-1=ant+an-1
bn-2=bn-1t+an-2=(ant+an-1)t+an-2
を計 算 し て い る こ と に な る. ア ル ゴ リ ズ ム は 次 の よ う に な る.
ア ル ゴ リ ズ ム4.2:多 入 力:多
項 式 の 計 算(ホ
ー ナ ー の 方 法)
項 式f(x)=anxn+an-1xn-1+…+alx+a0の
次 数n,
係 数a0,a1,…,an-1,an,
xの
具 体 的 な 値t
出 力:f(x)のt
に お け る 値b0=f(t)
ス テ ッ プ: (1)bn←an (2)i←n-1 (3)i〓0の
間,次
を行 う
bi←t×bi+1+ai
i←i-1 (4)b0を
例4.4
出力
ホ ー ナ ー の 方 法 で,f(x)=x3-7x2+14x-8のx=5に
を 求 め て み よ う .n=3,a3=1,a2=-7,a1=14,a0=-8で
お け る値 あ る,
●bn←1{=a3} ●i←2{=n-1} ●i=2〓0な
b2←-2
i←1 ●i
{=tb3+a2=5×1+(-7)} {=i-1}
=1〓0な
b1←4
i←0
ので {=tb2+a1=5×(-2)+14} {=i-1}
●i=0〓0な
ので
b0←12
i←-1
ので {=tb1+a0=5×4+(-8)} {=i-1}
●i=-1〓0で ●b0=12を
性 質4.2
は な い の で,何
も せ ず 次 の ス テ ッ プ(4)へ
進む
出力
ホ ー ナ ー の 方 法 で は,掛
数 は2n+5個
使 う.た
だ し,足
け 算 をn
回,足
し算 をn
回 行 う.ま
し算 に は2←n-1とi←i-1の
た,変
代 入文 の
部 分 は 含 め な い も の と す る.
証 明 ス テ ッ プ(3)で,iがn-1か 算 を そ れ ぞ れ 1 回 ず つ 行 う の で,全 ま た,変
ら 0 ま で,各2 部 で,掛
け 算 をn
数 は,a0,…,an,b0,…,bn,n,t,iを
に 対 し て,掛 回,足
し 算 をn
回 行 う.
使 用 して い る の で,2n+5
個 使 用 す る こ と に な る.
□
ス テ ッ プ(3)で,bi←t×bi+1+aiを,
ai←t×ai+1+ai と し て,必
要 な 変 数 の 個 数 を,n+4に
4.2.3
ホ ー ナ ー の 方 法 に よ る微 分 係 数 の 計 算
多 項 式
け 算 と足 し
抑 え る こ と が で き る.
f(x)=anxn+an-1xn-1+…+a1x+a0 は,何
回 で も 微 分 可 能 で,m>nな
あ る か ら,f(x)をx=tの
で あ る.こ
る 自 然 数 m に 対 し て は,f(m)(x)=0で
周 り で テ イ ラ ー 展 開 す る と,
こ で,
(4.5) と お く と,前
項 か らb0=f(t)な
の で,
f(x)=f(t)+(x-t)f1(x,t) =b0+(x-t)f1(x,t)
で あ る.ホ
(4.6)
ー ナ ー の 方 法 で,
f(x)=(x-t)(bnxn-1+bn-1xn-2+…+b2x+b1)+b0
と し た が,こ
の 式(4.2)と
(4.2)
式(4.6)を
比 較 す る と,
(4.7)
f1(x,t)=bnxn-1+bn-1xn-2+…+b2x+b1
で あ る.し
た が っ て,式(4.5)と
式(4.7)で,x=tと
す る と,
f 1(t,t)=f'(t)=bntn-1+bn-1tn-2+…+b2t+b1 で あ る こ と が わ か る.よ
っ て,こ
こ で,ホ
ー ナ ー の 方 法 を 使 っ て,
c n=bn=an ck =tck+1+bk と す れ ば,c1=f'(t)が
計 算 で き る.ア
(k=n-1,n-2,…,1)
ル ゴ リ ズ ム は ア ル ゴ リ ズ ム4.2を
変 更 す れ ば よ い. 同 じ よ う に して,順
に ホ ー ナ ー の 方 法 で,f(k)(t),(k=0,1,2,…,n-1)を
計 算 す る こ と が で き る.
少 し
例4・5
f(x)=x3-7x2+14x-8と
る.例4.4で
す る と,f'(x)=3x2-14x+14で
求 め た,b3,b2,b1を
あ
使 っ て 上 の 方 法 でf'(5)を
求 め る と次 の よ
う に な る. ●c3=b3=1 ●c2=tb3+b2=5.1+(-2)=3 ●c1=tb2+b1=5.3+4=19 し た が っ て,f'(5)=19を
得 る.
4.3
ニ ュ ー トン 法
4.3.1 方 程 式 の 直 接 解 法 と間 接 解 法 方程式
f(x)=0
を解 くこ と を考 え る. た と えば, 1/x2-2=0 とい う方程 式 が 与 え られ れ ば,
1/x2=2 x2=1/2
x=±1/√2=0.707107… と解 く こ と が で
き る.こ
演 算)を 施 し て,xに
れ は,有
つ い て 解 い て い る.こ
め る 方 法 を 直 接(解)法(direct 与 え ら れ た 方 程 式 をxに 初 期 値x0に,あ を 求 め …,と
限 回 の 演 算(四 則 演 算 と 平 方 根 を 開 く と い う
method)と
い う.し
つ い て 解 い て解 を 求
か し,一
般 に は この よ うに
つ い て 解 く こ と は 困 難 な 場 合 が 多 い.そ
る 計 算 操 作 を 施 して,x1を い う よ う に,あ
り 出 す 方 法 が あ る.こ
の よ う に,xに
の"間
求 め,同
る 操 作 を 繰 り返 し て,解 接(解)法"を
こ で,適
じ操 作 をx1に
当 な
施 し てx2
に 収 束 す る 列{xν}を
反 復 法(iterative
method)と
作
い う.
反復 法 で は,い
ろい ろ な値 に 対 して,同
じ計 算 を 行 う こ とに な る の で,こ
は コ ン ピ ュ ー タの 得 意 とす る と こ ろで あ る.し に計 算 を繰 り返 す わ け に は い か な い の で,何
か し,解 に収 束 す る まで,無
ら か の 方 法 で,解
れ 限
に十 分 近 づ い た
と判 断 して,計 算 を停 止 し,そ の と き の値 を解 の 近 似 値 とす る こ とに な る.こ の よ う に して 解 の 近 似 値 を計 算 す る こ とを 数値 的 に解 く とい い,得 近 似 値 を近 似 解 とい う.こ れ に対 して,ほ
られ る解 の
ん と うの 解 を 真 の 解 とい う.
コ ン ピ ュ ー タで 反復 法 に よ り解 の 近 似 値 を 求 め る と き,解 に十 分 に近 づ い た とい う判 断 は,十 分 小 さ い ε>0を 与 えて,ふ つ う次 の どれ か 1つ の 条件 が 成 り立 つ こ と とす る 。 ●│xν+1-xν│<
ε
●│xν+1-xν│<
ε│xν│
●│f(ν)│< ε
た だ し,図4.1を │xν -α│<
図4.1
4.3.2
み れ ば わ か る よ う に,こ
れ ら の 条 件 が 全 て 満 た さ れ て も,
ε が 満 た さ れ る とは 限 ら な い .
解 に 近 づ い て い な い の に解 に近 づ い た とい う判 断 の 条 件 を 満 た す場 合
ニ ュ ー トン 法 の 定 義 と例
方程 式 f(x)=0
を 解 く 間 接 法 で,最
も よ く 知 ら れ て い る の が ニ ュ ー ト ン 法 で あ る.
ニ ュ ー トン 法 と は,反
復
(4.8) に よ り,反
復 列{xν}を
つ く り解 の 近 似 値 を 求 め る 方 法 の こ と で あ る.ニ
ト ン法 は ニ ュ ー トン−ラ フ ソ ン(Newton-Raphson)法
ア ル ゴ リ ズ ム4.3:ニ 入 力:方
程 式f(x)=0のf(x)と
そ の 導 関 数f'(x),
反 復 の 初 期 値t,
十 分 小 さ い 正 の 数 ε,
反復 す る最 大 回 数 M
と も よ ば れ る.
ュ ー トン 法 の ア ル ゴ リ ズ ム
出 力:解
が 求 ま つ た と き は,近
似 解 α と 反 復 回 数n,
解 が 求 ま ら な い と き は,"反
復 最 大 回 数 を超 え ま し た"と
い うコメ ン ト
ス テ ッ プ: (1)x0
ε か つν〓Mな
ら ば 次 を行 う
ν ←ν+1 ス テ ッ プ(3)へ │xν +1-xν│<
戻 る
ε な ら ば次 を行 う
α ←xν n←ν
α とn を 出力 し,ア ル ゴ リズ ム を終 了 す る ν>Mな
ュー
らば 次 を行 う
"反 復 最 大 回 数 を超 え ま した"を 返 し,ア ル ゴ リズ ム を終 了 す る
例4.6 f(x)を f(x)=x2-3 と す る と,方
程 式, f(x)=0
を 解 く と,±√3が
得 ら れ る.こ
れ を,ニ
ュ ー ト ン 法 で 解 く と は,f'(x)=2x
だ か ら,
と し て,反
復 列{xν}を
つ く る こ と に な る.
こ れ を 単 精 度 浮 動 小 数 点 数 で 実 際 に 計 算 し,ε=10-6と
と な る ま で 繰 り返 す と,初
期 値-3.0,2.0,4.0に
し,
つ い て そ れ ぞ れ 表4.1の
に な る.
表4.1 x2−3=0
つ ま り,近
似 解 と して,x0=-3.0の
x
を 得,x0=2.0,4.0の
x=-1.7320507
と き は,そ
と き は ,4 回 の 反 復 で, =-1.7320507
れ ぞ れ,3
回,5
回 の 反 復 で,
よ う
を 得 る.こ
例4.7
れ ら は,小
数 第 6桁 ま で 正 しい 値 で あ る.
方程式 x-cosx=0
を 解 こ う.
f(x)=x-cosx
と す る と,f'(x)=1+sinxだ
か ら,
xν +1=xν-xν-cosxν/1+sinxν
と して,反 復 列{xν}を
つ くる こ と に な る.
こ れ を単 精 度 浮 動 小 数 点 数 で 実 際 に計 算 し,ε=10-6と
し,
< ε=10-6
と な る ま で 繰 り返 す と,初
期 値-1.0,1.0,3.0に
つ い て そ れ ぞ れ 表4 .2の よ う
に な る. 表4.2 x-cosx=0
つ ま り,近
似 解 と し て,
x=0.7390851 を 得 る.こ
れ は,小
(単 位 は ラ ジ ア ン) 数 第 6桁 ま で 正 し い 値 で あ る.
例4.8
3.2.7項
で 考 え た 方 程 式
1.234567x2-876.5432x+0.3578642=0
を ニ ュ ー ト ン 法 で,初
期 値-5.0,100.0,400.0に
の よ う に な る 。 た だ し,浮
つ い て 解 く と,そ
動 小 数 点 数 は 倍 精 度 と し,ε=10-15と
れ ぞ れ 表4.3 し,
<10-15=ε
と な る ま で 繰 り 返 し た. 初 期 値 が-5,100.0の 710.000102032524に
と き は,0.0004082678478150に,400.0の 収 束 す る.
表4.3
1.234567x2-876.5432x+0.3578642=0
と き は,
4.3.3
ニ ュ ー トン 法 と グ ラ フ
f'(xν)は,y=f(x)の
点(xν,f(xν))に
の 賜+1は,y=f(x)の 標 に な る.し
た が っ て,ニ
y=f(x)の
お け る 接 線 とx軸
ュ ー ト ン 法 で 反 復 列{xν}の
グ ラ フ で 示 す と 図4.2の
図4.2
4.3.4
お け る 接 線 の 傾 き だ か ら,式(4.8)
点(xν,f(xν))に
賜
と の 交 点 のx座 とxν+1の
様子 を
よ う に な る.
ニ ュー トン法
ニ ュ ー トン法 とテ イ ラ ー展 開
f(x)をxν
の 周 りで デ ィ ラー 展 開 す る と,
f(x)=f(xν)+(x-xν)f'(xν)+1/2(x-xν)2f〃(xν)+… と な る.し
た が っ て,α
をf(x)=0の
1つ の 解 と し,
α-xν=h
と お く と,
0=f(α)=f(xν+h)=f(xν)+hf'(xν)+1(x-xν)2f〃(xν)+…
と な る.│α
−xν│=│h│が
え ば,│h│=1/10な
十 分 小 さ け れ ば,h2,h3,…
ら ば,│h2│=1/100,│h3│=1/1000,…
(4.9)
は よ り 小 さ く な る.た で あ る.よ
っ て,式(4.9)
と
h〓-
の 左 辺 の 第 2項 まで を と っ て 近 似 す れ ば,
0〓f(xν)+hf'(xν)
す な わ ち,f(xv)≠0な
らば
ゆ え に,
α=xν+h〓xν-〓 と な る.つ
ま り,ニ
ュ ー トン 法 は α の 近 似 値 賜xνの 誤 差h
最 初 の 2 項 か ら 求 め,近
4.3.5
を ,テ
イ ラ ー展 開 の
似 の 精 度 を 高 め て い る も の で あ る.
ニ ュ ー トン 法 以 外 の 反 復 法
ニ ュ ー トン 法 以 外 に も 次 の よ う な 反 復 法 が あ る . 反 復 xν
と し て,反
ν
+1=〓
=0,1,2,
復 列 を 作 る 方 法 を フ ォ ン ・ミ ー ゼ(von
Mieses)法
と い う.
反 復
xv
+1=xv-〓
と して,反 復 列 を作 る 方 法 を線 形 逆 補 間 法 とい う.
4.3.6 縮 小 写 像 と不 動 点 定 理 関 数g:R→Rに
対 して,
x=g(x) と な る 点x∈R,す
な わ ち,方
程 式x=g(x)の
解 を g の 不 動 点(fixed
point)
と い う. 関 数g:R→Rが は,あ
1 ⊂R上
る 定 数 γ で 次 の(1),(2)を
の 縮 小 写 像(contraction
mapping)で
満 た す もの が 存 在 す る こ とで あ る .
あ る と
(1)0<γ
<1
(2)任 意 のx,x'∈Iに
対 し て,
│g(x')-g(x)│〓 条 件(2)を
γ│x'-x│
リ プ シ ツ ツ の 条 件(Lipschitz
シ ツ ツ 定 数(Lipschitz
constant)ま
condition)と
い い,定
た は 縮 小 定 数(contraction
数'γ を リ プ constant)と
い う. 次 の 定 理 は 縮 小 写 像 の 原 理 と よ ば れ る.
定 理4.1(縮
小 写 像 の 原 理)
縮 小 写 像 と し,任 き,g
意 のx∈1に
関 数g:R→Rを
完 備 な 区 間1⊂R上
対 し てg(x)∈1が
成 り立 つ と す る,こ
は 1 内 に た だ 1 つ の 不 動 点 α を も ち,任
xν +1=g(xν)は
意 のx0∈Iに
>2)な
的 帰 納 法 に よ り,任 次 に,{xν}は
対 し てx1=g(x0)∈1で
ら ば,xν=g(xν-1)∈1で
意 のν >1に
ら始 ま る 反 復
あ る.同 あ る.し
対 し て,xν=g(xν-1)∈1で
コ ー シ ー 列 で あ る こ と を 示 す. gは
ツ 定 数 を γ と す る と,ν-2に
=γ│xν-xν-1│ =γ2│xν-1-xν-2│
=γν│x1-x0│ っ て,任
意 のν,μ(0〓ν<μ)に
│xμ-xν│〓│xμ-xμ-1│+│xμ-1-xμ-2│+…
+│xν+2-xν+1│+│xν+1-xν│
対 し て,
じよう
た が っ て,数
学
あ る.
縮 小 写 像 な の で,リ
対 し て,
│xν+1-xν│=│g(xν)-g(xν-1)│
が 成 り立 つ.よ
の と
α に 収 束 す る.
証 明 仮 定 か ら,任 に,xν-1∈I(ν
意 のx0∈1か
の
プ シツ
〓
(γμ-1+γ
μ-2+…+γν+1+γν)│x1-x0│ │x1 -x0│
ゆ え に,0<
γ<1で
備 だ か ら,{xν}の
あ る こ と か ら,数
極 限 α はI
列{xν}は
内 に あ る.す
コ ー シ ー 列 で あ る.Iは
完
な わ ち,
g は縮 小 写 像 だか ら連 続 写 像 で あ る こ とが わ か り,
で あ る.よ
っ て,
で あ る.す
な わ ち 反 復xv+1=g(xν)はg
も し,α'≠
の 不 動 点 に 収 束 す る.
α もg の 不 動 点 で あ る と す る と,
│α-α'│=│g(α)-g(α')│〓γ│α-α'│
と な る こ と に な る が,γ
x
=g(x)の
<1な
の で,│α-α'│<│α-α'│と
な り,矛
盾 で あ る.
1つ の 解 α を含 む 閉 区 間I ⊂Rを I=[α-d,α+d│={x∈R││x-α│〓d,d>0}
とす る と,g がI で 縮 小 写 像 な ら ばx∈1の
と き必 ず
│ g(x)-g(α)│〓γ│x-α│〓γd<d(0〓γ
と な り,g(x)∈
I が 成 り立 つ.よ
っ て,こ
<1)
の と き,縮
小 写 像 の 原 理 の仮 定 が 満
た さ れ る か ら 次 が 成 り立 つ.
系 α をx=g(x)の
1 つ の 解 と し,I=[α-d,α+d],(d>0)と
す る.g
が 縮 小 写 像 な ら ば,I
の 中 のx=g(x)の
解 は α の み で あ り,任
意 のx0∈I
か ら反 復 xν+1=g(xν)
(ν=0,1,…)
に よ り得 ら れ る 列{xν}は
4.3.7
解 α に 収 束 す る.
ニ ュ ー トン 法 の 収 束
f:R→RがCr級
で あ る と は,f(x)の
第r 階 導 関 数f(r)(x)が
存 在 し て,
そ れ が 連 続 で あ る こ と で あ る. f(x)=0を
含 む あ る 区 間Iで,f(x)はC2級
と お く と,α
がf(x)=0の
と は 同 値 で あ る.ま
で あ る.し
れ る の で,ニ
がg(x)=xの
あ る と し,
解で ある こと
た,
あ る こ と とg(x)はI
十 分 小 さ く と る と,I=[α-d,α+d]⊂I
対 し て,│g'(x)|
は,初
解 で あ る こ と と,α
た が っ て,g(α)=0で
ら,d>0を
で,f'(x)≠0で
<1と
で き る.ゆ
え に,縮
で連 続 で あ る こ とか で,任
意 のx∈Iに
小 写像 の原理の系 の条件 が満 た さ
ュ ー トン 法 の 反 復
期 値x0∈Iの
と き,g(x)=xの
1 つ の 解,す
な わ ち,f(x)=0の
1
つ の 解 α に 収 束 す る. さ ら に,テ
と な る ξ(α〓
イ ラ ー の 公 式 に よ り,
ξ〓xν
ま た はxν〓
ξ〓 α)が
存 在 し,f(α)=0で
あ るこ と
か ら,
を得 る.し
た が っ て,
で あ る.Iでf'(x)は
連 続 でf'(x)≠0だ
が 存 在 し,ま
た,f"(x)は
な る 定数
が 存 在 す る,ゆ
M
有 界 な 区 間Iで
か ら,0<
γ <│f'(x)│な
る定数 γ
連 続 で あ る こ と か ら,│f"(x)│〓M
え に,
(4.10) が 成 り立 つ.M/2rは 一 般 に,α
定 数 で あ る.
に収 束 す る数 列{xi}が
, あ る 定 数C
に対 して,
xν +1-α〓C(xν-α)p が 成 り立 つ と き,p次
収 束 す る とい う.式(4.10)は,ニ
ュ ー トン法 が 2次 収 束
す る こ とを示 してい る.つ ま り,ニ ュ ー トン法 は,解 に近 づ け ば近 づ くほ ど,収 束 も非 常 に速 くな る.
4.4.1
4.4
連 立 1次 方 程 式 の 数 値 解 法
連 立 1次 方 程 式 と行 列
n 個 の 式 か ら な るn 元 連 立 1次 方 程 式 al1x1+a12x2+…+a1nxn=bl a21x 1+a22x2+…+a2nxn=b2
(4.11)
は,行
列 を 使 っ て,
と 表 す こ と が で き る.こ
で あ り,A
こ で,
を 連 立 1次 方 程 式(4.11)の
連 立 1次 方 程 式(4.11)は,n次 限 り,た
だ 一 組 の 解 を もつ.こ
を も つ こ と と 定 義 す る.n次
係 数 行 列(coefiicient
正 方 行 列Aが こ で,n次
正 則 の と き,か
正 方 行 列Aが
正 方 行 列Aに
matrix)と
つそ の ときに
正 則 と はAが
つ い て,次
い う.
逆行列
の 条 件 が 互 い に 同値 で
あ る こ を 思 い 出 し て お こ う. ●Aが
正 則.
●detA≠0. ●連 立 1次 方 程 式Ax=0の ●任 意 のb∈Rnに ●Aの
解 は 自 明 解x=0だ
けであ る,
対 し て ,連 立 1次 方 程 式Ax=bは
階 数,rankA,がnで
あ る.す
た だ 一 組 の 解 を もつ.
な わ ち,Aの
各 列(各 行)は
,Rnの
ベ ク トル と し て 1次 独 立 で あ る.
4.4.2
ク ラ メル の 公 式 と計 算 量
連 立 1次 方 程 式 を 解 く方 法 と し て,ク て い る.det A≠0の
と き,連
立1次
ラ メ ル(Cramer)の
方 程 式(4.11)の
対 して,
で 与 え ら れ る と い う も の で あ る.た
と え ば,
公 式 は よ く知 ら れ
解 は ,i=1,2,…,nに
2x1+3x2+x3=4 4x1+x2-3x3=-2 -x1+2x2+2x3=2
の 解 は,
と して求 まる. この 方 法 で,こ の 3元 連 立 1次 方 程 式 を解 くの に,3 次 の 正 方 行 列 の 行 列 式 を行 列 式 の 定 義 通 り計 算 す る と,1 つ の 行 列 式 を求 め る の に,2×3!=12回 の 乗 算 と 5回 の 加 減 算 をす る の で,全 5×4=20回 n元
体 で,12×4+3=51回
の乗 除算 と
の 加 減算 をす る こ と に な る.
連 立 1次 方程 式 の 場 合 は,1 つ の 行 列 式 を 求 め る の に,行 列 式 の 定 義 通
り計 算 す る と(n-1)×n!回 (n+1)×(n-1)×n!+n回
の 乗 算 とn!-1回
の 加 減 算 を す る の で,全 体 で,
の 乗 除 算 と(n+1)×(n!-1)回
の加 減算 をす
る こ と に な る.こ れ で は,1 秒 間 に 1億 回 の 浮 動 小 数 点 数 の 乗 算 を で き る コ ン ピ ュ ー タ を使 っ た と して,n=15の
と き約210日
以 上,n=20の
と きは30
万 年 以 上 もか か る こ と に な り,と て も現 実 的 な解 法 とは い い難 い. そ こ で,も
っ と効 率 的 に行 列 式 の値 を求 め る方 法 や現 実 的 な 時 間 で解 け る数
値 解 法 が必 要 に な る.
4.4.3
行 列 が正 則 で あ る た め の 十 分 条 件
正 方 行 列 が 正 則 で あ る た め の実 用 的 な十 分 条 件 を あ げ て お こ う. n次 正 方行 列A=(aij)が
可 約(reducible)で
と な る 行 列 P が 存 在 す る こ と で あ る.こ び,列
あ る とは,
こ で,P
と列 を何 回 か 交 換 し て 得 ら れ る 行 列,す
は 単 位 行 列 の 行 と 行 ,お
な わ ち ,各
しい 要 素 が た だ 1つ あ り,他 の す べ て の 要 素 は0と B22は
正 方 行 列 で あ る.Aは
行,各
よ
列 に は 1に等
な る もの で あ り,B11,B12
可 約 で な い と き 既 約(irreducible)で
,
あ る とい う.
既 約 で あ る こ と は 次 の よ う に 言 い 換 え る こ と も で き る.
定 理4.2
n 次 正 方 行 列A=(aij)が
1,…,nに
つ い て,aij≠0で
既 約 で あ る 必 要 十 分 条 件 は,i≠j(i,j=
あ る か,ま
に 異 な り1〓i1,i2,…,ik〓nな
n次
1ai1i2…aikjを
る 整 数i1,i2,…,ikが
正 方 行 列A=(aij)が
て のi=1,…,nに
た は,aii
優 対 角(diagonally
満 たす互 い
存 在 す る こ と で あ る.
dominant)で
あ る と は,す
べ
つ い て,
が 成 り立 つ こ と で あ る. す べ て のi=1,…,nに
つ い て,
が 成 り立 つ と き.A は 狭 義 優 対 角(strictly A が 既 約 優 対 角(irreducibly か つ 優 対 角 で,さ
ら に,少
diagonaly
diagonaly
dominant)で
dominant)で
な く と も 1つ のi に つ い て
あ る と い う,
あ る と は,A
は既 約
が 成 り立 つ こ とで あ る.
定 理4.3 n次 正 方 行 列A
が 狭 義 優 対 角 ま た は既 約 優 対 角 な ら ば正 則 で あ る.
4.4.4
ガ ウスの消去法
連 立 1次 方 程 式 を解 く直 接 法 と して は最 も よ く知 られ て い る ガ ウ ス の 消 去 法 (Gaussian
elimination
n個 の式 か らな るn元
method)は,次
の よ うな ア ル ゴ リズ ム で あ る.
連立一次方程 式
a11x1+a12x2+…+almxn=bl a21x1+a22x2+…+a2nxn=b2
(4.12) anlx1+an2x2+...+annxn=bn
を 考 え る. まず,a11≠0と
仮 定 す る.そ
の を 各i(=2,…,n)式
し て,第
に 加 え る.こ
1式 にm(1)i=-ai1/a11を
れ に よ り,式(4.12)は
掛 けた も
次 の よ う に な る.
第 1 ス テ ッ プ の 式:
(4.13)
次 に, i(=3,…,n)行
a(1)22〓0 と 仮 定 し,第 に 加 え る.こ
第 2 ス テ ッ プ の 式:
2式 に
m(2)i=-ai2/a(1)22 を掛 け た もの を,各
れ に よ り,式(4.13)は
次 の よ う に な る,
こ れ を 繰 り返 し, 第n-2ス
テ ッ プ の 式:
と仮 定 し て,第n-1式
が得 られ るの で,〓 を掛 け た も の を 第n式 第n-1ス
に加 え る と,
テ ッ プ の 式:
この よ う に変 形 す れ ば,〓 て,xnが
に〓
定 ま る.こ
に し て,第n-2式
れ を,第n-1式 か らxn-2が
≠0な
らば,第n式
の 両 辺 を〓
に 代 入 し て,xn-1が 定 ま り,…,第
で割 っ
定 ま り,同
1式 か らx1が,順
じよ う
に 定 ま る.
こ の よ う に し て 連 立 1次 方 程 式 を 解 く方 法 を ガ ウ ス の 単 純 消 去 法 と い う.第 n -1ス
テ ッ プ ま で の 変 形 を 前 進(消 去)過 程(forward
process
, forward elimina-
tion),xn,xn-1,…,x1を backward
順 に 求 め る 手 順 を 後 退 代 入 過 程(backward
substitution)と
process,
い う.
式(4.12)は,
と お い て, Ax=b と表 す こ と が で き る.第
1 ス テ ッ プ の 方 程 式 を 行 列 の 等 式 で,
A(1)x=b(1)
と 表 す と,
で あ る が,A(1)はAか 各i(=2,…,n)行
ら,A
の 第 1行 にm(1)i=-ail/α11を
に 加 え て 得 ら れ る か ら,
とお くと, A(1)=M(1)A,b(1)=M(1)b
掛 けた ものを
で あ る.同
じ よ う に し て,第kス
テ ッ プ(k=1,2,…,n-1)の
A(k)x=b(k)
と す る と,m(k)i=-aik/a(k-1)kkと
(対 角 成 分 は す べ て
1,そ
方 程 式 を
し て,
れ 以 外 の 空 白 の 成 分 は す べ て 0)と
す れ ば,
A(k)=M(k)A(k-1),b=M(k)b(k-1)
が 成 り 立 つ.た
だ し,a(0)11=α11と
す る.a(k-1)kkを
ピ ボ ッ ト(pivot)と
い う.
し た が っ て,
A(n-1)=M(n-1)M(n-2)...M(1)A
b(n-1)=M(n-1)M(n-2)...M(1)b
で あ る. こ の 式 とdet(M(k))=1で
あ る こ と か ら,
det(A)=det(M(n-1))det(M(n-2))…det(M(1))det(A)
=det(M(n-1)M(n-2)…M(1)A)
=detA(n-1)
=a11a(1)22a(2)33…a(n-1)nn
と な る こ と も わ か る. こ の 方 法 で は,a(0)11=α11≠0,a(1)22≠0,a(2)33≠0,…,a(n-1)nn≠0を
し た が,も
し,あ
るkに
対 し て,第k-1ス
テ ッ プ で α(k-1)kk=0と
仮 定
な れ ば,
第kス
テ ップ に 進 む 前 にl=k+1,…,nの
して,第k行
と第l行
ば,必 ず この よ う なlが
中 か ら α(k-1)lk≠0な る もの を探
を 入 れ 替 え る とい う操 作 を行 う.A
が正則行列 であ れ
見 つ か る.
特 に,実 際 の計 算 で は,丸 め 誤差 な ど を少 な く し,計 算 結 果 の 精 度 を よ くす る た め に,a(k-1)kk≠0で p行
と第k行
あ つ て も,maxl=k
,…,n│a(k-1)lk│=│a(k-1)pk│と なる第
を 入 れ 替 え る よ う に す る の が 普 通 で あ る.こ
の よ う な行 の 交 換,
も と の 方程 式 で 考 え れ ば式 の順 番 の 入 れ 替 え,を 行 う方 法 を,行 交 換 を伴 うガ ウ スの 消 去 法 ま た は 部 分 ピ ボ ッ ト選 択 法 とい う. ま た,列 の 交 換 もす る方 法 もあ り,そ れ を完 全 ピボ ッ ト選 択 法 とい う.列 の 交 換 をす る と,未 知 数 の 順 番 が 変 わ る こ と に な る. あ る行 列 の 第i行
と第j行
を 入 れ 替 え る に は,単 位 行 列 の 第i行
を入 れ 替 え た行 列P(i,j)を,そ
定 理4.4 n次
と第j行
の行 列 に左 か ら掛 け れ ば よい.
正 方 行 列A=(aij)に
対 して,連 立 1次 方 程 式Ax=bを
ス の 消 去 法 で解 く と き,n3/3+O(n2)回
の乗 算 の とn3/3+O(n2)回
ガウ
の加算 が必
要 で あ る.
□
この こ とか ら,ク ラメ ル の公 式 の と きと 同 じよ う に,1 秒 間 に 1億 回 の 浮 動小 数 点 数 の乗 算 をで きる コ ンピュー タを使 っ た と して,ガ ウス の 消去 法 で はn=15 の と き約0.0000025秒,n=20の と きで も,0.06秒 また,ガ
と き0.00006秒
で 計 算 で きる.n=200の
で 計 算 で き る.
ウス の 前 進 消 去 の と きに,ピ ボ ッ トの 列 の ピボ ッ トよ り下 の 要 素 だ
け で な く上 の 要 素 も 0 と な る よ うに 変 形 す る,ガ
ウ スージ ヨル ダ ン法 も あ る が,
こ れ で は,必 要 な乗 算 の 回数 は,3n3/2+O(n2)で,ガ
ウス の 消 去 法 よ り増 え て
し ま うの で,こ
例4.9
の よ うに す る 必 要 も な い.
ク ラ メ ル の 公 式 で 解 い た次 の 連 立 1次 方 程 式 を行 交 換 を伴 う ガ ウス の
消 去 法 で解 い て み よ う.
2x1+3x2+x3=4 4x1+x2-3x3=-2 -x1+ 2x2+2x3=2
行列で表す と
と して
Ax=b
と 表 さ れ る.
と 書 い て,(Ab)を ま ず,第
次 に,
変 形 し て い く.
1行 と 第 2行 を 入 れ 替 え る,
と し て,(A(1)b(1))を
と な る.こ
れ で,前
求 め る.次
に,
進 仮 定 は 終 了 す る.
後 退 代 入 過 程 を行 う.第
3 行 か ら,
-x3=-3
x3=3 第 2 行 か ら,
第 1 行 か ら,
x1=2
4x1=-2-x2+3x3 =-2-(-l)+3×3=8
し た が っ て,x1=2,x2=-1,x3=3を ち な み に,Aか
得 る.
らA(2)を
得 る ま で に 行 の 交 換 を 1回 行 っ て い る の で,
と な る.
4.4.5 LU分
解
n 次 正 方 行 列Aを
なる下三角行列 L と 上三角行列 U の積
A=LU
に表 す こ と をAのLU分
解 とい う.
n 次 正 則 行 列 が いつ で もLU分
解 で きる とは 限 ら ない が,LU分
解 され れ ば,
Ax=(LU)x=L(Ux)=b
だ か ら. Ly=b Ux=y と い う 2 つ の 連 立 1次 方 程 式 を 解 け ば よ い こ と に な る.ま ス の 消 去 法 の 後 退 代 入 過 程 と 同 じ よ う に,た を 求 め,そ
れ を 用 い て,Ux=yを
に,xn,xn-1,・
・,x1の
ず,Ly=bを
だ し,y1,yn,…,の
ガ ウ 順 に,解y
ガ ウス の消 去 法 の 後 退 代 入 過 程 と同 じよ う
順 に 求 め れ ば よ い.
例4.10
次 の 行 列 はLU分
解 で き ない.
こ れ を示 す には,
とLU分 e,fが
n次
解 で き た と して,右
辺 の 行 列 の 積 を 計 算 し,等
式 を 満 た すa,b,c,d,
存 在 し な い こ と を 示 せ ば よ い.
正 方 行 列A=(αij)がLU分
k=1,2,…,nに
解 可 能 で あ る 必 要 十 分 条 件 は,す
べ ての
対 し て,
が 成 り 立 つ こ と で あ る こ と が 証 明 で き る. ま た,正
則 行 列 は 行 を 入 れ 替 え る とLU分
解 で き る行 列 に変 形 す る こ とが で
き る.
4.5.1
4.5
連 立 1次 方 程 式 の 解 法
:反 復 法
反復法
連 立 1次 方 程 式 Ax=b に お い て,Aを
成 分 が す べ て 実 数 で あ る n 次 正 方 行 列 と し, A は 正 則 で,
aii≠0 と す る.連
(4.14)
立 1次 方 程 式(4.14)の
(i=1,2,…,n) 真 の解 を
(4.15)
とす る.適 当 な 初 期 値
か ら 初 め て,あ
め て,真
る 計 算 式 か らx(1)を
の 解α
method)と
求 め,同
に 収 束 す る 列{x(v)}を
じ よ う に し て,x(2),x(3),...を
求
つ く る と い う 解 法 を 反 復 法(iterative
い う.
ニ ュ ー ト ン法 な ど の と き と 同 じ よ う に,十 のi(=1,2,…,n)に
分 小 さ い ε >0を
決 め て,す
べ て
の ま た は,x(v+1)を
解
対 して,
x(ν+1)i-x(ν)i│<ε ま た は,
│x(ν+1)i-x(ν)i│<ε│x(ν)i│ と な っ た ら,解
に 収 束 し た と し て,反
復 を 終 了 し,が
と す る. a. ヤ コ ビ 法 x(ν)1,,x(ν)2,…,x(ν)nが 求 ま つ て い る と き,次 の 式 か ら順 に,第 を,第 (Jacobi
2式 か らx(ν+1)2を,…,第 method)と
1式 か ら,x(ν+1)1
n 式 か らx(ν+1)nを 定 め る 方 法 を ヤ コ ビ 法
い う.
ν)2+an3x(ν)3+…+annx(ν+1)n
a21x(ν)1+a22x(ν+1)2+a23x(ν)3+…+a2nx(ν)n=b2 a11x(ν+1)1+a12x(ν)2+a13x(ν)3+…+a1nx(ν)n=b1
=bn
つ ま り,
で あ る. 行 列 D を
(4.16)
(対 角 成 分 以 外 は す べ て 0)と す る と,式(4.15)を で あ る.し
た が っ て,B=D-Aと
x(ν+1)
仮 定 して い る の で,detD≠0
す る と,
=D-1Bx(ν)+D-lb,v=0
,1,2,…
(4.17)
と い う 反 復 の 式 を 得 る. b. ガ ウ ス-ザ イ デ ル 法 x(ν)1 ,x(ν)2,…,x(ν)nが 求 ま つ て い る と き,次 を 定 め,ヤ
の 式 に よ り,第
1式 か ら,x(ν+1)1
コ ビ法 と は 異 な り,そ こ で 定 ま っ たx(ν+1)1)も使 っ て 第 2式 か らx(ν+1)2
を 定 め,…,す
で に 定 ま っ たx(ν+1)1,x(ν+1)2,…,x(ν+1)1を 使 っ て,第
らx(ν+1)n)を定 め る 方 法 を ガ ウ ス-ザ イ デ ル 法(Gauss-Seidel method)と
い う.
=b2
+an2x(ν+1)2+an3x(ν+1)3+…+annx(ν+1)n
つ ま り,各x(ν+1)iは
n 式か
=bn
で 与 え ら れ る. 行 列 D を 対 角 行 列(4.16)と
し,
(4.18) と す る と,A=D+L'+U'で
あ り,
(D+L')xν+1=-U'xν+1+b
を得 る が,式(4.15)か
らD+L'は
正 則 行 列 で,
x(ν+1)=(D+L')-1(−U')x(ν+1)+(D+L')−1b
(4.19)
とい う反 復 式 を得 る. c. SOR法 ガ ウス-ザ イ デ ル法 で 近 似
を つ く り,ω
を パ ラ メ ー タ ー と し て,
x(ν+1)i=x(ν)i+wω(x(ν+1)i-x(ν)i) (i=1,2,...,n) と す る 方 法 を 逐 次 過 大 緩 和 法(Successive SOR法
と い う.ω
Overrelaxation
を 緩 和 因 子 ま た は 緩 和 係 数 い う.式(4.20)は,
(4.20) method)ま
た は
と な る が,行
列D,L',U'を
れ,式(4.16),(4.18)と
ガ ウス ー ザ イ デ ル 法 の と き と 同 じ よ う に,そ
れぞ
す れ ば,
Dx(ν+1)+ωL'x(ν+1)=(1-ω)Dx(v)-ωU'x(v)+ωb
を 得,式(4.15)の
条 件 の 下 で,
x(ν+1)=Hωx(ν)+ω(D+ωL')-lb
(4.21)
とい う反復 の式 を得 る.た だ し,
Hω=(D+ωL')-1{(1-ω)D-ωU'}
で あ る.
4.5.2
連 立 1次方 程 式 の 反 復 解 法 の 収 束 定 理
前 項 で 連 立 1次 方 程 式
Ax=b
を解 く反復 法 を考 え た が,式(4.17),(4.19),(4.21)の
よ う に,そ れ らの ど れ
も同 値 な連 立 方 程 式 x=Hx+d に対 す る反 復 x(ν+1)=Hx(ν)+ と し て 表 す こ と が で き た.実 で は な い.こ
d,ν=0,1,… 際 に 計 算 す る と き は,式(4
.22)の
反 復 を使 うわ け
の あ との こ れ ら の 反 復 法 の 収 束 を 考 え る と き ,こ
の 形 を 使 う と便
利 で あ る. 行 列Aの
固 有 値 を λ1,λ2,…
をAの
(4.22)
λnと す る と き,
max{│λi│} ス ペ ク トル 半 径(spectral
radius)と
い い ρ(A)で
表 す.
例4.11
と す る と,Aの
固 有 値 は,特
性 方程式 det(λI一A)=0
か ら,
で あ り,Aの
固 有 値 は,2,3
で あ る.し
た が っ て,
p(A)=3 で あ る.
次 が 成 り立 つ.
定 理4.5
1imν→ ∞Hν=O
と で あ る.こ
と な る た め の 必 要 十 分 条 件 は ρ(H) <1と
こ で O は 零 行 列 で あ る,
こ れ を 使 う と,式(4.22)の
(線 形 反 復 の 基 礎 定 理)
列 と し,方
程 式 」x=Hx+dは
任 意 のx(o)に
□
収 束 に 関 す る 基 本 的 な 定 理 が 得 ら れ る.
定 理4.6
(4.22)が
Hを
成 分 が す べ て 実 数 で あ るn次
た だ 一 組 の 解 α を も つ と す る.こ
式(4.22)か
正方行
の と き,反 復
対 し て α に 収 束 す る た め の 必 要 十 分 条 件 は ρ(H)<1
と な る こ と で あ る.
証明
なる こ
ら α=Hα+dを
引 く と,
x(ν+1)α=H(x(ν)-α)=H2(x(ν-1)-α)=…=Hν+1(x(0)-α)
し た が っ て,任
意 のx(0)に
要 十 分 条 件 は,limν
対 し て,limν
→∞Hν=O
条 件 は,ρ(H)<1と
→ ∞(x(ν)-α)=0と
で あ る.定
理4.5に
な る た め の必
よ りこの た め の必 要 十 分
な る こ と で あ る.
次 が 成 り立 つ.
定 理4.7
す べ て の 成 分 が 実 数 のn次
対 角 と す る と,任 Ax
=bの
SOR法
意 のb∈Rnに
正 方 行 列Aが
対 し て,ヤ
狭義優対 角 または既約優
コ ビ法 お よ び ガ ウ ス-ザ イ デ ル 法 は
一 意 に 存 在 す る 解 に 収 束 す る.
に 関 して は,次
定 理4.8
の こ とが 知 ら れ て い る.
(カ ー ン(Kahan)の
定 理)
SOR法
に お い て,任
意 の 実 数 ω ≠0
に 対 し て, ρ(Hω)〓| ω-1| し た が っ て,SOR法
証 明 SOR法
が 収 束 す る た め に は,0<
ω <2で
の 反 復x(ν+1)=Hωx(ν)+ω(D+ωL')-lbに
Hω=(D+ωL')-1{(1-ω)D-ωU'} だ か ら,Hω
の 固 有 値 を λ1,λ2,…,λnと
λ1λ2…
す る と,
λn=det(Hω)
=det((D+ωL')-1)det((1-ω)D-ωU')
=(1-ω)n
し た が っ て,
ρ(Hω)〓│λ1λ2…
λn│1/n=│1-ω│
あ る こ とが 必 要 で あ る.
お い て,
を 得 る.反 0<
復 列 が 収 束 す る た め に は,ρ(Hω)<1で
ω <2で
な け れ ば な ら な い.
さ ら に,SOR法
定 理4.9
に つ い て,次
□
が 成 り立 つ.
(オ ス トロ フ ス キ ー― ラ イ ヒ(Ostr0wski-Reich)の
成 分 が 実 数 のn次 Ax=bを
あ る こ と が 必 要 だ か ら,
正 方 行 列Aを
解 くSOR法
し て 解A-lbに
正 値 対 称 行 列 と し,0<
の 反 復(4,21)は,任
収 束 す る.
意 のb∈Rnと
定 理) ω <2と
す べ ての す る と,
任 意 のx(0)に
対
5 ソ ー
ト と サ ー チ の ア ル ゴ リ ズ
い ま ま で 扱 っ て き た ア ル ゴ リ ズ ム は,整 る も の で あ っ た.そ
前 の デ ー タ を50音
文 字 列 を探 し出 す と い っ た,い
順 に 並 べ 替 え る とか,文
章 の 中 か らあ る
ソ ー トの ア ル ゴ リ ズ ム
ソー ト
名 前 を50音
順 に,試
験 の 結 果 を 点 が 高 い 順 に な ど,デ
う こ と は よ くあ る こ と で あ る.並 う,名
値 的 ア ル ゴ リ ズ ム と い わ れ る.
わ ゆ る 非 数 値 的 ア ル ゴ リ ズ ム の 初 歩 を 扱 お う.
5.1
5.1.1
数 や 実 数 の計 算 や 方 程 式 の解 法 に 関す
の よ う な ア ル ゴ リ ズ ム は,数
こ の 章 で は,名
ム
ー タ を並 べ 替 え る と い
べ 替 え る こ と を ソ ー ト(sort)ま
た は 整 列 とい
前 と 試 験 の 点 と い う 2 つ の 項 目 か ら な る い くつ か の デ ー タ を,試
の 高 い 順 に ソ ー ト し,同
じ点 の 人 た ち は,名
よ う な こ と が 考 え ら れ る.ソ
験 の点
前 の 五 十 音 順 で ソ ー トす る と い う
ー トす る の に 注 目 す る 項 目 を ソ ー トの キ ー(key)
と い う. こ こ で は,デ
ー タ を ソ ー トす る ア ル ゴ リ ズ ム を い く つ か 紹 介 し,そ
の性 能 を
調 べ る. ア ル ゴ リ ズ ム を 記 述 す る と き は,簡 る もの で,小
5.1.2
ー タ は 1つ の 項 目 か ら な
さ い 川頁に ソ ー トす る こ と を 考 え る.
単純 選択 ソー ト
最 初 は,最 selection
単 の た め に,デ
も 簡 単 な ソ ー ト の ア ル ゴ リ ズ ム で あ る 単 純 選 択 ソ ー ト(straight
sort)を
紹 介 し よ う.
単 純 選 択 ソ ー トの 手 順 は 次 の よ う で あ る.
ア ル ゴ リ ズ ム5.1:単
純選択 ソー ト
入 力:デ
ー タ の 個 数1>と
デ ー タa1,a2,…,aN
出 力:小
さ い 順 に 並 ん で い るa1,a2,…,aN
ス ア ツ フ: (1)i←1 (2)i〓N-1の
間,次
を行 う
min←i
j←i+1
j〓Nの
間,次
を行 う
も しaj<aminな
らば 次 を行 う
min←j j←j+1 t←amin amin←ai ai←t i←i+1
(3)a1,a2,…,aNを
出力
例5.1
い う6文
"SAKURA"と
字 を 単 純 選 択 ソ ー トで ア ル フ ァベ ッ ト順 に ソ ー
ト して み よ う.入 力 は,N=6とa1=S,a2=A,a3=K a6=Aで
,a4=U,a5=R,
あ る.
●i←1 ●i
=1〓N-1=5な
の で ,次
を行 う
min←i=1
j←i+1=2
j=2〓N=6な
の で,次
aj=a2=A<amin=a1=Sな
を行 う の で,次
を行 う
min←j=2
j←j+1=3
j=3〓N=6な
の で,次
を行 う
aj=a3=K<amin=a2=Aは
成 り立 た な い
j←j+1=4
j=4〓N=6な
の で,次
を行 う
aj=a4=U<amin=a2=Aが
成 り立 た な い
j←j+1=5
j=5〓N=6な
の で,次
を行 う
aj=a5=R<amin=a2=Aが
成 り立 た な い
j←j+1=6 j=6〓N=6な
の で,次
を行 う
aj=a6=A<amin=a2=Aが
成 り立 た な い
j←j+1=7 j=7〓N=6は
成 り立 た な い
t←amin=a2=A amin=a2←ai=al=S a2=a1←t=A こ こ ま で で,最
初 に 見 つ か っ た 最 小 の も の A と 1番 右 側 のSと
を 入 れ 替 え て,
"ASKURA"
と,最
小 の も の がalへ
移 動 す る.
こ の あ と は,a2,…,a6に ●i=2の
じ よ う な こ とが 行 わ れ る の で,
5文 字 の 中 で 最 小 の A と S が 入 れ 替 わ っ て,
"AKURS" と な る か ら,全
つ い て,同
と き,"SKURA"の
体 と し て,
"AAKURS" とな る ●i=3の
と き,"KURS"の
果 と して,何
4 文 字 の 中 で 最 小 の K と K が 入 れ 替 わ っ て(結
も 変 化 し な い),"KURS"と
な る か ら,全
体 と し て,
"AAKURS" とな る
●i=4の
と き,"URS"の
な る か ら,全
"RUS"と
とな る と き,"US"の
と な る か ら,全
体 と し て,
"AAKRUS"
●i=5の
3 文 字 の 中 で 最 小 の R と U が 入 れ 替 わ っ て,
2文 字 の 中 で 最 小 の S と U が 入 れ 替 わ っ て,"SU"
体 と し て,
"AAKRSU" とな る ●i=6の
と き,i〓N-1=5が
al=A,a2=A,a3=K,as=R,a5=S,a6=U
を 出力 す る
比 較aj
回 数,交
成 り 立 た な い の で,ス
テ ッ プ(3)へ
換t←amin,αmin←amin,ai←tの
進 み,
回数 に
つ い て 次 の こ と が 成 り立 つ.
性 質5.1
単 純 選 択 ソ ー トで は,い
タ の 交 換 回 数 は,い
証 明 各iに る の で,N-i回
つ で も3(N-1)回
つ い て,比
つ で もN(N2−1)回 で あ る.領
の 比 較 が 行 わ れ る.デ 域 計 算 量 は,O(N)で
較 は,j=i+1,i+2,…,1Vの
行 わ れ る.し
た が っ て,全
あ る.
と き 1回 ず つ 行 わ れ 体 で,比
較 回 数 は,
で あ る. 交 換 は,各iに
で あ る,
つ い て 必 ず,ス
ー
テ ッ プ(2)の
3 回 の 交 換 が 行 わ れ る か ら,
領 域 計 算 量 は,a1,…,aNのN個 で あ り,こ
と,N,i,j,min,tの
5.1.3
れ は,O(N)と
5個 だ か ら,N+5
表 す こ と が で き る.
□
単純挿 入 ソー ト
次 は 単 純 挿 入 ソ ー ト(straight
ア ル ゴ リ ズ ム5.2:単
insertion
sort)で
あ る.
純 挿入 ソー ト
入 力:デ
ー タ の 個 数Nと
デ ー タa1,a2,…,aN
出 力:小
さ い 順 に 並 ん で い るa1,a2,…,aN
ス テ ッ プ: (1)a0←(a1,a2,…,aNの
中 の ど れ よ り も 大 き く な い も の)
(2)i←2 (3)i〓Nの
間,次
t←ai
j←i
aj-1>tの
を行 う
間,次
を行 う
aj←aj-1
j←j-1
aj←t
i←i+1
(4)a1,a2,…,aNを
ス テ ッ プ(1)は,左
出力
端 に 最 小 の デ ー タ が な い と"α あ1>tの
間"と
い う条 件
が い つ も 成 り立 っ て ア ル ゴ リ ズ ム が 止 ま ら な く な る な ど と い う よ う に,う 動 作 し な い こ と が あ る の で,そ 兵 キ ー(sentinel
例5.2
key)と
れ を番
い う.
番 兵 キ ー を お か ず に,つ
ル ゴ リ ズ ム に よ り"LAN"と
れ を 防 ぐ た め の 便 宜 的 な も の で あ る.こ
ま く
ま り,ス
テ ッ プ(1)を
実 行 し な い で,こ
のア
い う 3 文 字 を ア ル フ ァ ベ ッ ト順 に ソ ー ト して み よ
う.入
力 は,N=3とa1=L,a2=A,a3=Nで
あ る.
●i←2 ●i
=2〓N=3な
t←ai=a2=A
j←2=2
の で ,次
を行 う
aj-1=a1=L>t=Aな
の で,次
を行 う
aj=a2←aj-1=a1=L
j←j-1=1
こ の あ と,ス
テ ッ プ(3)の
aj-1=a0>t=Aが
成 り立 つ か ど う か を 調 べ る
こ と に な る の だ が,実 a0が
4 行 目 に 戻 っ て,
際 に プ ロ グ ラ ム を つ く っ て,コ
ン ピュ ー タで実 行 す る と ,
ど ん な 値 に な っ て い る か わ か ら な か っ た り,a0が
り して,無
限 に 操 作 を続 け て し ま う と か,こ
定 義 され て い な か っ た
れ 以 上 進 め られ な い と い うエ ラ ー
に な る. そ こ で,ス
テ ッ プ(1)を
行 っ てa0を
aj-1=a0=A>t=Aが
A と して お け ば,
成 り立 た な い
の で,
a j←t i←i+1 へ 進 み ,う
ま く動 作 す る こ と に な る.
う ま く動 作 し な い の を 回 避 す る 方 法 は ほ か に も 考 え ら れ る が,こ
の よ うに 番
兵 キ ー を お く の が 単 純 で わ か り や す い.
単 純 挿 入 法 で は,ス ai-1と
テ ップ(3)が
な っ て い る と き に,aiをtに
に 比 較 し て,aiが
本 質 的 で,こ
こ で は,a0〓a1〓a2〓
代 入 し て お い て,tをai-1,ai-2,…
入 る べ き と こ ろ に 入 れ て,a0〓a1〓a2〓
と な る よ う に し て い る.
…〓a2-1〓ai
…〓 と順
例5.3
"SAKURA"と
い う 6文 字 を単 純 挿 入 ソ ー トで ア ル フ ァベ ッ ト順 に ソ ー
ト し て み よ う.入 力 は,N=6とa1=S,a2=A,a3=K,a4=U,a5=R, a6=Aで
あ る.
●a0←A
{番 兵 キ ー を A と す る}
●i←2 ●a0,a1は
A,S
と小 さ い 順 に 並 ん で い る の で,t=a2=Aを
と 比 較 し,al>tな
の で,a2←Sと
●t=Aをa0=Aと
ま ず,a1=S
す る
比 較 し,a0>tで
は な い の で,aj=a1←t=Aと
し てa0,a1,a2は A,A,S
と小 さ い 順 に ソ ー
●i←i+1=3と
トされ る し て,
●a0,a1,a2はA,A,S a2=Sと
と 小 さ い 順 に 並 ん で い る の で,t=a3=Kを
比 較 し,a2>tな
の で,a3←Sと
り 立 た な い の で,a2←t=Kと
す る.a1=A>t=Kは
成
し てa0,a1,a2,a3が
A,A,K,S
と小 さ い 順 に ソ ー
●i←i+1=4と
トされ る し,同
じ よ う に し て,a0,a1,a2,a3,a4が
A,A,K,S,U
と小 さ い 順 に ソ ー
●i←i+1=5と
トさ れ し,a0,a1,α2,a3,a4,a5が
A,A,K,R,S,U
と小 さ い 順 に ソ ー トされ
●i←i+1=6と
し,a0,a1,a2,a3,a4,a5,a6が
A,A,A,K,R,S,U
と小 さ い順 に ソ ー トされ る
●i←i+1=7と
し,i=7〓N=6で
な い の で
●a1=A,a2=A,a3=K,a4=R,a5=S,a6=Uを
比 較aj-1>tの
回 数,交
出 力 す る
換t←ai,aj←aj-1aj←tの
回 数 に つ い て 次
の こ とが 成 り立 つ.
性 質5.2
比 較 の 回 数 は,最
均1/4N2+O(n)回
で あ る.デ
小 で2(N−1)回,平
証 明 最 悪(最
大)の 場 合 は,入
の と き で あ る.a0に
i -1
の で,こ
で あ る.
力 が 逆 順 に 並 ん で い る と き,つ
…
ま り
>aN-1>aN
の と き,各i
につい
対 し て 1 回 ず つ 比 較 を 行 う か ら,i 回 の 比 較 が 行 わ れ
た が っ て,全
,…,2に
al>a2>
小 でN-1回,平
大 で1/2(N+4)(N-1)回,最
は 最 小 の も の が 入 っ て い る とす る.こ
て,j=i,i-1,…,1に
回 で あ る.ま
ー タ の 交 換 は,最
均1/4N2+O(n)回
る.し
大 で1/2(N+2)(N-1)回,最
部で
た,デ
ー タ の 交 換 は,各i
対 し てaj←aj-1を
れ ら を 合 わ せ てi+1回
に つ い て,t←aiを1
回,j=i,
1 回 ず つ でi-1回,a1←tを 行 わ れ る.し
た が っ て,全
1回行 う 部 で,
回 で あ る. 最 も少 な い の は,入
力 が小 さ い順 に
a1〓a2〓
と 並 ん で い る と き で あ る.各i 全 体 で は,
で あ る.
…〓aN-1〓aN
に つ い て,比
較 は,j=iの
と き 1回 行 う の で,
交 換 は,各i
に つ い て 必 ず,t←aiaj←tが
行 わ れ る か ら,
で ある. 平 均 は,各i
に つ い て ,j=i,i-1,…,1
の 約 半 分 で あ る,j=i,i-1,…,[i/2]
に対 して 1回ず つ比 較 を行 う とす る と,約i/2回 した が っ て,全 部 で,お
で あ る.し
よそ
た が っ て,1/4N2+O(n)と
つ い て,t←aiを
表 せ る.ま
1 回 ,j=i,i-1,…,i/2に
つ,a1←tを
1回 行 う と し て,約i/2回
で あ り,1/4N2+O(n)と
5.1.4
の 比 較 が 行 わ れ る こ と にな る.
た,デ
ー タ の 交 換 は ,各i
対 し てaj←aj-1を 行 わ れ る こ と に な る .し
1回 ず た が っ て,全部で,
表 せ る.
□
バ ブル ソ ー ト
次 は バ ブ ル ソ ー ト(bubble
ア ル ゴ リ ズ ム5.3:バ
sort)で
あ る.ア
ブルソー ト
入 力:デ
ー タ の 個 数N
と デ ー タa1,a2,…,aN
出 力:小
さ い 順 に 並 ん で い るa1,a2,…,aN
ス テ ッ プ: (1)i←1 (2)i〓N-1の
j←N
j〓i+1の
間,次
間,次
を行 う
を行 う
に
ル ゴ リ ズ ム は 次 の よ う に な る.
も し,aj<aj-1な
ら ば次 を 行 う
t←aj aj←aj-1 aj-1←t j←j-
1
(3)a1,a2,…,aNを
例5.4
出力
"SAKURA"と
し て み よ う.入 a6=Aで
い う 6文 字 を バ ブ ル ソ ー トで ア ル フ ァベ ッ ト順 に ソ ー ト
力 は,N=6とa1=S,a2=A,a3=K,a4=U,a5=R,
あ る.
初期 状 態 i=1の
SAKURA と き j=6で
R と A の 入 れ 替 え SAKUAR
j=5で
U と A の 入 れ 替 え SAKAUR
j=4で
K と A の 入 れ 替 え SAAKUR
j=3で
何 も しな い
j=2で i =2の
と き j=6で
S と A の 入 れ 替 え ASAKUR U と R の 入 れ 替 え ASAKRU
j=5で
何 も しな い
ASAKRU
j=4で
何 も しな い
ASAKRU
j=3で i=3の
SAAKUR
S と A の 入 れ 替 え AASKUR と き j=6で
何 も しな い
AASKRU
j=5で
何 も しな い
AASKRU
j=4で
i=4の
と き j=6で
i=5の
S と K の 入 れ 替 え AAKSRU
j=5で
何 も しな い
S と R の 入 れ 替 え AAKRSU
と き j=6で
比 較aj<aj-1の
AAKSRU
回 数,交
何 も しな い
AAKRSU(終
換t←aj,aj←aj-1aj-1←tの
了)
回数 につい
て次 の こ とが 成 り立 つ.
性 質5.3
バ ブ ル ソ ー トで は,1/2N(N-1)回
悪 の と き,3/2N(N-1)回,平
均 で は,3/4N2+O(N)回
証 明 比 較 は,各iに N-i回
の 比 較 を 行 う.交
で あ る.
つ い て,j=N,N-1,…,i+1に
行 わ れ る か ら,全
換 の 回 数 は,最
対 し て 1 回 ず つ,
部 で,
であ る. 交 換 は,入
… ,i+1に
で あ る.こ
力 デ ー タ が 逆 順 に 並 ん で い る と き,各i
対 して そ れ ぞ れ 必 ず 3回 行 わ れ る の で,
れ が 最 悪 の と き で あ る.
平 均 の 交 換 回 数 は,各i j=N,N-1,…,N-[i/2]
に つ い て,j=N,N-1,…,i+1の に 対 し て 行 わ れ る と す れ ば,最
と し て,3/4N2+O(N)回
5.1.5
に つ い て,j=N,N-1,
で あ る.
シ エル ソ ー
約 半分 の 悪 の と きの 約 半 分 □
ト
単 純 挿 入 ソ ー トを 使 っ た よ り高 速 な ア ル ゴ リ ズ ム に シ ェ ル ソ ー ト(shell sort) が あ る. シ ェ ル ソ ー トの ア ル ゴ リ ズ ム は 次 の よ う に な る.
ア ル ゴ リ ズ ム5.4:シ
ェル ソ ー ト
入 力:デ
ー タの 個 数
出 力:小
さ い 順 に 並 ん で い るa1,a2,...,aN
ス テ ッ プ: (1)h←1
N
と デ ー タa1,a2,...,aN
(2)h>Nと
な る ま で,次
を行 う
h←3h+1
(3)h←[h/3] (4)h〓1の
間,次
を行 う
i←h+1 i〓Nの
間,次
を行 う
v←ai j←i j>hか
つaj-h>vの
間,次
を行 う
aj←aj-h
j←j-h
aj←v i←i+1
h←(hを
3 で 割 っ た と き の 整 数 の 商)
(5)a1,a2,…,aNを
出力
シ ェ ル ソ ー トは で,実
行 の 順 番 は 少 し異 な る が,ak,ak+h,ak+2h,…
単 純 挿 入 ソ ー ト を行 っ て い る.上 の ア ル ゴ リズ ム で は,h と し て い る が,ほ
か の 値 に と っ て も か ま わ な い.こ
に対 し て,
を,…,121,40,13,4,1
のh
を 増 し分 と よ ぶ こ と に
し よ う. 比 較 の 回 数,交
性 質5.4
換 の 回 数 に つ い て 次 の こ と が 成 り立 つ こ と が 知 ら れ て い る.
シ ェ ル ソ ー トで は,増
し 分 を1,4,13,40,121,…
回 よ り多 く比 較 さ れ る こ と は な い.
例5.5
"INFORMATIONPROCESSING"と
トで ア ル フ ァ ベ ッ ト順 に ソ ー ト し て み よ う. ●h←1 ●h←3h+1=4<N=21
と す る と き,N3/2 □
い うN=21文
字 を シ ェル ソー
h←3h+1=13<N=21
h←3h+1=40〓N=21
●h←13=[h/3] 9.27228pt 初 期 状態
INFORMATIONPROCESSING
h =13 i=14
a1=Iとa14=Oを
比較 比 較,交
i=16 a3=Fとa16=Eを
比 較,交
INFORMATIONPROCESSING
i=15 a2=Nとa15=Cを
i=17 a4=0とa17=Sを
比較
i=18 a5=Rとal8=Sを
比較
i=19 a6=Mとa19=Iを
比 較,交
換
ICEORMATIONPRONFSSING
比較 比 較,交
換
i=21 a7=Tとa21=Gを h =4
比較
i=6 a2=Cとa6=Iを
比較
ICEORMATIONPRONFSSING ICEORMATIONPRONFSSING
i=20 a7=Aとa20=Nを
i=5 a1=Iとa5=Rを
ICFORMATIONPRONESSING
換
ICEORIATIONPRONFSSMNG ICEORIATIONPRONFSSMNG
換
ICEORIAGIONPRONFSSMNT
ICEORIAGIONPRONFSSMNT ICEORIAGIONPRONFSSMNT
i=7 a3=Eとa7=Aを
比 較,交
換
ICAORIEGIONPRONFSSMNT
i=8 a4=Oとa8=Gを
比 較,交
換
ICAGRIEOIONPRONFSSMNT
i=9 a5=Rとa9=Iを i=9 a1=Iとa5=Iを i=10 a6=Iとa10=Oを
比 較,交
換
ICAGIIEORONPRONFSSMNT
比較
ICAGIIEORONPRONFSSMNT
比較
ICAGIIEORONPRONFSSMNT
i=11 a7=Eとa11=Nを
比較
ICAGIIEORONPRONFSSMNT
i=12 a8=0とa12=Pを
比較
ICAGIIEORONPRONFSSMNT
i=13 a9=Rとa13=Rを
比較
i=14 a10=Oとa14=Oを
比較
i=15 a11=Nとa15=Nを i=16
a12=Pとa16=Fを
i=16 a8=Oとa12=Fを i=16 a4=Gとa8=Fを
ICAGIIEORONPRONFSSMNT ICAGIIEORONPRONFSSMNT
比較
ICAGIIEORONPRONFSSMNT
比 較,交
換
比 較,交
換
比 較,交
i=17 a13=Rとa17=Sを
比較
i=18 a14=Oとa18=Sを
比較
ICAGIIEORONFRONPSSMNT ICAGIIEFRONORONPSSMNT
換
ICAFIIEGRONORONPSSMNT ICAFIIEGRONORONPSSMNT ICAFIIEGRONORONPSSMNT
i=19
a15=Nとa19=Mを
比 較,交
換
ICAFIIEGRONOROMPSSNNT
i=19
a11=Nとa15=Mを
比 較,交
換
ICAFIIEGROMORONPSSNNT
i=19 a7=Eとa11=Mを i=20 a16=Pとa20=Nを i=20 a12=0とa16=Nを i=20 a8=Gとa12=Nを i=21 h =1 h=1の
a17=Sとa21=Tを
比較
比 較,交
換
比 較,交
換
比較 比較
ICAFIIEGROMORONPSSNNT
ICAFIIEGROMORONNSSNPT ICAFIIEGROMNRONOSSNPT
ICAFIIEGROMNRONOSSNPT
ICAFIIEGROMNRONOSSNPT
と き は 単 純 挿 入 ソ ー トを 行 う こ と に な る ACEFGIIIMNNNOOOPRRSST
5.1.6
クイ ックソー ト
ク イ ッ ク ソ ー ト(quick sort)は,ピ aNをa1,…,akはv以 次 に,a1,…,akとak+1,…,aNの を 繰 り返 し,分
ボ ッ ト(軸 の 要 素)vを
下,ak+1,…,aNはv以
選 ん で,a1,a2,…,
上 と な る よ う に 分 割 す る.
そ れ ぞ れ を,同
じ よ う に 分 割 す る.こ
割 し た も の が 1つ の 要 素 か ら な る ま で 続 け て い き,全
さ れ る よ う に す る.こ
の よ う に,全
全 体 を 処 理 す る 方 法 は,分
体が整 列
体 を 小 さ い 部 分 に 分 け て 処 理 を し,後
割 統 治 法(divide-and-conqure)と
れ
か ら
よ ば れ る.
ピ ボ ッ トを い つ も分 割 の 一 番 右 端 の 要 素 に な る よ う に と っ た と き の,ク
イ ッ
ク ソ ー トの ア ル ゴ リ ズ ム は 次 の よ う に な る.
ア ル ゴ リ ズ ム5.5:ク
イ ックソー ト
入 力:デ
ー タ の個 数 N
と デ ー タa1,a2,…,aN
出 力:小
さ い 順 に 並 ん で い るal,a2,…,aN
ス テ ッ プ: (1)a0←(a1,a2,…,aNの
中 の ど れ よ り も 大 き く な い も の)
(2)以 下 の ス テ ッ プ(3)をquicksort(l,r)と
{番 兵 キ ー}
名 付 け て,
quickosrt(1,N)
を実 行 す る
言 い 換 え る と,〓 ←1,r←Nと
(3)r>〓
の 間,次
し て,ス
テ ッ プ(3)を
を行 う
v←ar i←l
j←r-1
次 を繰 り返 す
次 を繰 り返 す
i←i+1
ai〓vと
aj〓vと
な っ た ら こ の繰 り返 し をぬ け る
次 を 繰 り返 す j←-1 な っ た ら この 繰 り返 しを ぬ け る
実行 す る
t←ai
ai←aj aj←t
j〓iと
な っ た ら こ の 繰 り返 し を ぬ け る
aj←ai
ai←ar
ar←t
quicksort(〓,i-1)を
実 行す る
quicksort(i+1,r)を (4)a1,a2,…,aNを
実 行 す る 出力
こ の ア ル ゴ リ ズ ム は,ス プ(3)を
テ ッ プ(3)の
行 う よ う に な っ て い る.こ
比 較 の 回 数,交
中 で,l,r
れ を 再 帰(recursion)と
ク イ ッ ク ソ ー トで は,最
悪 の と きO(n2)回
O(NlogN)回
の 比 較 を 行 う.ま
均O(NlogN)回
い う.
"INFORMATION"と
た,平
い うN=11文
の 比 較 を 行 い,平
均
の 交 換 を 行 う,
□
字 を ク イ ッ ク ソ ー トで ア ル フ ァ
ベ ッ ト川頁に ソ ー ト し て み よ う . a0←A AINFORMATION quicksort(1,11) v←N i=2 j=9 a2=Nとa9=Iの
交換
A IIFORMATNON
i=4
j=7 a4=Oとa7=Aの
交換
A IIFARMOTNON
i=5
j=6 a5=Rとa6=Mの
交換
A IIFAMROTNON
i=6
j=5 a5=Mとa6=Rの
交換
A IIFARMOTNON
a6=Nよ
a5←a6,a6←v,a11←a5
A IIFAMNOTNOR
り左 側 は N 以 下,右 側 は N 以 上 と分 け られ る
quicksort(1,5) v←M i=5
じス テ ッ
換 の 回 数 に つ い て 次 の こ と が 成 り 立 つ.
性 質5.5
例5.6
の 値 を 変 え て,同
j=4 a5=Mとa4=Aの
a4←a5,a5←v,a5←a5
交換
A IIFMA
N 0TNOR
A IIFAM
N OTNOR
a5=Mよ
り左 側 は M 以 下,右 側 は M 以上 と分 け られ る
quicksort(1,4) i=1
v←A
j=0 a1=Iとa0=Aの
I AIFAM
N OTNOR
a0←a1,a1←v,a4←a1 A AIFIM a1=Aよ り左 側 は A 以 下,右 側 は A 以 上 と分 け られ る
交換
N OTNOR
quicksort(1,0)
N OTNOR
何 も しな い
A AIFIM
qwicksort(2,4) v←I i=2
j=3 a2=Iとa3=Fの
交換
i=3
j=2 a3=Iとa2=Fの
交換
A A FII MNOTNOR A A IFI MNOTNOR
a2←a3,a3←v,a4←a3
A A FII MNOTNOR
quicksort(2,2)
何 も しない
quicksort(4,4)
何 も しな い
A A FII M N OTNOR
こ の あ とquicksort(7,11)を さ れ,全
体 が,左
A A FII M N OTNOR
同 じ よ う に 行 い,OTNORがNOORTと
整列
端 の 番 兵 キ ー A を 除 い て,
AFIIIVINNOORT
と整 列 さ れ,こ
れ を 出 力 す る.
5.2
デ ー タa1,…,aNの
サ ー チの ア ル ゴ リズム
中 にx
が あ る か な い か を探 す ア ル ゴ リズ ム を サ ー チ
(seach)ま
た は 探 索 の ア ル ゴ リ ズ ム と い う.
5.2.1
逐 次探索法
次 の よ う な,力
ま か せ の ア ル ゴ リ ズ ム を 逐 次 探 索 法 と い う.
ア ル ゴ リ ズ ム5.6:逐 入 力:デ
次探索法
ー タの 個 数 N
と デ ー タa1,a2,…,aN
探 す べ き 値x 出 力:x
と等 し い デ ー タ の 添 字l,つ た だ し,l=N+1の
と き は,a1,…,aNの
在 しな い こ と を意 味 す る ス テ ッ プ:
ま りx=alと
な るl. 中 にx
と等 しい もの は存
(1)aN+1←x
{サ ー チ が 必 ず 成 功 し て 終 了 す る よ う に 番 兵 キ ー を お く}
(2)i←0 (3)次
を 繰 り返 す
i←i+1 ai=xが
成 り立 っ た ら,こ
の 繰 り返 し を ぬ け る
(4)l←i (5)lを
出力
こ の ア ル ゴ リズ ムで は,1 つ見 つ か れ ば,も
うそ れ 以 上 の探 索 は行 わ ない が,
さ ら に,探 索 を続 け る よ うに す る こ と も容 易 に で きる.た と えば,ス テ ップ(2) のi←1の
代 わ りに
i←l とす れ ば よい. この 逐 次 探 索 ア ル ゴ リズ ム で は,最 悪 の と き,全 て の デ ー タ との比 較 を行 う こ と に な る か ら,N
回 の比 較 を行 う.ど の デ ー タ も 同 じ程 度 に比 較 され る とす
れ ば, 比 較 す る 回数 は,
で あ る.
5.2.2
バ イ ナ リーサ ー チ
た と え ば,国
語 辞 典 で あ る こ と ば を 探 す と き は,ま
ペ ー ジ を 開 い て,探
し て い る こ と ば が そ の ペ ー ジ よ り も っ と前 に あ る な ら,前
半 の 真 ん 中 あ た り を 開 き,探 れ ば,そ
ず 適 当 に 真 ん 中 あ た りの
して い る こ とば が そ の ペ ー ジ よ りも っ と あ とに あ
の 後 半 の 半 分 あ た り を 開 い て,と
繰 り 返 し て い け ば よ い.
辞 書 の よ う に,デ
ー タ が ソ ー ト さ れ て い る と き は,こ
リ ー サ ー チ(binary
search)ま
の 方 法 に よ る,バ
た は 二 分 探 索 法 と よ ば れ る も の が あ る.
イナ
ア ル ゴ リ ズ ム5.7:バ 入 力:デ
イ ナ リー サ ー チ
ー タの 個 数 N
と ソ ー ト さ れ た デ ー タa1〓a2〓
…〓aN
探 す べ き 値x 出 力:存
在 す れ ば そ の デ ー タ の 添 え 字h
を,存
在 し な け れ ばN+1
ス ア ツ プ: (1)l←1 r←N (2)次
を 繰 り返 す
h←[l+r/2]
も しx<ahな
ら ば,次
を行 う
も しx>ahな
ら ば,次
を行 う
r←h-1 l←h+1 l<rま
た はah=xな
(3)x=ahな
ら ば,次
ら ば こ の 繰 り返 し を ぬ け る
を行 う
h を 出 力 し て,終
了 する
そ う で な け れ ば,次
を行 う
h←N+1
h を 出 力 し て,終
比 較"l>rま
性 質5.6
た はah=x"を
ま と め て 1単 位 と して 次 が 成 り立 つ.
バ イ ナ リ ー サ ー チ で,比
証 明 ス テ ッ プ(2)で,探 の で,多
了す る
く と も 「log2N]
較 の 回 数 は,log2N+1回
す べ きデ ー タの個 数 は い つ も半 分 ず つ に な っ て い く 回 の 比 較 で ア ル ゴ リズ ム は 終 了 す る.た
x以 上 の 最 小 の 整 数 を 表 す.
例5.7 a1=2,a2=4,…,a100=200と
以下 である
だ し,「x
は □
い うai=2×iと
なっているデー
タ で,70を
バ イ ナ リ ー サ ー チ で 探 して み よ う.次
較 で,70が35番
目 に あ る こ と が わ か る.逐
の 表5.1の
よ う に,5
次 探 索 法 で は,35回
回の比
の 比 較 を しな
け れ ば な ら な い.
表5.1
同 じ デ ー タ で210を
探 し て み よ う.h=100の
と き,a100<210と
な る の で,
l ←h+1=101
を 行 う と,l>r=100と
な り,
h←N+1=101 と し て h を 返 す.し
た が っ て,210は
こ の デ ー タ の 中 に な い こ と が わ か る.バ
イ ナ リ ー サ ー チ で は 7 回 の 比 較 で こ の 答 を 得 る が,逐 を 行 う こ と に な る.
表5.2
次 探 索 法 で は100回
比 較
5.3
文 字 列 照 合 の ア ル ゴ リズ ム
文 章 の 中 か ら あ る 文 字 列 を 探 し出 す と い う こ と は よ くあ る こ と で あ る.こ で は,テ
キ ス ト の 中 か ら あ る 文 字 列 を探 し 出 す,文
matching)の
ア ル ゴ リ ズ ム を 考 え よ う.た
Computers
are gaining
more
and
と い う テ キ ス ト T の 中 に,P=areと
5.3.1
字 列 照 合(string
こ
pattern
と え ば,
more
importance
in all areas.
い うパ タ ー ン は 2 回 現 れ る .
素朴 な方法
次 の ア ル ゴ リ ズ ム は す ぐ に 考 え つ く も の で あ る.
ア ル ゴ リ ズ ム5.8:素 入 力:長
朴 な 文 字 列 探 索 の ア ル ゴ リ ズ ム(力
ま か せ の 方 法)
さ N の テ キ ス トT=t1t2…tNと, 長 さ M
出 力:存
の パ タ ー ンP=p1p2…pM
在 す れ ば,パ
タ ー ン の 始 ま る テ キ ス トで の 位 置l
つ ま り,tl,tl+1,…tl+M
-1に
パ タ ー ンが 現 れ る
存 在 し な け れ ば,N+1 N+1文
字 目 か ら パ タ ー ンが あ る と い う こ と は あ り え な い の で,こ
きテ キ ス ト T の 中 に パ ター ン P は存 在 しな い こ とを 意 味 す る ス テ ッ プ: (1)i←1 j←1 (2)次
を繰 り返 す
ti=Pjな
ら ば,次
を行 う
ら ば,次
を行 う
i←i+1 ti≠Pjな i←i-j+2
j←j+1
の と
j←1
i>Nま
た はj>Mに
(3)j>Mな
らば,次
l
←i-(M-1)
l
を出 力
i>Nな i
例5.8
らば,次
な っ た ら,こ の 繰 り返 し をぬ け る
を行 う
を行 う
を出 力
テ キ ス トT=abcacbbacbcacabcbaと
る.N=18,M=3で
す
実 行 す る と,次
の 表5.3の
ようにな
ま り,
●i=1,j=1の t1とp1の
タ ー ンP=acaと
あ る.
素 朴 な 文 字 列 探 索 の ア ル ゴ リ ズ ム5.8を る.つ
し,パ
t1=p1な
行 は, 照 合 を し, の で,i←2,j←2と
●i=2,j=2の
行 は,
t2とp2の
照 合 を し,
t2≠p2な
の で,i←2,j←1と
●i=2,j=1の
行 で は,
t2とp1の
照 合 を し,
t2≠p1な
の で,i←3,j←1と
●i=3,j=1の ●i=12,j=1の
t12とp1の
t12=a=p1な
●i=13,j=2の
t13とp2の
t13=c=p2な
●i=14,j=3の
し て,i=2,j=2の
行へ進 む
し て,i=2,j=1の
行 へ進 む
し て,i=3,j=1の
行 へ進 む
行 以 下 の 照 合 を 行 う. 行 で, 照 合 を し, の で,i←13,j←2と
す る
行 で, 照 合 を し, の で,i←14,j←3と 行 で,
す る
t14とp3の
t14=a=p3な
照 合 を し, の で,i←15,j←4と
す る
こ こ で,
j=4>M=3 と な る の で,
l←i-(M-1)=14-2=12 と し て,lを
出 力 す る.
こ れ に よ り,テ
キ ス トのl=12番
目の 文 字 か らパ タ ー ンが 現 れ る こ とが わ
か る.
例5.9 M=3で
テ キ ス ト をT=00000と あ る.
し,パ
タ ー ン をP=001と
す る.N=5,
素 朴 な 文 字 列 探 索 の ア ル ゴ リ ズ ム5.8を と き は,必
実 行 す る と,次 の 図 の よ う に な る.こ の
ず パ タ ー ン の 最 後 の 文 字p3=1ま
の と き,t5=0とp3=1の j←M=1を
で 照 合 が 行 わ れ る.i=5,j=3,
照 合 を し て,t5≠p3な
実 行 し,t4=0とp1=0の
i←i+1=5,j←j+1=2と
の で,i←i-j+2=4 照 合 を 行 い,成
し,t5=0とp2=0の
る の で,i←i+1=6,j←j+1=2と
,
功 す る の で,
照 合 を 行 い,成
す る.こ
功 す
こ で,
i>N と な る の で,こ
の と き のi,す
こ れ に よ り,テ
な わ ち,6
を 返 す.
キ ス トの 中 に パ タ ー ン が 現 れ な い こ と が わ か る.
性 質5.7 素 朴 な文 字 列 探 索 の ア ル ゴ リズ ム5.8で も,最 悪 の場 合 約M(N-M+1)回 テ キ ス トの 長 さN
は,探 索 が 成 功 す る と きで
の比 較 を行 う.
が パ ター ン の 長 さ M
よ り十 分 大 きい と き は,O(MN)
回 の 比 較 を行 う.
証 明 た とえ ば,テ キ ス トの最 後 の1 文 字 だ け が1 で,そ れ 以 外 は す べ て 0 と す る.パ
ター ンは最 後 の1 文 字 だ けが1 で それ 以 外 は す べ て 0 とす る.こ の と
き,テ キ ス トのtl,…,tN-M+1の
そ れ ぞ れ を先 頭 の 文 字 と して,必
ず つ 比 較 を行 い,最 後 に 成 功 す る.し た が って,全 体 で は,M(N-M+1)回
ず M 回
比 較 す る. も し,N
が M
M+1)〓MNと
5.3.2
よ り 十 分 大 き け れ ば,N-M+1〓Nな
の で,M(N-
考 え ら れ こ と か ら,比
あ る.
較 回 数 はO(MN)で
ボ イ ヤ ー―ム ー ア の ア ル ゴ リ ズ ム
素 朴 な 文 字 列 探 索 の ア ル ゴ リ ズ ム の 例 を み て,た abcacbbacbcacabcbaのt1とp1か
と え ば,テ
ら の 照 合 に 失 敗 し た あ と,ま
キ ス トの 文 字 の 照 合 を 始 め る の に,t2とt3はp1と ス キ ッ プ し てt4か D.E.ク
ヌ ー ス,V.R.
は 異 な る の で,そ
プ ラ ッ トの 2 人 と,こ
っ と 進 ん で,パ
テ
れ らを
キ ス トに は よ ら ず,パ
の 2 人 と は 独 立 に,J.H.
タ ー ン のp1,…,pkま
と き 照 合 が 失 敗 し た と き,次
お い て,無
た,p1と
ら 始 め て も よ い の で は な い か と 考 え た 人 も い る だ ろ う.
リ ス と い う 人 は,も pk+1の
キ ス トT=
モ
で は 照 合 が 成 功 し,
の 照 合 は ど こ か ら始 め れ ば よ い か は,テ
タ ー ン の み に よ り 決 ま る の で,あ
らか じめ これ を求 め て
駄 な 照 合 を 行 わ ず に 効 率 よ く照 合 を 行 う と い う ア ル ゴ リ ズ ム を 考 え,
そ れ が 素 朴 な 文 字 列 探 索 の ア ル ゴ リ ズ ム よ り ず っ と 速 い こ と を 示 し た. こ れ と は,独
立 に,R.S.
ボ イ ヤ ー とJ.S.
で は あ る が 発 想 が 異 な る 方 法 を 考 え た.彼 の 文 字 か ら で は な く,最 よ う に,照
ム ー ア は,同
じよ う な ア イ デ ィア
ら の 方 法 は,照
合 を パ ター ンの 最 初
後 の 文 字 か ら 始 め,ク
ヌ ー ス 一モ リ ス ープ ラ ッ トと 同 じ
合 が 失 敗 し た と き に 次 の 照 合 を ど こ か ら始 め る か を あ ら か じめ 求 め
て お く方 法 で あ る. ク ヌ ー ス ーモ リス ープ ラ ッ トの 方 法 も ボ イ ヤ ー― ム ー ア の 方 法 も ど ち ら もO(M+ N)回
の 照 合 を 必 要 と す る ア ル ゴ リズ ム で あ る が,実
用 的 に は,ボ
イ ヤ ー―ム ー
ア の 方 法 が 優 れ て い る と さ れ て い る. ボ イ ヤ ー― ム ー ア の 方 法 を 説 明 し よ う. 例 を 考 え な が ら説 明 し よ う.テ トの 小 文 字a,b,…,y,z
キ ス トと パ タ ー ン に 現 れ る 文 字 は ア ル フ ァベ ッ
と 空 白 とす る.
テ キ ス ト T をwahahewahahhaWahahaと る.テ
キ ス トの 長 さ N は19,パ
テ キ ス ト中 の 文 字tiと 字p1=Wを
し,パ
タ ー ンの 長 さ M
パ タ ー ン 中 の 文 字pjの
テ キ ス トの 最 初 に あ わ せ,照
タ ー ン P をwahahaと
す
は 6で あ る.
照 合 を 行 う.パ
合 は,tM=t6=eとpM=p6=a
タ ー ン最 初 の 文
と か ら始 め る.つ の で,こ
ま り,こ の と き,i=6,j=6で
れ 以 上p1を
さ ら に,e
とa と は 一 致 し な い
テ キ ス トの 最 初 に あ わ せ た ま ま 照 合 を 続 け る 必 要 は な い.
は パ タ ー ン 中 に 一 度 も現 れ な い の で,こ
ね て も 無 駄 で あ る.し ら,テ
あ る.e
た が っ て,パ
れ 含 む 部 分 とパ タ ー ン を重
タ ー ン中 に現 れ な い 文 字 との 照 合 が あ っ た
キ ス ト中 の そ の 次 の 文 字 にp1を
あ わ せ て,照
合 を 再 開 す れ ば よ い.つ
ま り,
i←i+M j←M と し て,照
合 を 再 開 す る.
つ ま り,i=12,j=6と 異 な る か ら,パ
し た が っ て,こ
照 合 を 行 う.こ
タ ー ン を 右 へ ず ら す の だ が,t12=hは
個 所 に あ る の で,こ 近 いp5をt12に
し て,t12=hとp6=aの
パ タ ー ン 中p3,p5の
れ ら と の 照 合 を 見 落 と さ な い た め に は,パ
の と き は,
i←i+1=13 j←M=6
i←i-1=12
照 合 を 行 う.こ
2
ター ン の 右 端 に
あ わ せ る 必 要 が あ る.
と し て,t13=aとp6=aの
れ らは
れ ら は 一 致 す る の で,
j←j-1=5 と し て,t12=hとp5=hと
の 照 合 を し,一
致 す る の で,再
び,
i←i-1=11 j←j-
1=4
と し て,tl1=hとp4=aと
の 照 合 を す る.こ
は パ タ ー ン 中 に 存 在 す る 文 字 で あ り,こ い の で,パ
れ ら は 一 致 し な い が,tl1=h
の 照 合 位 置 の す ぐ左 に あ る か も しれ な
タ ー ン を 右 へ1 だ け ず ら し て,つ
ま り,
i←i+M-j+1=14 j←M=6 と し て,ま
た,パ
ター ンの 右 端 か ら照 合 を始 め る。
し た が っ て,i=14,j=6と は 異 な る か ら,パ あ る の で,パ
し て,t14=wとp6=aの
タ ー ン を 右 へ ず らす の だ が,t13=wは
照 合 を 行 う. こ れ ら パ タ ー ン 中 にp1に
タ ー ン を 右 へ 5ず ら す.
す な わ ち,
i←i+5=19 j←M=6 t19=aとp6=aの
照 合 か ら,順
にi,j
を 1ず つ 減 ら して,照
合 が,i=14,
j=1のt14=wとp1=wま
で 全 て 成 功 す る の で,
i←i-1=13 l←i+1=14 j←i-1=0 と し て,l,j
を 出 力 す れ ば,j=0の
と き は,テ
キ ス トのtlか
ら始 ま る部 分
が パ タ ー ン と 一 致 す る こ と が わ か る.
照 合 が 失 敗 した と き,そ へ ず らす か は ,パ
の と き の テ キ ス トの 文 字 がx で あ れ ば,ど
タ ー ン だ け に 依 存 し,テ
キ ス トに 依 存 し な い.ま
れだけ右 た次 の よ う
に す れ ば ず ら す 数 が 求 ま る こ と は 明 ら か で あ ろ う. た だ し,
index(x)は
ア ル フ ァベ ッ トx が,小
と な る も の と す る.a,…,z 2,…,index(z)=26で
入 力:テ 出 力:照
を 考 え て い る と き は,index(a)=1,index(b)=
あ る.便
ア ル ゴ リ ズ ム5.9:照
白 のindexは
こ で は,a,…,z
と空 白)
の パ タ ー ンP=p1p2…pM
合 が 失 敗 し た と き の テ キ ス トの 文 字 がx
ス テ ッ プ: (1)k←0 (2)k〓26の
0 と す る.
合 が 失 敗 した と きの パ タ ー ンの 移 動 文 字 数
数skip(index(x))
宜 上,空
キ ス トに 現 れ る 文 字 全 て(こ
長 さ M
さ い 方 か らk 番 目 の と き,index(x)=k
間,次
skip(k)←M
を行 う
の と きのパ ター ン の移 動 文 字
k←k+1
(3)j←1 (4)j〓Mの
間,次
を行 う
skip(index(pj))←M-j
k←k+1
パ タ ー ン がwahahaの
と き,
●skip(index(a))=skip(index(p6))=6-6=0 ●skip(index(w))=skip(index(p1))=6-1=5 ●skip(index(h))=skip(index(p5))=6-5=1 ●a,w,h
以 外 のx
に 対 し て,skip(index(x))=M=6
で あ る. ま た,実
際には
●M-j+1>skip(index(ti))の
ときは
i←i+M-j+1
j←M
と して
●M-j+1〓skip(index(ti))の
i←i+skip(index(ti))
j←M
と して
と きは
照 合 を 再 開 す る. さ ら に 次 の よ う に し て,照
合 の 回 数 を 減 ら す こ と が で き る.
上 の 例 で,
t13=aとp6=aの
照 合
t12=hとp5=hの
照合
t11=hとp4=aの
照合
を し て,tl1=h≠p4=aな
の で,
i←i+M-j+1 j←M と し て,パ t12=hと
タ ー ン を 右 へ ず ら し た が,こ
こ ま で に ,テ
い う こ と は わ か っ て い る の だ か ら ,パ
外 で,…ha…
と な っ て い る と こ ろ を 探 し,そ
る と こ ろ ま で,パ さ ら に,わ
キ ス トで は,t13=a,
タ ー ンwahahaの
中 でp5p6以
う な るp3p4とt12t13と
が重 な
タ ー ン を 右 へ ず ら して も よ い こ と に な る .
か っ て い る こ と は そ れ だ け で は な く,t11≠p2=aで
考 え に 入 れ れ ば,パ
あ るこ とも
タ ー ン を 右 へ 6文 字 ず ら し て
i←i+(M-j)+6=16 j←M と し て よ い こ と も わ か る.す
な わ ち,次
の 図 の よ う に ,照
合 し て,パ
タ ー ンが
テ キ ス ト中 に 見 つ か る こ と に な る.
この例 で は,下 線 の つ い た11文 見 つ か る と きは,必
字 を照 合 す る こ とで,パ
ず 最 後 にM=6回
タ ー ンが 見 つ か る.
の 照 合 を 行 うの で,本
質 的 に は 6回 の
照 合 で パ ター ンが 見 つ か る こ とに な る. パ タ ー ン のpM,PM-1,…,pj+1ま と き,パ
で の 照 合 に 成 功 し,pjで
タ ー ン を 右 へ い く つ ず ら せ ば よ い か は ,パ
ス ト に は 依 存 し な い か ら,右
へ ず ら す 数next(j)は
求 め て お く こ と が で き る.そ
し て,そ
j=1,2,3,…,M-1に
(1)k<jで
あ り,か
の よ う なk つ,
キ
パ タ ー ン か ら あ ら か じめ
れ は 次 の よ う に し て 求 ま る .す
対 し て,next(j)は
最 小 の 正 の 整 数 か,そ
照 合 に 失 敗 した
タ ー ン に の み 依 存 し,テ
次 の(1),(2),(3)のk
が存 在 しな け れ ば M
で あ る.
な わ ち, の う ちの
pM=pM-k
pj+1=pj-k+1 pj≠pj-k
な るk (2)k=jで,か
つ,
pM=pM-k(=PM-j)
pj+1=p1(=pj-k+1)
な るk
(3)k>jで,か
つ,
pM=pM-k
pk+1=p1
な るk
ボ イ ヤ ー―ム ー ア の 方 法 は,テ
キ ス トの 文 字tiと
の 不 成 功 が 生 じた と き,skip(index(ti))とnext(j)の
パ タ ー ン の 文 字pjで 大 き い ほ う だ け,パ
ン を 右 へ ず ら して,パ
タ ー ン の 右 端 か ら 照 合 を 繰 り 返 す 方 法 で あ る.
以 上 を ま と め て,ア
ル ゴ リ ズ ム と し て 書 き 出 す と次 の よ う に な る.
ア ル ゴ リ ズ ム5.10:ボ
イ ヤ ー― ム ー ア の 文 字 列 探 索 の ア ル ゴ リ ズ ム
入 力:長 出 力:存
さN
の テ キ ス トT=t1t2…tN,
長 さM(〓N)の 在 す れ ば,パ
パ タ ー ンP=p1p2…pM タ ー ン の 始 ま る テ キ ス トで の 位 置l
存 在 し な け れ ば,N+1
ス テ ッ プ:
照 合 ター
(1)全
て の 文 字 に つ い て,skip(index(x))を
(2)1〓j〓M-1に
対 し て,next(j)を
求 めてお く 求 めてお く
(3)i←M
j←M
(4)i>Nと
な る かj<1と
ti=pjな
な る ま で,次
ら ば,次
を行 う
ら ば,次
を行 う
を 繰 り返 す
i←i-1
j←j-1
ti≠pjな
M-j+1>skip(index(ti))な
ら ば,次
を行 う
ら ば,次
を行 う
i←max(i+M-j+1,i+M-j+next(j))
M-j+1〓skip(index(ti))な
i←max(i+skip(index(ti)),i+M-j+next(j))
j←M
(5)j<1な
ら ば,次
を行 う
l←i-(M-1) lを i>Nな i
出力 ら ば,次 を出 力
を行 う
参 考 文 献
本 書 を 書 く た め に 参 考 に し た 文 献 を 挙 げ て お こ う. 本 書 の 第 1 章 か ら 第 4 章 ま で を も っ と 深 く勉 強 し た い の な ら,[1] が と て も た め に な る.ま
た,[1]
よ り 手 軽 に 読 め る 本 と し て,[2
]や[3 ]が あ る.本
書 を 書 くの に も非
常 に 参 考 に な っ た 本 で あ る. 第 4 章 で は,[4]
∼[7]を 参 考 に し た が,ど
第 5 章 は,[8]∼[11]な [12]∼[16]は
[1]Joachim
れ も 自 分 で 勉 強 す る の に も よ い 本 で あ る.
ど を 参 考 に し て 頂 き た い.
第 2 章 の ア ル ゴ リ ズ ム と そ の 応 用 に 関 連 す る も の で あ る.
von
zur
Gathen
bra,Cambridge
and
University
Jurgen
Gerhard著:Modern
Press,1999.(山
本
Computer
Alge‐
慎 ほ か に よ る邦 訳 が 朝 倉 書 店
よ り刊 行 予 定) [2]伊
理 正 夫,藤
[3]伊
野 和 建 著:数
理 正 夫 ほ か 著:情
[4]James
M.Ortega著:Numerical
[5]Rainer [6]山
Kress著:Numerical
本 哲 朗 著:数
[7]森
値 計 算 の 常 識,共
報 処 理 技 術 の 数 学,共
Analysis,A
Course,SIAM,1990.
値 解 析 入 門,サ
181,1998.
イ エ ン ス 社,1976. 値 計 算 プ ロ グ ラ ミ ン グ,岩
波 書 店,1986.
Sedgewick著:Algorithms,Second.Edition,Addison‐Wesley.Pub‐
lishing [9]R.セ
Second
Analysis,Springer,GTM
正 武 著:FORTRAN77数
[8]Robert
立 出 版,1985. 立 出 版,1996.
Company,1988.
ジ ウ イ ツ ク 著,野
下 浩 平 ほ か 訳:ア
ル ゴ リ ズ ム,第
1 巻,第
2 巻,第
近 代 科 学 社,1990. [10]
茨 木 俊 秀 著:C
[11]野
崎 昭 弘 著:ア
[12]吾
郷 孝 視 訳 編:素
に よ る ア ル ゴ リ ズ ム と デ ー タ 構 造,昭 ル ゴ リ ズ ム と 計 算 量,共 数 の 世 界―
立 出 版,1987.
そ の 探 索 と 発 見,共
[13]辻
井 重 男 著:暗
号―
[14]辻
井 重 男 著:暗
号 と 情 報 社 会,文
晃 堂,1999.
立 出 版,1995.
ポ ス トモ ダ ン の 情 報 セ キ ュ リ テ ィ,講 春 新 書,1999.
談 社,1996.
3 巻,
[15]
辻 井 重 男 編 著:暗
[16]J.A.Buchmann著,林 ク 東 京,2001.
号 と 情 報 セ キ ュ リ テ ィ,昭 芳 樹 訳:暗
晃 堂,1989.
号 理 論 入 門,シ
ユ プ リ ン ガ ー ・フ ェ ア ラ ー
索
キー 122
■ ア行 IMSB
引
基 数 15
65
ア ル ゴ リズ ム 1,3
奇 数 へ の四 捨 五 入 69
ア ン ダ ー フ ロ ー 67
既 約 105 既 約 優対 角 105
イ ン プ リ シ ッ ト MSB
65
狭 義優 対 角 105 行 交換 を伴 う ガウ スの 消去 法 110
打 ち 切 り誤 差 74
切 り上 げ る 69 切 り捨 て る 69
SOR法
117
エ ラ トス テ ネ ス の篩 い 49 LU分
近 似解 92 近似 値 74
解 113
偶 数へ の四 捨 五入 69 オ イ ラ ー の 関 数 52
クヌ ー ス−モ リスープ ラ ッ トの 方 法 145
大 き い O 記 法 11
組 立 除法 87
大 き い 方 へ 丸 め る 69
ク ラメ ルの 公式 103
オ ー バ ー フ ロ ー 66
係 数行 列 103 ■ 力行
桁揃 え 71
ガ ウ ス−ザ イ デ ル 法 116
けち 表現 65
ガ ウ ス の 消 去 法 106 行 交 換 を 伴 う―
語 21
ガ ウ ス の 単 純 消 去 法 107
公 式誤 差 74
拡 張 さ れ たユ ー ク リ ッ ドの ア ル ゴ リズ ム 43
合成 数 48
仮 数 部 62
後退 代 入 過程 108
カ ー マ イ ケ ル 数 53
合 同 51
可 約 105
誤差 74
完 全 ピ ボ ッ ト選 択 法 110
―の 限 界 74
緩 和 因 子 117 緩 和 係 数 117
■サ 行 最上 位 ビ ッ ト 22
シ ェル ソ ー ト 132
単 純 選択 ソ ー ト 122
時 間 計算 量 10
単純挿入ソー ト 126
字 下 げ 7
単 精 度 28
四 捨 五 入 69
単 精 度実 数 型 62
指 数 62 指 数 部 62
小 さい 方へ の 四 捨 五 入 69
実 数 型 61
小 さい 方へ 丸 め る 69
10進 数 13
逐 次 過大 緩 和 法 117
10進 表現 14
逐 次 探索 法 137
16進 表現 16
注 釈 文 7
縮小 写像 98
直 接 法 91
―の原 理 99 縮小 定数 99
デ ノー マ ル 64
条件 文 7 小 数 部分 62
■ ナ行
真 数 74
2進 数 14
真 の 解 92
2進表 現 14 2進 浮動 小 数 点数 62
数値 的 ア ル ゴ リズ ム 122
2の補 数 21
数値 的 に解 く 92
2の補 数 表 現 22
ス ペ ク トル半径 118
二 分探 索 法 138 ニ ュー トン法 93
正 規化 64
ニ ュ ー トンーラ フ ソン法 93
正 規化 数 64 正規 表現 64 整 数型 61
■ ハ行 バ イア ス 63
生成 誤 差 74
バ イア ス表 現 63
正則 103 整列 122
倍 精度 浮 動 小 数点 数 67 バ イナ リー サ ー チ 138
線形 逆 補 間 法 98
8進表 現 15
前進(消 去)過 程 107
発 生誤 差 74 バ ブ ル ソー ト 130
相対 誤 差 74 ―の 限 界 74
反転 23
底 15
番 兵 キー 126
反復 法 91,115
素数 48 ソー ト 122
非 数値 的 ア ル ゴ リズ ム 122
■ タ行
非 正規 化 数 64 ビ ッ ト 21
代 入誤 差 74
ビ ッ トパ ター ン 21
代入文 6 多倍 長 数 28
フ イボナ ツチ 数 46
フ エ ルマ ー数 52
マ シ ン イプ シ ロ ン 76
フエ ルマ ー の小定 理 52
丸 め誤 差 74
フ ォン ・ミーゼ 法 98
丸 め る 68,69
符号 62 符号‐絶 対 値表 示 62
文字 列 照 合 141
ふ つ うの 四捨 五 入 69 浮動 小 数 点数 61
■ ヤ行
不動 点 98
ヤ コ ビ法 115
部 分 ピボ ッ ト選択 法 110 ベ ズ ー係 数 42 β 進 数 15 β 進 表現 14
優対 角 105 ユ ー ク リ ッ ドの アル ゴ リズ ム 38 ―の 長 さ 40 ユ ー ク リ ッ ドの互 助 法 38
変 数 6 ■ ラ行 ボ イヤー―ムー アの 方 法 145 ホ ー ナー の 方法 87
離散 化 誤 差 74 リプ シ ツ ツ定 数 99
■ マ行
領域 計 算 量 10
リプ シ ツ ツの 条件 99 増 し分 133
著者 略歴 山 本
慎(や まもピ まこと)
1953年 東 京都 に生 まれ る 1982年 早稲 田 大学大 学院 理工学 研究科 博士課程 修了 現 在 中央大学 理工 学部教 授 理学 博士
シ リ ー ズ[数
学 の 世 界]2
情 報 の 数 理 2002年10月25日
定価 は カバ ーに表示
初 版 第 1刷
著 者 山
本
発行者 朝
倉
発 行所 株式
会社
朝
慎 邦
倉
書
造
店
東 京 都 新 宿 区 新 小 川 町6‐29 郵 便 番 号 電 FAX
〈検 印 省 略 〉 〓 2002〈
ISBN
03(3260)0180
http://www.asakura.co.jp
無 断 複 写 ・転 載 を 禁 ず 〉
4‐254‐11562‐8
162‐8707
話 03(3260)0141
C3341
三美印刷 ・渡 辺 製本 Printed
in Japan
慶大 有澤 誠著 情報数学の世 界 1
パ
タ
ー
ン
の
発
見
な記 号 や 数 式 の使 用 は 最 小 限 に と どめ,興 味 深 い 話 題 を満 載 して 数 学 ア レ ル ギー の解 消 を 目指 す
―離 散 数 学― A5判 132頁 本 体2700円
12761‐8 C3341
慶大 有澤 誠著 情報数学の世 界 2
パ ラ ドッ ク ス の 不 思 議 ―論 理 と集 合― A5 判 128頁 本 体2500円
12762‐6 C3341
ゼ ロ か ら わ か る 数 学 ―数 論 とそ の応 用― A5判 144頁 本体2500円
ゥ ラエ 著
π―
体系と歴史― A5判
「πの探 求,そ
京大 畑 政 義 訳
魅
11086‐3 C3041
惑
B5判
の
数
208頁 本 体4600円
は じめ か らの 数 学 1
に
つ
1153I‐8 C3341
い
B5判
て
152頁 本 体2700円
前東工大 志 賀 浩 二 著 は じめ か らの 数 学 2
式
に
つ
11 532‐6 C3341
B5判
い
て
200頁 本 体2900円
前束工大 志 賀 浩 二 著
数
II 533‐4 C3341
に B5判
で,人
れ は 宇 宙 の 探 検 だ 」古 代 か ら 現 代 ま
々 を魅 了 して きた 神秘 の 数 の世 界 を探 る。
〔内容〕π との 出 会 い/ πマ ニ ア/ 幾 何 の 時 代 / 解 析 の 時代 / 手 計 算 か ら コ ン ピ ュ ー タへ / πを 計 算 し よ う/ πは 超 越 的 か / πは乱 数 列 か/ 付 録 / 他 数 学 を も う一 度 初 め か ら学 ぶ と き"数"の 理 解 が 一 番 重要 で あ る,本 書 は 自然 数,整 数,分 数,小 数 さ らに は 実 数 ま で を述 べ,楽 し く読 み 進 む う ちに 十 分 深 い 理 解 が 得 られ る よ うに 配 慮 した数 学 再 生 の一 歩 とな る話 題 の書 。 【各 巻 本 文 二 色 刷 】
点 を示 す等式か ら,範 囲 を示す不 等式へ,そ して 関数 の世 界へ導 く「 式」 の世界 を展 開。 〔 内容〕文字 と式/ 二項定理/数学的帰納法/恒等 式 と方程式 / 2次 方程式/ 多項式 と方程式/連立方程 式/不 等式/数 列 と級数/式の世界か ら関数 の世 界へ '動き'を 表 す た め に は,関 数 が 必 要 と な っ た。関 数 の 導 入 か ら,さ ま ざ ま な関 数 の意 味 とつ な が りを
は じめ か ち の数 学 3
関
論 理 か ら複 素 数 ま で 歴 史 を 踏 ま えて 考 え て い く。 〔内容 〕論 理 / 集 合:素 朴 集合 論 他 / 自然 数:自 然 数 をめ ぐるお 話 他 / 整数:整 数 論 入 門 他 / 有 理 数 / 代 数 系 / 実 数:濃 度 他 / 複 素 数:四 元 数 他 / 他
224頁 本 体3500円
前東工大 志 賀 浩 二 著
数
開鍵暗号
「数 」とは 何 だ ろ うか ?一 見 自明 な「数 」の 体 系 を,
数― J.‐P.ド
0,1,2,3,… と四 則 演 算 だ け を予 備 知 識 と して 数学 にお け る感性 を会得 させ る数 学入 門書。集 合 ・写 像 な ど は 丁 寧 に 説 明 して 使 え る道 具 とし て し ま う。 最 終 目 的 地 は イ ン ター ネ ッ ト向 き の暗 号 方 式 と して 最 も エ レガ ン トなRSA公
早大 足立恒 雄 著
11088‐X C3041
身 近 な興 味 深 い 例 を 多数 取 り上 げて 集 合 と論 理 を わ か りや す く解 説 し,さ ま ざ ま なパ ラ ド ッ クス の 世 界 へ 読 者 を 導 く。 〔内容 〕集 合 / 無 限 集 合 / 推 論 と証 明 / 論 理 と推 論 / 世 論 調 査 お よ び選 挙 の パ ラ ドッ クス/ 集 合 と確率 の パ ラ ドッ ク ス/ 他
理科大 戸 川 美 郎 著 シ リー ズ〈数 学 の 世 界 〉1
1156I‐X C3341
種 々 の現 象 の 中 か らパ ター ン を発 見 す る過 程 を 重 視 し,数 式 に モ デ ル 化 し た も の の操 作 よ り も,パ ター ン の発 見 に 数 学 の 面 白 さ を見 い だす 。 抽 象 的
つ
い
て
192頁 本 体3600円
解 説 。 〔内 容 〕式 と関 数 / グ ラ フ と関 数 / 実 数,変 数,関 数 / 連 続 関 数 / 指 数 関 数,対 数 関 数 / 微分 の 考 え/ 微分 の 計 算 / 積 分 の 考 え/ 積 分 と微分 理 工 系 の学 生 や 大 学 院 生 に は も ち ろん,技
理科大 鈴 木 増雄 ・中大 香 取 眞 理 ・東大 羽 田 野 直 道 ・ 物質材料研究機構 野々村禎彦訳
技術のための 数 学 ハ ン ド ブ ッ ク
術者 ・
研 究 者 と して 活 躍 して い る人 々 に も,数 学 の 重 要 事 項 を一 気 に学 び,ま た 研 究 中 に 必 要 に な っ た事 項 を手 っ取 り早 く知 るこ との で き る便 利 で役 に 立 つ ハ ン ドブ ッ ク。 〔内容 〕ベ ク トル解 析 とテ ン ソル 解析 / 常 微 分 方 程 式 / 行 列代 数 / フー リエ 級 数 と フ ー リエ 積 分 / 線 形 ベ ク トル 空 間 / 複 素 関 数 / 特 殊 関 数 / 変 分 法 / ラ プ ラ ス変 換 / 偏 微 分 方 程 式 /
II090‐I C3041
A5判
570頁 本 体14000円
簡 単 な線 形 積 分 方程 式 / 群 論 / 数 値 的 方 法 / 確 率 論 入 門 /(付 録)基 本 概 念/ 行 列 式 その 他 上 記 価格(税 別)は2002年
9月現 在