第2章 問題解決におけるコンピュータの活用方法
我々は、知的な営みの中でさまざまな問題に出会ってそれを解決しようとしている。創造活動には新たなアイデアを生み出すプロセスがあり、問題解決には分析と改善のプロセスがある。人間はこのプロセスにおいて、背景にある情報や既存の断片的な知識を関連づけながら問題を解決しようとしている。「問題」の内容は多様で、解析的に解ける問題もあれば解けない問題もある、解が一つの場合もあれば複数の場合もある。
本章では、現実に存在する複雑な問題を抽象化し、細分化することによって問題を明確にし、これを解決するためにコンピュータをどのように活用できるかについて学習する。ここに含まれる主な内容は、問題の発見(問題の把握、観察と情報収集)、問題の分析(文章情報の整理、モデル化とアルゴリズム)、問題の抽出(目標設定、モデルの作成)、問題の解決(シミュレーション、待ち行列、表の活用、数値的モデル、数値計算)である。
抽象化によって問題の本質を明確にするのがモデル化、モデルをコンピュータに教えるために、問題を解決する手順を示すのがアルゴリズムである。アルゴリズムがわかれば、プログラムを作成したり、提供されているアプリケーションソフトウェアを活用して、具体的な問題の解を得ることができる。その後、得られた結果が目的のものであるかを評価する作業がさらに残っている。
評価はあらゆるデータの組み合わせについてどのくらいうまく機能しているかを調べる作業である。しかし、現実にはすべてのデータについてテストすることは不可能(無限の組み合わせが必要である)であるから、選択的なテストが行われる。
第1節 問題の発見
「問題解決」とは何か。数学の問題を解くこと? 社会科の問題を解くこと? それとも友達どうしの困った問題を解決すること? それとも…。
このように問題解決という言葉は非常にあいまいであり、その見方によっていろいろな解釈ができる。おそらく、「問題」を誰が発したのか、どのような場面で発せられたのかによって問題の解釈は異なるであろう。
情報処理における問題の発見は、現行の仕組みに潜んでいる問題を見つけ出すことである。我々は何か新しいことを取り入れようとするとき、あるいは不都合な現状を改善しようとするときに、その原因となる問題を見つけだそうとしている。同時に、どうしたら解決できるのかを考えている。ときには単純なモデル[1]で表現することが可能であるが、それはごく稀で、多くの問題はそれ程単純ではない。
そこで複雑な問題を解決するときには、問題状況をよく分析して、幾つかの問題に分割する方法が考えられている。個々に得られた解を統合して、複雑な問題を解決する一連の案を示そうということである。ここでは、身近な問題の分析から始めよう。
1 問題の把握
問題のある状況を調査しいろいろな側面から考察することによって、仕組の中に潜んでいる問題を発見することができる。問題を把握するための行為や行動には、
仕組や現象の観察
状況が発している情報の収集
収集した情報の整理
得られたデータの分析
問題の抽出
という過程がある。一般に処理やその過程をプロセスという。
何故このようなプロセスが必要なのか。
我々は日常、あいまいな言葉で状況を語り、あいまいな表現で質問を発している。たとえば、「明日の天気はどうかしら」と尋ねるとしよう。あしたの行動を知っている仲間どうしの会話ならば、状況判断をして容易に答えることができよう。また、挨拶代わりの会話ならば、いい加減な応答でもよいであろう。しかし、それほど親しくない間で適切な答えを期待している場合には、この問いかけに対して答えることは難しいであろう。それは、場所と時間が限定された質問ではないからである。
一般に情報処理の問題解決には、たくさんの情報とそれを使って解決するプロセスがある。たとえば、明日の天気を予報するにしてもたくさんのデータとそれを処理する解析方法や手順が使われている。しかし、コンピュータを利用する情報処理は、科学的な法則に拘束される訳ではないから、行き過ぎた人為的な処理が行われないように工夫し、いろいろな条件を付けてあいまい性を排除している。
問題の解決にあたっては、新しい方法の発明も必要であるが、既存の方法を応用した解決方法も考えれられる。その場合でも具体的な状況に既存の方法をどのように当てはめるかを考える必要がある。
――――― 演習問題2−1 ―――――――――
日常会話の中で、あいまいな表現をしている例をあげなさい。また、それを第三者にわかるように説明するとしたら、どのような表現になるか書き直してみよう。
――――――――――――――――――――――
2 観察と情報収集
問題の把握は仕組みや現象を観察することから始める。このとき、問題状況が何を発しているのかに注目し、意識的に情報を収集することも必要である。つまり、問題の把握は現象の調査や分析が前提となっている。よく使われる調査方法として次の5項目をあげておこう。
�ヾ愀犬△蠅修Δ癖幻イ篁駑舛鯆敢困垢�
資料調査という方法で、既存の資料を使って情報を収集する。活用できる資料としては、書籍、雑誌、新聞などマスメディアが公開しているもの、インターネットなどで探索できる電子メディア、国や都道府県など公共機関が所蔵するものなどがある。
�⊂�況をよく知っている人の意見を聞く
インタビューやアンケートとよばれる方法である。インタビューでは関係者に会って話を聞き、その内容を記述するが、アンケートでは質問事項について回答者に記述してもらう。したがってアンケートでは、必ずしも相手に会うとは限らない。
�4愀玄圓�意見交換をする
ブレーンストーミングやヒアリングという方法がある。ブレーンストーミングは、関係者が問題について自由に意見を述べ合う方法であり、ヒアリングは担当者が状況に詳しい人を呼んで尋問する方法である。
�じ従譴帽圓辰憧兒,垢�
問題のある場所に出向いて状況を観察し記録する。これによって、さまざまなデータを取得できる。時間的な状況の変化がある場合には何回も現地で観察することがある。
�ヌ簑蠅隆超�に入って試してみる
問題があるとされる仕組みに入って関係者の行動を観察し、そこで得られた知見をもとに仕組みに影響を与える介入をして関係者の行為や行動の変化を調査する。�い任蓮⊂�況に影響を与えないように外部から観察していたのに対し、この方法では問題状況に入って干渉するという違いがある。人間行動を分析するのに有効な方法である。
調査はこれらの方法のうちどれか一つを選んで行なってもよいし複数の方法を組み合わせてもよい。利用する方法が多いほど、現象を多面的に捉えることができ、問題解決における視点も広がる。
――――― 演習問題2−2 ――――――――
�,�ら�イ諒�法は、どのような問題のときに役立つと考えられるか、身近な具体例をあげなさい。また、何故その方法が使えるかを説明しなさい。
――――――――――――――――――――――
――――― 演習問題2−3 ――――――――
交通渋滞箇所としていつも話題になる交差点がある。その原因を調べるとしたら、どの方法で調査するのが最適であるか。また、その理由は何か。
――――――――――――――――――――――
第2節 問題の分析
情報処理における問題の解決方法は一つではない。人間は勝手なルールを与えて問題をますます複雑にしてしまうこともある。したがって、調査で得られた情報の本質を理解するために、状況を整理しておくことが必要である。
1 文章情報を使った状況の整理
調査で得られた情報を簡潔な言葉でカードに記入する。キーワードを使って関係がありそうなカードを取りまとめるという手順を繰返して、状況を分析する方法がある。新しい発想を生み出す手法で、開発者の川喜田二郎の頭文字をつけてKJ法[2]と呼んでいる。
文章だけではイメージが湧かないという場合に、さらに図を使用すると直観的に理解できることが多い。問題の背景や概略を示すさまざまな略図の他、データどうしの関係を示す実体関連図[3]、実体[4]とプロセス[5]の関係を示すデータフロー図[6]などがよく使われる。
ここでは、陸上競技大会の開催という状況設定を通して、いかなる問題があるか、その状況を分析することにしよう。
[事例]陸上競技大会を開催することになった。企画や運営をできるだけ小人数で効率よく行なうという目標が掲げられた。実行時に起こりそうな問題を調べて、事前に解決方法を考えることにした(以後、この問題は度々引用されるので「催し企画問題」と名づけることにする)。
早速催し企画問題に取り組むことになり準備委員会が開かれた。どのような問題が存在するかというテーマで話し合ったところ以下のような発言があった。括弧内は整理のためにつけたキーワードであり、[英字]は後で参照するために付記した記号である。
発言内容
・ 会費は幾らにするの。(収入、人)[a]
・ 会計係が必要でしょう。(人、作業)[b]
・ まず、予算を立てなければならないネ。(収入、支出、人、物)[c]
・ どんな経費があるのだろう。(支出、人、物、作業)[d]
・ 大会当日は手伝い要員が必要ですネ。アルバイト代はいくらですか。(人、支出)[e]
・ アルバイトの人数も決めなければいけないネ。(人、作業、支出)[f]
・ 大会の案内状を発送しなければならない。(作業、人、支出)[g]
・ 名簿はあるかしら。(作業、人)[h]
・ 参加校の名簿は去年のものがあるけれど、選手や関係者の名簿を新たに作成する必要がありますネ。(作業、人)[i]
・ 会場の略図も必要だョ。(作業)[j]
・ 会場までの道順やバスのダイヤもあった方がいいネ。(作業)[k]
・ グラウンドや会場の整備もしなければいけないネ。(人、作業)[l]
・ 大会が終了したら、記録その他の報告書を作成することも必要ですネ。(作業、後日)[m]
・ 競技記録の記述方式を決めておくと整理が便利になるネ。(作業)[n]
これらの発言を、キーワードを使って整理すると、経費に関する問題、運営上の問題、報告書作成の問題に分けることができる。話し合いで列挙された情報をまとめるときに、KJ法をつかうことができる[7]。
今回は、「収入」と「支出」をキーワードとして選ばれた項目a,c,d,e,f,gを経営に関する問題としてまとめている。また、「作業」をキーワードとして選ばれた項目b,d,f,g,h,i,j,k,l,m,nを運営上の問題とした。このうち、「後日」というキーワードがある項目mを報告書作成の問題として、別グループとした。
2 コンピュータの利用
われわれは、さまざまなところでコンピュータを利用した演算処理をしている。利用者からみたコンピュータの利用目的には、たとえば次のようなものがある。
・演算処理
・情報の蓄積と検索
・シミュレーション
・事務処理
・文書処理
・コミュニケーション支援
・機器の制御
演算処理には、いわゆる数値の四則演算を始めとして、科学技術計算、大量のデータを扱う統計計算、あるいは論理演算、文字列処理、画像処理など複雑な処理が含まれている。情報の蓄積と検索は、大量の文献情報や事実情報などを蓄積しておいて必要なときに情報を取り出す処理で、データベースなどが代表的なものである。
シミュレーションには、理論の実証、仮説の検証、あるいは設計や制御のために行う模擬実験などがある。事務処理には、販売や在庫の管理、給与計算、原価計算などの業務を支援するさまざまな処理が含まれる。文書処理では、文書の作成や清書、機械翻訳などがある。
コミュニケーション支援には、電子メールやファイルを用いたメッセージの交換や、マルチメディアを使ったプレゼンテーションなどがある。また、機器制御は航空機の自動運転、ロボットによる製造工程の制御、新幹線の運行管理、エレベータの制御などがある。
このように活用されているコンピュータは他の仕組みの中に組み込まれたり、単体で使用されたり、その利用形態はいろいろである。今日では、通信系と融合してネットワーク環境で利用されるケースが多い。
問題の分析や解決では、いくつかの処理を組み合わせて、より速く、より広く、より確かな処理が要求される。そのために、便利なソフトウェアも多数提供されている。しかし、現実の問題は非常に複雑なため、コンピュータを活用するためには特別の技術や知識が必要とされる。また、場合によっては、自らプログラムを開発しなければならないであろう。
3 数値データの処理
我々はいろいろな場面で数値データを入手し、それを使って演算を行っている。あるときは大量のデータを処理し、またあるときはわずかなデータを使って複雑な演算を長時間にわたって処理する。
入手した数値データからは何も見えなくても、それらのデータを使って加工するといろいろな現象や状況が見えてくる。
データ量が少なく、簡単な計算の場合には人手で処理することも可能であるが、人間はミスを犯しやすいし計算も遅い。繰返し処理はコンピュータの方がはるかに優れている。
コンピュータに仕事をさせるためにはプログラミングが必要である。プログラミングではコンピュータによる自動化が実現できる。プログラミングとは、問題の抽象モデルを作成しコンピュータにさせる手続き(アルゴリズム[8]という)を考え、コンピュータが理解できる言語で表現することである。
人間が処理する仕事を細かく記述していくと、いくつかの演算に分解できる。これらの演算の種類を基本演算命令と呼んでいる。つまり、基本演算命令を組み合わせてコンピュータに記憶させれば、人間の代わりに演算処理を行ってくれることになる。
・プログラミングが意味する内容には、
・解決すべき問題のモデル化
・アルゴリズムの作成
・プログラミング言語によるプログラム作成
・プログラムの動作確認
が含まれる。
問題の分析で特に重要な工程はモデル化とアルゴリズムの作成である。
4 問題のモデル化とアルゴリズム
コンピュータを用いて問題を解決する場合には、その問題をモデル化し、問題の意味を明確にすることが重要であった。しかし、問題のモデルは一つに限られるわけではない。モデル化に必要なことを3つあげるならば、
・与えられたデータをできるだけ正確に再現できること
・できる限り簡単であること
・モデルに使われた以外のデータにも汎用的に追従できること
があろう。
モデル化の如何によって、その後のプログラミングの工程に大きな影響を与えるため、モデル化は非常に重要な作業である。
[モデル化の例]
1736年にオイラーによって与えられた「ケーニヒスベルクの橋の問題」はあまりにも有名であるから説明の必要はないかもしれない。それは、図2−1に描くような東西に流れる川があり、その中州には2つの島EとWがある。島の間に橋があり、また南岸と北岸と島との間にも橋がかかっている。この橋の全てを一回ずつ渡って出発地点に戻ることができるかという問題である。

