DVIOUT

Similar documents
コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

Microsoft PowerPoint - ca ppt [互換モード]

Microsoft Word - VBA基礎(3).docx

プログラミング基礎

Microsoft PowerPoint - 4.pptx

論理と計算(2)

アルゴリズムとデータ構造

フローチャートの書き方

Taro-Basicの基礎・条件分岐(公

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

簡単な検索と整列(ソート)

Javaによるアルゴリズムとデータ構造

新・明解C言語で学ぶアルゴリズムとデータ構造

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

論理と計算(2)

Microsoft PowerPoint - mp11-06.pptx

Microsoft Word - NumericalComputation.docx

Microsoft Word - VBA基礎(2).docx

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1

040402.ユニットテスト

Microsoft PowerPoint - C4(反復for).ppt

情報処理Ⅰ

Microsoft PowerPoint - algo ppt [互換モード]

Microsoft PowerPoint - class04.ppt

Microsoft PowerPoint - qcomp.ppt [互換モード]

Microsoft Word - Training4_判断と制御.docx

Microsoft Word - 3new.doc

プログラミングA

Microsoft PowerPoint - C_Programming(3).pptx

三者ミーティング

プログラミングA

本サンプル問題の著作権は日本商工会議所に帰属します また 本サンプル問題の無断転載 無断営利利用を厳禁します 本サンプル問題の内容や解答等に関するお問 い合わせは 受け付けておりませんので ご了承ください 日商プログラミング検定 STANDARD(VBA) サンプル問題 知識科目 第 1 問 ( 知

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

jhs-math3_01-02ans

PowerPoint プレゼンテーション

Microsoft PowerPoint - 2.ppt [互換モード]

C 言語第 3 回 2 a と b? 関係演算子 a と b の関係 関係演算子 等しい a==b 等しくない a!=b より大きい a>b 以上 a>=b より小さい a<b 以下 a<=b 状態 真偽 値 条件が満たされた場合 TRUE( 真 ) 1(0 以外 ) 条件が満たされなかった場合 F

プログラミング基礎

Microsoft PowerPoint - while.ppt

学習指導要領

alg2015-2r4.ppt

<4D F736F F D2094F795AA95FB92F68EAE82CC89F082AB95FB E646F63>

チェビシェフ多項式の2変数への拡張と公開鍵暗号(ElGamal暗号)への応用

Microsoft PowerPoint - Prog05.ppt

Microsoft PowerPoint - 3.pptx

プログラミング実習I

Microsoft PowerPoint - 05.pptx

Java講座

Microsoft PowerPoint - Visualプログラミング

学習指導要領

解答編 第 7 章実数型の計算と標準数学関数 演習問題 7.1 文法事項 1 ) 暗黙の型変換とは何か答えなさい 代入演算子 (=) や算術演算子 (+,-,*,/,%) では 2 つの演算項のデータ型が揃っている事が必要です 2 つの演算項のデータ型が異なる場合 可能ならば 演算項のデータ型を変換

プログラミング入門1

Microsoft Word - no103.docx

<4D F736F F D20924E82C582E082ED82A982E D834F D758DC02E646F63>

計算機プログラミング

JavaプログラミングⅠ

C#の基本2 ~プログラムの制御構造~

3. 標準入出力

Microsoft PowerPoint ppt

Microsoft Word - 実験4_FPGA実験2_2015

Microsoft PowerPoint - 説明3_if文switch文(C_guide3)【2015新教材対応確認済み】.pptx

行列、ベクトル

program7app.ppt

cp-7. 配列

Microsoft Word - DF-Salford解説09.doc

DVIOUT

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

Microsoft PowerPoint ppt

PowerPoint Template

Microsoft Word - 201hyouka-tangen-1.doc

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

gengo1-6

オートマトン 形式言語及び演習 4. 正規言語の性質 酒井正彦 正規言語の性質 反復補題正規言語が満たす性質 ある与えられた言語が正規言語でないことを証明するために その言語が正規言語であると

2 列 B と 列 C の間にカーソルをあわせ, カーソルの形が変化したところでドラッグして右に移動し, 列 B の幅を約 に設定します 3 列 C の上でマウスをドラッグして右に移動し, 列 C, 列 D, 列 E の 3 列を一括選択します 一括選択ができたら, 列 C と 列 D

JavaプログラミングⅠ

論理学補足文書 7. 恒真命題 恒偽命題 1. 恒真 恒偽 偶然的 それ以上分割できない命題が 要素命題, 要素命題から 否定 連言 選言 条件文 双 条件文 の論理演算で作られた命題が 複合命題 である 複合命題は, 命題記号と論理記号を 使って, 論理式で表現できる 複合命題の真偽は, 要素命題

VelilogHDL 回路を「言語」で記述する

C言語によるアルゴリズムとデータ構造

Microsoft PowerPoint - info1-8.ppt [互換モード]

Microsoft PowerPoint - H20第10回最短経路問題-掲示用.ppt

DVIOUT-SS_Ma

方程式の解法

ポインタ変数

Microsoft Word - 19-d代 試é¨fi 解ç�fl.docx

Microsoft Word - thesis.doc

Taro-数値計算の誤差(公開版)

Microsoft PowerPoint - mp13-07.pptx

Microsoft PowerPoint - å®�æ−•è©¦é¨fi3ㆮ対ç�Œ.pptx

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

ゲームエンジンの構成要素

喨微勃挹稉弑

gengo1-2

Microsoft PowerPoint - VBA解説1.ppt [互換モード]

Microsoft PowerPoint - lec4.ppt

Microsoft PowerPoint - 13approx.pptx

学習指導要領

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

Microsoft PowerPoint - IntroAlgDs-05-4.ppt

Transcription:

5.2. 流れ図 105 5.2 流れ図 流れ図 (flow chart) はアルゴリズムを図式化したもので コンピュータの手順となるデータの流れ 判定 実行の推移などを流れ図記号 4 を用いて描きます 流れ図のようにアルゴリズムを図式化することで 問題の定義や分析または解法がより明確となり プログラムの設計や作成に非常に役立ちます また 第三者にも的確にアルゴリズムを伝えることができます それでは 流れ図について詳しく見ていきましょう 主な流れ図記号には表 5.1 のような記号があり これらの記号をアルゴリズムの流れに従って実線で繋いで流れ図を描きます ( 流れの方向性を明示する場合は矢印で記述します ) 記号記号名記号の説明 (process) 定義済み (predefined process) 準備 (preparation) 判断 (decision) ループ端 (loop limit) 上図 : ループ始端下図 : ループ終端 結合子 (connector) 端子 (terminator) 任意の種類のを表します 特に データの値 形 位置を変えるような定義された演算を表す場合に使用されます サブルーチン (?? 節参照 ) やモジュールなど 別の場所で定義された 1 つ以上の演算または命令群からなるを表します 変数の初期設定など その後の動作に影響を与えるための命令または命令群の修飾を表します 1 つの入力と幾つかの択一的な出口の中で記号中のの評価に従って唯一の出口を選ぶ判断を表します 1 組のループ始端とループ終端の記号中には同じループ名が入り 記号中の終了を満たすまでループ始端からループ終端に挟まれた区間のの繰り返しを表します ( 図 5.3 の6 参照 ) ただし 1 組のループが別のループを含むような場合は必ず入れ子構造になります 一連の流れ図を分割して描いた場合など 他の部分へ継続していることを表します 流れ図の結合を表します 流れ図の始まりと終わりを表します なお 始まりには 開始 (start) 終わりには 終了 (end) と記号中に表記します 表 5.1: 流れ図記号 4 このテキストでは JIS X 0121 (1986 年 ) 情報用流れ図記号を用います この流れ図記号は情報技術者試験で使用されています

106 第 5 章プログラミングの基礎また 流れ図はアルゴリズムに従って基本的に上から下に左から右に記述します 具体例として 前節の平方根を求めるアルゴリズムと最大公約数を求めるアルゴリズムの流れ図を挙げておきます 開始 s 0 n 0 1 s に 0 を代入する 2 n に 0 を代入する n n +1 3 n に n +1を代入する (n に 1 を足す ) m 2 n 1 4 m に 2 n 1 を代入する s s + m 5 s に s + m を代入する (s に m を足す ) s<50000 6 s が 50000 以上になるまで3, 4, 5を繰り返す n n 1 7 n に n 1 を代入する (n から 1 を引く ) n n 100 8 n を 100 で割る 終了 図 5.1: 5 の平方根を小数第 2 位まで求める流れ図 注意 と準備の流れ図記号の中で使用されている ( 矢印 ) は 右側の値 ( 右辺 ) を左側の変数 ( 左辺 ) に代入することを表します また 判断の流れ図記号の中で使用されている式は命題で それぞれ A = B 変数 A と変数 B が等しい, A 6= B 変数 A と変数 B が異なる, A<B 変数 A が変数 B より小さい, A>B 変数 A が変数 B より大きい, A B 変数 A が変数 B より小さいか等しい, A B 変数 A が変数 B より大きいか等しい を表し 真であれば 偽であれば の方向にを進めます

5.2. 流れ図 107 開始 x 1234 y 56 1 x に 1234 を代入する 2 y に 56 を代入する ( ただし x>y>0) y 6= 0 3 y =0 になるまで 4, 5, 6 を繰り返す t x 4 t に x を代入する (t に x の値を代入する ) x y 5 x に y を代入する (x に y の値を代入する ) y t mod x 6 y に t を x で割った余りを代入する 終了 図 5.2: 正の整数 x, y の最大公約数を求める流れ図 現在 アルゴリズム ( またはプログラム ) の設計において主流となっているのは構造化プログラミング (structured programming) と呼ばれる方法です 構造化プログラミングが主流となる前は 特に制限がなかったため各設計者が独自にアルゴリズムの設計を行っており 第三者にも理解し辛いものでした 5 このような背景と人間は誤解や過ちを起こしやすいという観点から 1966 年に C. Bohm と G. Jacopini によって構造化定理という理論が発表されました この理論は 1 つの入り口と 1 つの出口を持つように設計されていれば 三つの基本的な論理構造 ( 図 5.3 の1 順次, 2 選択, 4 繰り返し ( 前判定 )) の組み合わせで どんなアルゴリズムの理論も記述できる というものです 構造化プログラミングはこの理論を取り入れたもので 現在使用されている多くのプログラム言語もこの理論に従っています また 構造化プログラミングに関していえば 前記の流れ図記号を用いて流れ図を記述しても構いませんが 階層化された構造を さらに分かりやすく記述することのできる構造化チャートもあります 現在使用されている代表的な構造化チャートには NS チャート (Nassi Schneiderman chart) を改良した PSD (Program Structure Diagrams) や 日立製作所から発表された PAD (Problem Analysis Diagrams) などがあります 5 特に問題とされたのが goto 文の多用によるプログラムの複雑化です なお このような状態をスパゲティが複雑に絡み合っている様子に比喩されてスパゲティ構造と呼ばれています

108 第 5 章プログラミングの基礎 1 順次 ; 連続 ; 連接 2 選択 3 選択 ( 単純 ) [if then else] [if then] 4 繰り返し ( 前判定 ) 5 繰り返し ( 後判定 ) 6 繰り返し ( 単純 ) [do while] [do until] [for] ループ名終了 ループ名 7 多岐選択 [case] 図 5.3: 構造化プログラミングの論理構造 問題 1 5.1.2 節の後半部分を参考に 効率よく平方根の値を求めるアルゴリズムの流れ図を描きなさい 問題 2 最小公倍数を求めるアルゴリズムの流れ図を描きなさい 問題 3 問題 4 問題 5 ハノイの塔のアルゴリズムの流れ図を描きなさい 図 5.1 の流れ図 ( 後判定 ) を繰り返し ( 前判定 ) を用いた流れ図に描き直しなさい 図 5.2 の流れ図 ( 前判定 ) を繰り返し ( 後判定 ) を用いた流れ図に描き直しなさい

5.3. 計算量 109 5.3 計算量 世の中には 以下のように解ける問題と解けない問題が存在します 解ける問題 : 問題を解決するためのアルゴリズムが存在する 解けない問題 : 問題を解決するためのアルゴリズムが存在しない ( 見つかっていない ) なお 解ける問題の中には その答えを見出すのが易しいものから困難なものまで様々です 困難なものとしては 無理数の真の数値 (π =3.14, e =2.71, 2=1.41 など ) 組み合わせ数が非常に多い組み合わせ問題 ( ハノイの塔, 巡回セールスマンなど ) 非常に大きな 2 つの素数の積の因数分解 ( 公開鍵暗号の安全性を保障 ) などがあります これらの問題は 人間であろうがコンピュータであろうがその答えを導くのは非常に困難です ( 現時点では無理 ) しかしながら コンピュータが大量のデータを高速かつ正確にできるという利点を生かして ある程度までの答えを見出すことが有意義で意味ある場合も数多く存在します 情報科学の分野では 問題を解決するためのアルゴリズムをコンピュータでさせようとするとき そのに必要な資源 ( 計算時間, 記憶容量など ) を計算量 (complexity) という抽象的な尺度で評価します 計算量には アルゴリズムの実行にどれだけ時間がかかるかという尺度に基づいて評価する時間計算量 (time complexity) と アルゴリズムの実行にどれだけ記憶領域 ( メモリ ) が必要かという尺度に基づいて評価する領域計算量 (space complexity) があります 通常は 単に計算量といえば時間計算量のことを指し に必要な計算時間が評価の中心となります 6 また 計算量は最悪の入力データを想定して評価します これを最大時間計算量 (worst case time complexity) と呼びます これに対して 全ての入力データに対する計算量の平均値を平均時間計算量 (average case time complexity) と呼びます 一般には 計算量といえば最大時間計算量のことを指しますが 入力データの良し悪しによって計算量の評価が左右されるような場合は平均時間計算量が重要な意味を持ちます 計算量を求めるには n 個の入力データに対してアルゴリズムのに必要な時間を算出します より詳しく述べれば アルゴリズムの中で実行される 比較演算 四則演算 などの各演算の回数をカウントし 各演算を 1 回実行するのに必要な時間を掛け その総和を求めます 例えば 1 個の入力データのに 0.001 秒かかる演算が 1000 回必要なとき n 個のデータをするには 0.001 1000 n (= n) 秒の時間が必要となります もう 1 つの例として 6 領域計算量も時間計算量と同様の評価ができます ただし 計算時間が増えることに比べれば コンピュータの記憶領域は比較的小さく限りがあるため 大量にデータを扱う場合は記憶領域を節約するようなアルゴリズムが好まれます ( または 記憶領域をなるべく節約するようにプログラムを設計します ) これを時間と空間のトレードオフといい 領域計算量は時間計算量に転換されて評価されます

110 第 5 章プログラミングの基礎 1 個の入力データのに 0.001 秒かかる演算が 10000 回と 0.005 秒かかる演算が 200 n 回必要なとき n 個のデータをするには 0.001 10000 n +0.005 200 n n (= n 2 +10n) 秒の時間が必要となります さらに 計算量にはオーダ記法という n の値が十分大きなところで計算量を漸近的に評価する手段があります オーダ記法を用いると 最初の例は O(n), 2 つ目の例は O(n 2 ) と表記することができます (O はオーダ (Order) の頭文字 ) ただし 2 つ目の例が O(n 2 ) と表記されているのは n が非常に大きくなると n 2 に比べて 10 n は非常に小さくなり無視されるためです ( これを計算量の第 1 次近似といいます ) 最後に アルゴリズムの計算量による評価について述べておきます 大きく分けてアルゴリズムには O(n), O(n log n), O(n 2 ), O(n 3 ) のように n の多項式のオーダとなる多項式時間アルゴリズム (polymial time algorithm) と O(2 n ), O(3 n ), O(n!), O(n n ) のように n の指数関数のオーダとなる指数時間アルゴリズム (exponential time algorithm) があります 前者は n が多少大きくなっても計算量がそれほど大きくならないのに対して 後者は n が少し増えただけで爆発的に計算量が大きくなります ( 表 5.2; 1 秒間に 10 9 回 ( クロック数が 1GHz) の演算能力を持つコンピュータを使用したものとして算出 ) 従って 多項式時間アルゴリズムはコンピュータに適したアルゴリズムといえ 指数時間アルゴリズムはコンピュータには適さないといえます 演算回数 ( 回 ) 10 18 O(n n ) O(n!) O(3 n ) O(2 n ) 1 年 10 15 1 月 1 日 10 12 1 時間 1 分 10 9 1 秒 10 6 O(n 3 ) 10 3 O(n 2 ) O(n log n) O(n) 10 20 30 40 50 60 データ数 ( 個 ) 表 5.2: 計算量による評価