アルゴリズムの表現方法について

このQ&Aのポイント
  • 大学院の入学試験で出題されるアルゴリズムについての表現方法について分析します。
  • アルゴリズムを表現する方法は言葉や既存のプログラミング言語、擬似言語やフローチャートなどがありますが、試験で書くには一般性が薄いとされています。
  • アルゴリズムの表現方法については一般的な規約が存在せず、試験の条件に従った表現方法が求められます。
回答を見る
  • ベストアンサー

試験でのアルゴリズムの表現について

現在進学を考えている情報系の大学院の入学試験の問題に、 「・・・のアルゴリズムを設計せよ。」 「・・・のアルゴリズムを設計し、プログラムを書け。」 などといった形式での出題があります。(解答は紙上だと思います。) このような出題文があったとき、どのような言語によってアルゴリズムを表現することが適切または一般的なのでしょうか? 候補としては ・言葉で書く ・既存のプログラミング言語で書く ・擬似言語やフローなどで書く などが考えられますが、どれも試験で書くには一般性が薄いように思われますが、いかがでしょうか。 要は、 ・「このような規約に従って」という注釈を入れなくても一般的に従われる規約があるのか ・そのような規約はどこで定義されているのか この二つが知りたいのです。 ぜひご教授よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

単に「アルゴリズムを書け」という問題なら, 相手に通じさえすればどういう書き方でもいいと思う. 疑似言語で書くなりフローで書くなりするのが安全だとは思うけど. 一方「プログラムを書け」というのは問題として不適切だと思う. 少なくとも「用いるプログラム言語」は指定しておくべきだろう. そうでないとしたら受験生にとって不親切だし, 採点者にとっても不親切だ. まあ, 気になったら試験監督に聞いてやってください.

buenaarbol
質問者

補足

ご回答ありがとうございます。 私も「言語が指定されていないプログラムを書く」という点が引っかかっておりました。やはりこのような出題の場合、出題側の不備ではないかということで本番では試験監督の方に聞いてもいいのでしょうか。 ただ、擬似言語等で相手に分かりやすく書こうとしても、前提として使ってよい演算の定義があいまいではないでしょうか? 今ちょうど悩んでいるのが、「配列の要素数」や「配列の中の最大要素の値」を返す手続きをわざわざサブルーチンとして表すべきなのか、それともlength(A)、max(A)などと表現して、自由に使ってよいのかという点です。 (例えばCでは要素数を取得するためにはsizeof演算子を使いますよね?しかし今使っている教科書(アルゴリズムイントロダクション)ではlength(A)を使える前提として、max(A)は使えないとしています。) やはりどこまでの処理を、どのように表現するかは、数学などと一緒で多くの問題を解いていくうちに体得していくしかないのでしょうか? それとも基準といったものがあるのでしょうか?

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

「アルゴリズムイントロダクション」だとどんな基準だったかなぁ.... 最初の方に書いてあったかもしれん. 「O(1) でできるかどうか」とか, そんなところかなぁ? 「プログラムを書け」だと, 今なら普通は C か Java か, その辺かなぁ. Lisp (Scheme) はありだと思うけど, APL はダメだろ~な~.

buenaarbol
質問者

補足

重ねてありがとうございます。 >「O(1) でできるかどうか」 なるほど。計算時間が判断基準となるのではということですね。 アルゴリズムイントロダクションでは、RAM(ランダムアクセスマシン)モデルの説明で「算術演算、データ移動命令、制御命令を持つ」としています。多分これらの命令だけを使ってアルゴリズムを作れということでしょう。 ただし、擬似コードのオブジェクト関係の説明で「例えば配列は、それが含む要素数を示す長さの属性値lengthを持つオブジェクトとして取り扱う」と述べられています。 これはアルゴリズムイントロダクション上で配列が与えられたとき、length(A)の値がどこかに記憶してあって、その取得がO(1)でできるということの言い換えだと考えれば、なんとなく納得できそうです。 計算時間についてもう少し検討してみます。

回答No.2