図2−1 ケーニヒスベルクの橋
図2−2 ケーニヒスベルクの橋のグラフ
結論を先に述べるならば、ケーニヒスベルクの橋の問題の答は「できない」である。この問題を簡略化すると図2−2で表わせる。このモデルは、ある点から出発して一筆書きで元に戻ることができるかと言う問題に帰着できる。N,W,S,Eが陸に、陸を結ぶ線が橋に対応する。
このように現実の問題が抽象化されてモデルを描くことができる。数学で与えられている問題は抽象化されたものが多いが、それらの多くは現実の複雑な問題をモデル化したものと考えてよい。
問題の意味が明確になると、それを解決するアルゴリズムを作成することができる。アルゴリズムとは、特定の問題をコンピュータを用いて解決するために、入力データ、演算処理手続き、出力結果を表現したものである。一般に定義域(入力)と値域(出力)が定められており、入力は0個以上、出力は1個以上が与えられている。アルゴリズムの表現記述はあいまいでなく一意的に解決できるものでなければならないし、記述は有限でなければならない。また、実行時間も有限でなければならない。このことを整理するとアルゴリズムの性質として次の4点をあげることができる。
・定義域と値域の関数性
・解釈の一意性
・記述の有限性
・時間の有限性
一般に、よいアルゴリズムとは実行時間と占有記憶量の両面で効率のよいものとされている。
よいアルゴリズムを考えることは難しいが、既存のよいアルゴリズムはたくさんある。既存のアルゴリズム知り理解しておけば、現実の問題に当てはめることができる。
アプリケーションソフトウェアと呼ばれるプログラムには、既存のアルゴリズムを使って、データやパラメータを入れ替えるだけで問題を解決できるようにしたものが多い。たとえば、統計処理やグラフ作成などの機能をもつ統計ソフトウェアや表作成ソフトウェアなどはその類である。
今日では、多くのアプリケーションソフトウェアが提供されていて、利用者自らプログラミングをしなくても、コンピュータを活用して問題を解決できる[9]。
特に、数値処理の問題は背後の環境に依存しないため、良く使われるアルゴリズムはライブラリーソフトウェアを予め用意しておくことが多い。こうしておけば、プログラムを書く場合に呼出すだけで利用できる。たとえば、決まりきった繰返しや判断、数式の計算処理などの部品として利用している。
[アルゴリズムの例題]ある植物は株分けして2年経つと、以後毎年株を分割できるという。2年経った株を毎年株分けするならば、この植物の株はどのように増えるか。

図2−3 株の増え方
図中の△は株分けできない子、○は株分けできる親を示している。株が図のように増えるとき、このアルゴリズムは次のように展開できる。
この植物が、n年目にtk株になったとすると、株数はt1=1、t2=1、t3=2、t4=3、t5=5、t6=8、・ ・の数列で表すことができる。したがって、この数列は、
t1=1
t2=1
tk=tk−1+tk−2
の条件で定義される。ここで、添字のkは3からnまで変化する[10]。
N年目の株数を求める流れ図は次のようになる。

図2−4 株分け問題の流れ図
――――― 演習問題2−4 ――――――――
フィボナッチ数列の各項を求めるアルゴリズムを示し、10年後の株数を求めなさい。
――――――――――――――――――――――

図2−5 流れ図の主な記号(JIS X0121の抜粋)
第3節 問題の抽出
1 目標の設定
一般に、問題を解決する場合には、何をどこまで解決するかという具体的な目標値を設定しなければならない。第2節に示した「催し企画問題」では、具体的にどのような問題が設定できるのであろうか。発言事項をまとめて新たに解決しなければならない問題をパターンごとに整理すると、経費に関する問題が二つ、運営に関する問題が六つ、報告書に関する問題が一つあった。これらの問題の要点は以下のように記述できる。
|
[経費の問題1]予算を立てる参考にするために、最近5年間の参加費、補助金、その他のデータを収集して表を作成する。<例題2−3参照> |
|
[経費の問題2]それぞれの単価表を利用して、以下の5項目を算定し必要経費を計算しなければならない。<例題2−5参照> (1)人件費:参加者50人につき一人の手伝い要員がつく。 (2)会場費:グラウンドの使用料(固定)と控え室の使用料(参 加者数をみて決定)を計上する。 (3)郵送費 (4)印刷費:印刷物によって配布先が異なる問題がある。 (5)その他:機材の借用費、運搬費、ゼッケンなど |
|
[運営上の問題1]競技大会用の案内の中に、会場の略図などを入れる。<例題2−6参照> |
|
[運営上の問題2]種類によって配布方法が異なる資料を効率よく配布する方法を考える。<例題2−4参照> |
|
[運営上の問題3]過去のデータを参照して各競技に必要な時間を設定する。<例題2−1参照> |
|
[運営上の問題4]受付が混乱しないようにするために、大会前日の9時から17時の間に行うものとして、受付窓口の数と作業分担を決める。 |
|
[運営上の問題5]参加者名簿を作成する。<演習問題2−11参照> |
|
[運営上の問題6]第一回大会から、前回までの大会の記録を整理し、各競技の大会記録表を作成する。これを、新記録の情報を速やかに発表するために役立たせる。また、競技成績一覧を作成する。<例題2−2参照> |
|
[報告書問題1]収支決算書を作成する。<演習問題2−10参照> |
2 モデルの作成
「催し企画問題」のように、いろいろな問題を含んでいる場合には、全体の仕組みを図で示すと分かり易くなる。ここでは、大会関係者間の情報の流れ(図2−6)や、作成するデータの相互関連(図2−7)を示してみよう。図2−6の 楕円は関係者、矢印は情報の流れをそれぞれ示している。図2−7の枠はデータのモデルである。線はデータどうしが直接関係していることを示す。
会計情報には、参加費、補助金などの入金データのほか、使用料、人件費、印刷費、郵送料などの基本データ表が含まれている。歴代大会の資料は、第一回大会からの報告書の綴りである。運営計画情報には、大会当日の競技進行プログラム、担当者一覧、競技記録記入表、要員配置表、会場整備図面などが含まれる。また、枠についている*印は長期保存の資料であり、無印は本大会期間のみ保管するデータである。
参加者名簿は、個人コード、参加者氏名、所属学校名、参加競技番号で構成され、他の名簿は、氏名、所属、住所、電話番号で構成される。