大学院の試験なんですよね? この人はどのように表現するか?というのを見る、 という側面もあるんじゃないですか? その試験は。 つまり、いままで何を学んできたのか? 学んだことを自分なりに消化して自分のものにしているか? 自分なりのやり方を確立しているか? 他人に(試験管に)わかりやすく表現できるか? ということも同時に問われてるわけですね。 私は現役のプログラマ(SE)ですが 設計書をどのようにして書くか、 はプロジェクトによって違うことはよくあることです。 (もちろん社内規約などが存在することも多いですが) ですが、ほぼ共通しているのは 他の人(上司、顧客、実際にプログラムを書くプログラマ、あとでメンテナンスする後任者など) にわかりやすく、間違いや誤解がないように伝えられるか が重視されるということです。 Javaの書き方で書くのも結構です。 ですが、もし、10年後にJavaが廃れて扱える人が少なくなって(まぁ、ありえませんがね) しまったとき、それを読める人はいますか? 配列のサイズを得る場合を表現したいのなら 配列Xのサイズを得て変数Aに代入する。 または擬似言語風に A ← 配列変数Xの配列のサイズ とでも書けばCだろうとJavaだろうとかまいませんよね。 もしくはもっとはしょって 1.以下の処理Sを配列Xの配列の要素全てに対して繰り返す。 2.処理Sとは ・・・・・ なんて書いてもいいかもしれません。 自分がJavaが得意ならばJava風に書いて押し切ってもいいかもしれません。 それが試験管への自分のアピールです。 (それで合格になるかどうかは知りませんが) 京大の数理解関所のある教授の下で働いていた経験がありますが テスト用紙に1+1=? と書かれて2とだけ書くのは 大学入試までのレベル 大学院や社会では なぜ2になるのか、 2である必要はあるのか、 そしてそれを他人に説明できるか が重要だとかなんとか、そんな感じのことを誰かが言ってた気がしますし たぶんそれはそのとおりだと思います。

buenaarbol
質問者

お礼

ご回答ありがとうございます。 >つまり、いままで何を学んできたのか? >学んだことを自分なりに消化して自分のものにしているか? >自分なりのやり方を確立しているか? >他人に(試験管に)わかりやすく表現できるか? >ということも同時に問われてるわけですね。 ご指摘の点、まことに耳が痛いです。 自分のやり方を確立することは現在院試の勉強によって強化しているところなのですが、「相手に分かりやすく表現する」というのは、相手と自分が共有している前提を理解していないとできないと思います。 私は現在所属している学科とは少し毛色の違う専攻を希望しており、そのため専攻の文化や採点者の観点などがこれまでの経験とは違うものであると考えています。 ですので自分と採点者さんはどこまでの常識を共有していて、どのようにしたら自分の考えをわかりやすく伝えられるかということがまだはっきりしない状態です。 ですので私がどれだけわかりやすいように書いたコードも、採点者さんの持っている前提に照らせて論外であり唾棄されるのではないかということが怖いのです。 このたびこちらで質問させていただいたのは、特に未知であるアルゴリズムの分野に関して、広く一般的な見解をいただき、「一般の常識」という名を借りて採点者さんと私が共有していると思われる前提の幅を広げるためでありました。 その意味で、 >設計書をどのようにして書くか、 >はプロジェクトによって違うことはよくあることです。 など実際の現場の方の経験を伺えたのは貴重でした。 ありがとうございます。