図2−8は、大会関係者と資料の活用関係を示すデータフロー図である。図中の四角はデータ実体を示している。中線の入った枠は、線の上側にプロセス番号と担当部署、下側にはプロセスを記している。プロセスから出ている矢印は、処理によって得られたデータを格納していることを示し、プロセスに入る矢印はデータを利用することを意味している。

例えば、プロセス6の実行委員は、競技進行プログラムと参加者名簿の情報を利用して競技を進行し、成績を記録一覧に記述している。参加者名簿というデータ実体は、プロセス1で本部によって作成され、プロセス2、4、5、6で利用されることを意味している。入力矢印のないデータ実体は、既に存在している実体であることを示している。
――――― 演習問題2−5 ―――――――
学校新聞を作成するときの作業分担を考えると、どのような係が必要になるか。また、それらの係の間で情報はどのように流れるかを図示しなさい。
また、新聞作成で収集する情報源(データ実体)と情報の活用プロセスの関係をデーターフロー図で示しなさい。
―――――――――――――――――――――
3 問題解決の環境
コンピュータを使って問題を解決するには、いくつかの環境を整備する必要がある。プログラムを開発するならば、プログラミング言語を用意しなければならない。プログラムを編集するにはテキストエディタも必要である。その他、作成したプログラムの誤りを探したり、プログラムのテストや管理のためのソフトウェアも使用する。
問題のモデル化がきちんとできれば、自分でプログラムを開発しなくても、既存のツールを使って多くの処理を行うことが可能である。たとえば、ワードプロセッサ、描画ツール、表計算ツール、プレゼンテーションツール、簡易データベース、電子メール、ブラウザなどがよく使われている。
第4節 問題解決
コンピュータを活用する場合としない場合の計算上の主な違いは、次の3点であろう。
1)手作業の場合には入力変数ごとに計算式を展開するのに対して、コンピュータ処理では式を一回記述するだけで異なる入力データに対応した結果を得ることができる。
2)手作業では途中で0になった項は以下省略して計算するが、コンピュータは常に全ての項の計算をする。
3)手作業では分数表示を使用できるが、コンピュータでは小数点表示となる。
このように、コンピュータは与えられた手順にしたがって忠実に同じ処理を繰返している。したがって、良いモデルと良いアルゴリズムをコンピュータに与えれば効率のよい処理ができるが、モデルやアルゴリズムの与え方によっては正しい結果が得られないこともある。
1 シミュレーションと確率モデル
現象に直接触れることができない実験はコンピュータ上でシミュレーションをする。たとえば、東西と南北に走る交差点に信号があって、一定の間隔で点滅しているとする。この交差点に行かないで自動車の流れを最適にするような信号の点滅間隔を決めることができるであろうか。
シミュレーションでは、コンピュータ上に、現場の信号の点滅と殆ど同じ状況を作り出すことができる。シミュレーションでは、道路、交差点、信号機、自動車などのような対象物を、確率変数[11]を利用してモデル化し、これらのモデルを操作する。実際に確率変数が得られなくても、乱数やさいころなどを使って確率変数の近似値を求めることができる。乱数とは規則性がなくでたらめに並んでいる数字の列である。それは、コンピュータ上で擬似的に発生させることもできる。
2 表の活用
計測データ量が多いときには、表を使うと整理しやすい。しかし、行や列の数が多くなると手作業では手におえない。ここでは、コンピュータの表作成ソフトウェアを使った問題解決の方法を考えよう。
一般に、表作成ソフトウェアは次のような特長をもっている。
・データの複写、移動、挿入、削除などの多様な加工ができる。
・いろいろな関数が用意されているために、日常行なうほとんどの演算が処理できる。
・入力データにミスがあったとき、そのミスを訂正するだけで、関係するデータを自動的に修正処理する機能がある。
・式をコピーする機能を使うと、計算式を繰返し入力する必要がない。
・作成した表をワープロ文書等にそのまま貼り込むことができる。
これらは、ワークシート上で利用できる機能であるが、この他にもグラフ作成機能、データベース機能、マクロ機能などがある。
[例題2−1]運営上の問題3は、過去のデータを参照して各競技の必要時間を設定することであった。そこで、次のような表を順次作成しよう。
基本データの表を作成するために、大会番号、競技種目、開始時間、終了時間、参加選手数を資料から抽出して表2−1に入力する。演算機能を使って、開始時刻と終了時刻から競技所要時間を計算して表を完成させる。
表2−1 競技時間の元表
|
大 会番号 |
競 技 種 目 |
開始時刻 |
終了時刻 |
選 手 数 |
競技時間 |
||
|
時 |
分 |
時 |
分 |
||||
|
1 1 1 1 ・ 2 |
100m走 走幅跳 400m走 100m走 ・ ・ ・ ・ |
10 9 11 14 ・ |
00 00 30 10 ・ |
11 12 12 14 ・ |
20 00 10 30 |
70 15 20 16
|
80 180 40 20 |
表2−1で同じ競技を複数回に分けて行なっているものは合計時間を求め、競技種別ごとの競技所要時間表を作成する(表2−2)。
表2−2 競技種目別の競技時間
|
大会番号 |
選手合計数 |
競 技 種 目 名 |
||||
|
100m走 (男女) |
走り幅跳 (男) |
400m走 (男女) |
1500m走 (男) |
・ |
||
|
1 2 ・ |
122 145 |
100 100 |
180 200 |
40 45 |
20 30 |
|
選手合計数は大会に参加した実数であり、予選と決勝がある種目は予選数で計上する。
――――― 演習問題2−6 ――――――
表2−2の大会と競技所要時間の関係を表示するには何グラフが適切か。
――――――――――――――――――――
――――― 演習問題2−7 −―――――
表2−2を選手数の多い順に並べるとき、その手順を示しなさい。
――――――――――――――――――――
――――― 演習問題2−8 ―――――――
表2−2で競技種別あたりの競技所要時間の最大値と平均を求める手順を示しなさい。
―――――――――――――――――――――
[例題2−2]運営上の問題6は、第一回大会から、前回までの大会の記録を整理し、各競技の大会記録表を作成することであった。そこで、歴代大会の資料から、優勝者の記録を抽出し表を作成する。表2−3はフィールド競技を集めたものであり、表2−4はトラック競技を集めたものである。
表2−3および表2−4に基づいて、種目別記録一覧表を作成し、表2−5とする。
表2−3 種目別優勝者一覧(フィールド競技)
|
大会番号 |
競技種別 |
性別 |
優勝記録(m) |
優勝者氏名 |
優勝者所属 |
|
1 1 2 ・ ・ |
走り幅跳 三段跳 走り幅跳 |
男 男 男 |
7.48 15. 60 7.50 |
田中二郎 山口 元 鈴木太郎 |
A校 D校 B校 |
表2−4 種目別優勝者一覧(トラック競技)
|
大会 番号 |
競 技 種 別 |
性別 |
優勝記録 |
優勝者氏名 |
優勝者所属 |
|||
|
h |
m |
s |
|
|||||
|
1 1 1 ・ |
100m走 400m走 100m走 |
女 女 男 |
00 00 00
|
00 00 00 |
12 56 10 ・ |
05 02 52 |
佐藤花子 加藤良子 山田一郎 |
C校 A校 D校 |
表2−5 種目別大会別記録一覧
|
大会番号 |
競 技 種 目 |
||||
|
100m走 (女) s |
100m走 (男) s |
走り幅跳 (男) m |
400m走 (女) s |
三段跳 (男) m |
|
|
1 2 3 ・ |
12.05 12.03 12.02 |
10.52 10.49 10.51 |
7.48 7.50 7.53 |
56.02 55.58 55.50 |
15.60 15.65 15.61 |
――――― 演習問題2−9 ――――――――
表2−5から競技の種目ごとの記録を大小順に並べ替える手順を示しなさい。
――――――――――――――――――――――
表2−5から競技の種目ごとの大会記録一覧を作成し、今大会の記録とその優勝者を記入する欄を付加して表2−6を作成する。
表2−6 大会記録一覧表
|
競技種目 |
大会記録 |
単位 |
今大会の記録 |
優勝者氏名 |
|
100m走(男) 100m走(女) 400m走(男) 400m走(女) 走り幅跳(男) 三段跳(男) ・・ |
10.46 12.02 46.90 55.49 7.56 15.73 |
s s s m m |
|
|
[例題2−3]経費の問題1は、予算を立てる参考にするために、最近5年間の参加費、補助金、その他のデータを収集して、表を作成することである。その一例を表2−7に示す。
表2−7 最近5年間の経費一覧
|
大会番号 |
参加者 |
参加費 |
補助金 |
その他 |
支出合計 |
|
5 6 7 8 9 |
253 280 302 325 318 |
253,000 280,000 302,000 325,000 318,000 |
200,000 200,000 200,000 250,000 250,000 |
30,000 0 20,000 0 0 |
483,000 480,000 522,000 575,000 568,000 |
――――― 演習問題2−10 ―――――――
報告書問題1の収支決算のための表を作成しなさい。ただし、入金には、参加費、補助金、その他の欄を、出金には、人件費、会場費、印刷費、郵送費、その他の欄を設けるものとする。
――――――――――――――――――――――
――――― 演習問題2−11 ―――――――
運営上の問題5は参加者名簿を作成することであった。作業を効率よく行うために、この名簿には8けたの個人コード項目を付けることにした。その他の必要な項目を決めて、名簿一覧を設計しなさい。
――――――――――――――――――――――
3 数値的モデルとアルゴリズム
数値を扱う処理には判断や繰返しに必要ないろいろな条件を組み合わせた問題がある。ここでは、催し企画問題に含まれていたいくつかの問題を取りあげて数値データの扱い方を学習する。
[例題2−4]数値の桁抽出
運営上の問題2は、種類によって配布方法が異なる資料を効率よく配布する方法を考えることであった。名簿には個人コードが含まれていたので、これを使って分別する方法を考えることにしよう。
参加者の名簿が、
個人コード、参加者氏名、所属学校名、参加競技番号
のように構成されているとしよう。ただし、個人コードは、
受付番号(3けた)
学校コード(2けた)
性別コード(1けた)
年令(2けた)
からなる8けたの整数値であるとする。
![]()
![]()
![]()
この個人コードデータの学校別コード(4〜5桁)を抽出して同じコードをまとめると配布先をグループ化することができる。したがって、この問題は以下の桁抽出のモデルとして一般化できる。
<桁抽出のモデル>
これは、「n桁の整数の特定のj桁分を抽出する」という問題のモデルであり、特定の数桁を残し他を削除するアルゴリズムを考えることができる。
与えられた整数値をd、整数値の桁数をn、抽出する範囲をi桁目からj桁分とおき、抽出データrを求めるアルゴリズムを2通り示しておこう。
(1)上位桁を始めに削除する例
ステップ1:d÷10n−(i−1) の剰余をxとする(xにはi〜n桁目の数値が入る)
ステップ2:x÷10n−(i+j−1) の商を求めrとする。
(2)下位桁を始めに削除する例
ステップ1:d÷10n−(i+j−1) の商をxとする(xには1〜i+j−1桁目の数値が入る)
ステップ2:x÷10j の剰余を求めrとする。
――――― 演習問題2−12 ―――――――
例題2−1の名簿の個人コードから学校コードを抽出しなさい。
――――――――――――――――――――――
(ヒント:i=4、j=2を使う)
[例題2−5] 経費の見積
経費の問題2は、単価表を利用して、以下の5項目を積算して、予算を見積もることであった。
(1)人件費
(2)会場費
(3)郵送費
(4)印刷費
(5)その他:機材の借用費、運搬費、ゼッケンなど
ここでは、各項目ごとの計算アルゴリズムを考えることにしよう。
(1)人件費の計算
|
[問1]参加者50人につき一人の割合で手伝い要員をおき、参加者に端数がある場合には一人追加するものとする。手伝い要員の人件費を一人当たり8000円とすると、人件費はいくらになるか。参加者数を与えて計算しよう。 |
この問題は、nを参加者数、kをグループ人数、cを手伝い要員一人当たりの人件費とするとき、「データnとkを与えて、nをkづつのグループに分け、端数を別途1グループとして、グループ数gを求める。また、データcを与えてc×gを求める」というモデルで示すことができる。ここで、c×gは人件費の合計である。
<人件費を求めるアルゴリズム>
ステップ1:n,k,cを与える
ステップ2:n÷kの商をgとおく
ステップ3:n÷kの剰余をrとおく
ステップ4:rが0に等しくないならば、gに1を加算する
ステップ5:c×gを計算しfとする
ステップ6:gとfを出力する
結果は手伝い要員の人数gと人件費fの表示である。
(2)会場費の計算
この問題は、参加者数を与えて次の表を完成する問題と考えられる。 |
表2−8 使用料
|
部屋の 種類 |
収容 人数 |
部屋 の数 |
使用料単価(千円) |
予約数 |
使用料 (千円) |
|
100 |
100 |
3 |
18 |
|
|
|
60 |
60 |
5 |
12 |
|
|
|
30 |
30 |
5 |
7 |
|
|
|
グラウンド |
− |
1 |
50 |
1 |
50 |
|
合 計 |
|
− |
− |
− |
|
一般化するために、参加者数をx、部屋の種類をk、収容人数をni、空部屋の数をfi 、使用料の単価をpi、予約数をmi、使用料をsiとおいて、問題を解決する流れを図で示すことにしよう。このとき、添字のiは1,2,3,..,kと変化する。
(この問ではグラウンドがk番目の部屋に相当する)
<1枠のアルゴリズム>
ステップ1:c=0とおく
ステップ2:i=1とする
ステップ3:c+nifiをcに代入する
ステップ4:i+1をiに代入する
ステップ5:i≦kならば、ステップ3へ
ステップ6:終わり
<2枠のアルゴリズム>
ステップ1:i=1とする
ステップ2:miに0を代入する
ステップ3:siに0を代入する
ステップ4:i+1をiに代入する
ステップ5:i≦kならば、ステップ2へ
ステップ6:終わり
<3枠のアルゴリズム>
ステップ1:x、k、ni、fi、piを与える
ステップ2:i=1とし、xをyに代入する
ステップ3:y÷niの商をmiに代入する
ステップ4:y÷niの剰余をrに代入する
ステップ5:mi−fiをtに代入する
ステップ6:t>0ならば、fiをmiに代入し、ni×tをrに加算してステップ10へ
ステップ7:t=0ならばステップ10へ
ステップ8:i=kならばステップ12へ
ステップ9:r>ni+1 ならば、miに1を加算して使用料の合計計算へ
ステップ10:r=0ならば使用料の合計計算へ
ステップ11:i<kならば、iを1増やし、rをyに代入してステップ3へ
ステップ12:r>0ならばmiに1を加算して使用料の合計計算へ、r=0ならばそのまま使用料の合計計算へ

図2−9 問2の流れ図
<4枠のアルゴリズム>
ステップ1:i=1とする
ステップ2:fiをmiに代入する
ステップ3:i+1をiに代入する
ステップ4:i≦kならば、ステップ2へ
ステップ5:終わり
<5枠のアルゴリズム>
ステップ1:i=1とする
ステップ2:mi×piをsiに代入する
ステップ3:i+1をiに代入する
ステップ4:i≦kならば、ステップ2へ
ステップ5:SUM=0とする
ステップ6:i=1とする
ステップ7:SUM+siをSUMに代入する
ステップ8:i+1をiに代入する
ステップ9:i<k+1ならば、ステップ7へ
ステップ10:結果を表示して終了
(3)郵送費の計算
――――― 演習問題 2−13 ―――――――
学校あたり一部づつ配布する資料が250g以下、個人ごとに配布する資料が一部25g以下であるとする。これらの資料を一括して学校に郵送することにすると、通信費の上限はいくらになるか。ただし参加校は30校以内で、一校あたりの参加者は最大15名とする。
|
(解)この答えは簡単に求めることができる。 25g×15+250g=625gで、これは1kg以内であるから、表より一校あたりの最大郵送料は700円である。よって、通信費の上限は、 700円×30=21000円 となる。 表2−9を使ってこの料金を計算するアルゴリズムを考えなさい。 |
表2−9 郵便料金表
|
形状 |
重さ |
料金 |
|
定型 |
25gまで 50gまで |
80円 90円 |
|
非定型 |
50gまで 100gまで 250gまで 500gまで 1kgまで 2kgまで 3kgまで 4kgまで |
130円 190円 270円 390円 700円 950円 1150円 1350円 |
(4)印刷費の計算
学校ごとの印刷物は一部500円、個人ごとの印刷物は一部30円の印刷費がかかる。
(5)その他
機材の借用費と運搬費等は合わせて5.5万円、ゼッケンは選手一人あたり1000円以内とする。ただし、選手数<参加者数である。
――――― 演習問題2−14 ―――――――
各学校の参加者数を与えて、通信費と印刷費を計算するモデルを考えて、アルゴリズムを示しなさい。
――――――――――――――――――――――
――――― 演習問題2−15 ―――――――
項目(1)から(5)までの経費を効率よく計算する手順を流れ図で示しなさい。
――――――――――――――――――――――
(ヒント:各項目ごとの処理をまとめ、共通するデータを一度だけ入力し、複数の項目で共用することを考えよう。)
4 数値計算と近似値
[例題2−6]運営上の問題1の案内の中にグラウンドのレイアウトを入れることになっていた。それは、図2−10に示すものである。