関連するQ&A

  • 擬似言語とアルゴリズム

    宜しくお願いします。 基本情報処理技術者試験 午後の擬似言語およびアルゴリズムが不得手なんですが、良い勉強方法及び良い教材はないでしょうか。 大滝みや子さん著の擬似言語とアルゴリズム本は持っておりますので、それ以外でご教示お願い致します。

  • アルゴリズム系の問題知りませんか?

    再来週大学院試験を控えている者です。 入試の項目に「プログラミング(アルゴリズム)」と書いてあり、ある程度複雑なアルゴリズムを考えるような問題が出る事が予想されます。 きっと二分探索木やクイックソートのような問題が出るように思います。 アルゴリズムを考えるような問題としていい問題ご存じないでしょうか? アルゴリズムを考えるような問題としてはハノイの塔とかよいように思いますが ちょっと入試の問題としては出ないような気がします。 自分では他に線形リストやスタックなども勉強したんですが、 C,JAVA,Pascal,フォートランなどどの言語で回答してもよい事になっているので言語に限定した問題は出ないように思います。 90分で解く3問あるうちのプログラムは1つですから30分以内に解けるような問題のはずです。 (出題される可能性も考えていただければ幸いです)よい問題をご存知でしたら教えてください。 よろしくお願いします。

  • ☆★大学院入試のアルゴリズムに関する科目について★☆

     ご覧頂きありがとうございます、私は大学の機械科に在籍している3年生です。  来年の8月に電気通信大学の大学院(IS)を受験する予定なのですが、入学試験科目の中にデータ構造とアルゴリズムという本格的には勉強したことのない科目があります。  そこでこの科目についてお勧めな参考書、勉強法などがありましたら教えて下さい、私はC言語は使えるのでC言語で説明されている参考書でも構いません、よろしくお願いします。 -----------------------------詳しい範囲-------------------------------    [データ構造とアルゴリズム] 計算機のプログラミングで用いられるアルゴリズムとデータ構造についての理解を問う。具体的には、線形リスト,スタック、キュー、探索、整列、グラフアルゴリズム、アルゴリズム解析などから出題する。基本的なプログラミングの素養を必要とする。

  • 平方根を求めるアルゴリズムについて・・・

    次の文章の平方根を求めるアルゴリズムの疑似言語での記述の仕方を教えてください。 変数名等は任意に設定して良い。またアルゴリズムは任意の正数の平方根を求められるようにすること。求める精度は10-8とする。 (√のない計算機) T君はある資格試験を受験しに行った。その試験では、電卓を持ち込むことができる。当然に計算問題が出題され、計算した結果、答えは√14とでた。回答しようとしたところ、選択肢は小数で書いてある。ところが平方根を計算しようと思ったら√キーがない電卓だった。 どうしよう・・・ まず4×4=16であるから、とりあえず14を4で割ってみた。 14÷4=3.5 言わずもがなであるが、√14は二乗すると14になる正の数のことである。 √14は4と3.5の間にあることが分かる。 とりあえず、今度は14を4と3.5のあいだの3.75で割ってみる。 14÷3.75=3.7333333333 ということは√14は3.75と3.7333333333のあいだにあるわけだから同じように14を3.741666667で割ってみる。 14÷3.741666667=3.741648107 これで√14が小数点第4位までが求められた。あとはこの作業を繰り返せば、徐々に精度は良くなるはずである。

  • プログラミング設計思想をどうやって独学?

    2chまとめサイトで、「プログラミングの勉強をを始めたい。どの言語がお勧め」という質問があると、 「プログラミング言語をおぼえるよりも、どの言語でも通じる設計思想やアルゴリズムを勉強したほうがいい」などという回答がよく見られます。 私はwebプログラミングの勉強をして、ブログを一から自分で作って見たいと思っているのですが、 どうやったらその設計思想、アルゴリズムを独学できるでしょう?

    • ベストアンサー
    • CSS
  • IT系の新卒のプログラミング試験の言語について

    プログラミングのテストがある企業が多いようなのですが、使用言語についての情報が書いていないことがあります 一般的にはどのような形式で出題されるのでしょうか? 課題が出されて、使用言語が選べて、各自にPCが一台与えられるといった形式なのか、 試験中にデバッグさせてもらえるのか、それともテキストエディタで行うのかなどが知りたいです。 企業によって異なる部分は多いと思いますが、体験談としてお聞きしたいです。

  • 動的計画法、ナップサック問題などのアルゴリズム

    を独学で勉強したいのですが、お薦めの教科書はありますでしょうか?C言語やJavaといったプログラミング言語のコーディングの比重が高いものよりはもっと理論に重点をおいた本がよいです。(疑似コードで書かれていてもいいくらいですが、日本の書物でそんなの存在するのでしょうか) いくつか大学の情報系のシラバスを参照したところ、「アルゴリズムとデータ構造 改訂C言語版(電気工学入門シリーズ)」というのを使っているところが2つほどあったので試しにまずはこれを買ってみようと思っていますが、もし他にも理論的な本を知っている人がいたら教えて下さい。

  • アルゴリズムの勉強方法について

    お世話になります。 20年近く前に、初級シスアドに受かってはいるものの その後、ITから離れており、最近になって自己啓発の一環として 基本情報処理技術者の資格を取ってみたいと思っております。 当方、プログラミングの経験はありません。 昔と試験要綱も変わったようで、午後に出題されるという アルゴリズムの勉強方法について悩んでいます。 独学なので取りあえず「アルゴリズムを、はじめよう」という初心者 向けの本を読んでいるのですが、なかなか身についているのか否かが 実感できておりません。本を読んで「なるほど」とは思うものの、 白紙の状態から自分でアルゴリズムを書けるレベルには到底至って おりません。 即効性が出てこないのは、筋トレや外国語学習と似ているのかも しれないと思っているのですが、効果的な方法をとらないと、ただ 時間を無駄にしているだけになるのではないかと考えております。 そこで、アルゴリズムの効果的な学習方法について、ご教示 いただけると助かります。宜しくお願いいたします。

  • アルゴリズムの学習方法

    次回の試験で基本情報の試験を受けたいと思っています。 すでに、ネットワーク、オラクル、簿記、JAVAなどの資格は持っているので、それに関する午前の対策は必要ありませんでした。 しかし、アルゴリズムや、擬似言語の問題が頭に入ってきません。 具体的には、流れ図を見ても何をしているのかわからないので、答えを見て流れをなんとなく理解しているといった具合です。 まだ慣れていないという事もあるとは思いますが、何をしていけばよいのかわかりません。 過去の質問にも実際にプログラムを作らないと理解できないという事が書いてあるのですが、これはアルゴリズムの問題が ほとんどできていない時期に作るべきものなのでしょうか?(最終的には作る予定ではあります) そこで質問なのですが、 1、順番的にはどのようにこなしていくべきでしょうか? ・アルゴリズムの定石を覚える(交換法などの基礎を整理 数日) ・アルゴリズムの問題を解く(試験問題を解く 1週間) ・CASLで実際にプログラムを作成(文法を覚え簡単なプログラムを作成 2週間) 上記の流れでいくつもりなのですが、これがベストの流れでしょうか? CASLを先にやっておくべきなのかぁとも思っています・・・ 2、午後のアルゴリズム問題はすべて具体的な数値を入れてトレースをして解くのでしょうか? 若しくは頭の中で道筋を立てるだけで、紙に書くようなトレースはしないのでしょうか? アドバイスよろしくお願いします。

  • ソフトウェア開発技術者試験-春予想

    …ソフトウェア開発技術者試験まであと一週間です。 午前は一応ラインには達しそうなのですが、午後一、 また午後IIはどうにも合格点に中々達しません。 満遍なく勉強しろと言われればそれまでなのですが、やはり受験するからには今回で合格したいと思っています。 そこで、午後IIは皆様、何が出題されると思いますか? …SQL,擬似言語と交互に昔は行われていたようですが、最近(平成17年度春など)では、また違う分野からも出題されているように思えます。 去年は分野的に言えばSQLだったようなので、今年は擬似言語でしょうか? 皆様の予想、お待ちしています。 また後一週間で力がつくような勉強分野や問題集、アドバイス。 そして私はどうしても擬似言語が解けない人なので(基本情報も擬似言語は飛ばして勉強していました。たまたま去年は簡単だったので解けましたが…)擬似言語の効率的な解き方に対してのアドバイスもお待ちしています。 宜しくお願いします。

専門家に質問してみよう