図2−10 グラウンドの略図
陸上競技場の400mトラックは直線部の幅が10m、長さが115m以上必要とされている。また、曲線部の幅も10mと定められている。
走り幅跳と三段跳については、助走路の長さ45m以上、幅1.6m以上、砂場の長さ8m以上、幅2.8m以上の条件がある。また、砂場と踏切板の距離は、走り幅跳が2m以上、三段跳が13m以上とされている。図2−10にこの条件を入れると、図2−11の図形になる。ここでトラックの曲線部に半径rの半円を使うとすると、
![]()
からrを求めることができる。したがって、
を3.1415とするとき直径の近似値は54.114である。

図2−11 400mトラックのレイアウト
[例題2−7]長さ120m、幅70mのグラウンドに200mのトラックと走り幅跳のフィールドを作るとするとどのようなレイアウトが可能だろうか。
――――― 演習問題2−16 ―――――――
(1)例題2−7のレイアウトを図2−12のように描けたとすると、wは何mになるか。
(2)図2−12のグラウンドに200m、400m、1500mの競技ができるように、スタートとゴール地点に白線を記入してコースを完成させなさい。
(3)200mトラックのドーナツ部分の面積を求めなさい。
――――――――――――――――――――――
ここでは、トラックの曲線部を求めるために円周率
を3.1415として計算した。コンピュータを使って計算を行なう場合、このような無限小数や桁数の大きい数は、ある桁で四捨五入や切り捨てなどの処理を行なって、その数の近似値で計算する。
一般に真の値をA、その近似値をdとするとき、E=|d−A|を近似値dの誤差という。
図2−12 200mトラックのレイアウト
[例題2−8]
(2.1)
であることが知られている。
右辺の数値計算によって、
の近似値を求めてみよう。

図2−13
の近似
を求めることは、図2−13のグラフの斜線部分の面積を求めることと同じである。
数値計算では、変数
の任意の関数
の区間 0
x
1における面積、すなわち
を求める方法として、いくつかの近似式が与えられている。図2−14は区間を
等分して長方形の面積の和を求める方法で、区分求積法という。近似式は
(2.2)
である。したがって π=
の近似値は、
(2.3)

から得られる。

図2−14 区分求積法による近似
図2−15 台形公式による近似
図2−15は
等分した点を直線で結び、台形の面積の和を求める方法で台形公式(2.5)とよばれる。
の区間 ![]()
x
bにおける任意の分点を、
=0,.,
(2.4)
とおくと
(2.5)
の関係が得られる。よって、
(2.6)
で近似される。
また、シンプソンの公式では、![]()
x
bを2
等分する。ここで、
(2.7)
とおけば、
(2.8)
から得られる。
――――― 演習問題2−17 ―――――――
=10として、台形公式とシンプソン公式を使って
の近似値を求めて誤差を比較しなさい。
――――――――――――――――――――――
[1] モデルは日本語では、「模型」、「原型」、「様式」、「見本」などと訳されていることからも分かるように、広い範囲で使われている。ここでは、現象を定量的に解決するために導かれる数式、あるいは、ものの見方、捉え方という意味で使われている。モデルを作ることをモデル化という。したがって、モデル化とは実世界の対象を何らかの形で抽象化し、表現することである。
[2] KJ法の手順は以下のステップに従う。
ステップ1:言語データを収集しカード化する
ステップ2:カードを眺めて似ているものをグループ化する
ステップ3:グループに表札を付ける
ステップ4:表札の束についてさらにステップ2と3を繰り返す(配置)
ステップ5:配置ごと貼りつけ枠で囲む(図解)
ステップ6:図解を見ながら文書化する
[3] 実体間の関係を表した図。
[4] 対象としている仕組みに関係する人や物などを抽象化して捉えたものを実体(entity)と呼ぶ。学校という仕組みを例とすると、学校そのものが実体ではなく、学校名、所在地、学級名などの属性を取り出してまとめたものを実体という。
[5] データの処理を意味する。
[6] データがどのように流れて処理されるかを示した図。
[7] 実は、KJ法のアプリケーションソフトを使うと、羅列した文を系統的に整理したり、どのような問題が存在するかなどを抽出するのに役立つ。
[8] 有限時間内に問題の解答が得られるような正確に記述した手続きである。
[9] このことをエンドユーザコンピューティング(EUC)という。
[10] この数列をフィボナッチ数列とよぶ。黄金比の問題で良く知られている。
[11] 変数Xがとりうる値a,bがあり、そのおのおのに対して、a<X≦bを満足する確率が定まるとき、Xを確率変数という。また、確率変数に対応する関係を確率分布という。