• ベストアンサー

アルゴリズムは、たった3つの制御構造の組み合わせで記述することができることのハードウエアとからめた理解。

すべてのアルゴリズムは、たった3つの制御構造の組み合わせで記述することができる。3つの制御構造とは、図1~3が示すような順次実行、分岐実行、繰り返し実行である http://www.rsch.tuis.ac.jp/~kitakaze/2008/flow.html とありますが、 以前、学生時代、教授がこれについて、ハードウェアとからめて説明していたのを 思い出します。 「ハードウエアを見ても、CPUがどうの、こうのだから、 順次実行、ハードウエアのここで分岐を実行して、 ハードウェアのここで反復実行をしている。だからソフトウエアとしてもこの3つの命令ですべてのアルゴリズムを記述できるわけだ」 というような感じの説明でした。 そのときは、なるほど深く理解しているひとは、アルゴリズムというソフトウエアと 回路、素子などによる構成物であるハードウエアと両方見て、合理的に説明する能力が あるのだなと感心しました。 その具体的なひとことは残念ながら思い出せませんので質問します。 ハードウェアとアルゴリズムが3つの指令(分岐、繰り返し、順次)ですべて記述できること の間の関係をうまく説明できる方はいますか? よろしくお願いします。

noname#74338
noname#74338

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

  • ベストアンサー
  • kt1965
  • ベストアンサー率34% (116/339)
回答No.1

第二次世界大戦中、エニグマというコンピューターを開発しているとき、アラン・チューリングという数学者が証明していますね。 もしも、無限大の時間があれば、全ての計算が出来ることを説明しています。この理論が基礎になって、現在のコンピュータの基本が生まれています。 基本は、無限大の長さのテープとヘッドからなります。ループを繰り返す制御構造に、分岐を加えれば、ループから抜け出せます。逐次計算を行えば、それで計算が出来ます。 それらの繰り返しが、ソフトウエアとハードウエアの基礎的構造になっているからですよ。 詳しいことは、Donal E.KunthのThe Art of Computer Programing の第一巻に出ていますよ。

その他の回答 (1)

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.2

私はちょっと納得できません。 繰り返しは、分岐の応用ではないんでしょうか? とてもアルゴリズムの基本とは思えません。 例えば、回路の基本は、and,or,notですが、eorは それらの組合せで出来るので、基本から外れて応用 に感じるのと同じように思えます。 私の捉え方が違うのでしょうか?

関連するQ&A

  • RS-232Cのハードウェアフロー制御について

    「一般的な」パソコンで、RS-232Cのハードウェアフロー制御を行う場合、使用されるフロー制御信号は何になるか、ご存知の方教えていただけないでしょうか。 (どう接続するかはともかく。。。) RTS、CTS、DTR、DSR、DCD、RI全て使用するのでしょうか。 資料等調べるのにも、機器によりバラバラだと思うので何を調べてよいかもわからない状態です。 宜しくお願い致します。

  • ハードウェアでスタック構造をサポート2

    (c)一般的なアーキテクチャではハードウェアでスタック構造をサポートしているものが多いが、その機構を説明せよ。 スタック操作という手法がある。スタック操作は,スタック・ポインタで操作するアドレスを保持し,スタックへ書き込み(押し込み)したデータ数だけポインタ値を調整する手法のこと.スタックへのデータ格納命令(PUSH,CALLなど)を実行すると,スタック・ポインタが保持するアドレスは格納データ数だけ若くなり,逆にデータ取り出し命令(POP,RETなど)を実行するとそのデータ数だけポインタ値は大きくなる。 (d)前問で説明したストック構造の代表的な使い方を説明せよ。 アドレス修飾レジスタの中でスタックポインタ(SP)を持つものがある。スタックポインタはアドレスレジスタの一種で、コールスタックの先頭を指すポインタレジスタである。これが示すアドレスの内容を読み出すと同時にアドレスを増やす、逆に、示すアドレスに書き込むと同時にアドレスを減らす、といった動作を行えるものが多い。 というふうにまとめてみました。ご確認お願い致します。  

  • コールドフローとは?

    ある伝熱シートの説明に以下のような記述があります。 放熱グリースを併用しないため、にじみやコールドフロー等がなく、作業行程が合理化されます。 このコールドフローとはどういう現象でしょうか? また、にじみとは? よろしくお願いします。

  • データ構造とアルゴリズムの問題が分かりません。

    以下の問題で悩んでいます。 1 配列とリストでデータを末尾に追加する場合の時間計算量をO記法で表せ。 2 配列とリスト、それぞれの時間計算量以外の利点と欠点をなるべく多く挙げよ。 3 データ構造「スタック」、「キュー」を配列もしくはリストで実現した場合、それぞれの利点と欠点を挙げよ。 4 アルゴリズム「線形探索」、「二分探索」で特定のデータを検索するための時間計算量をO記法で表し、またその理由も記述せよ。 5 データを検索する操作のほうが多い場合と、データを追加する操作が多い場   合、 「線形探索」と「二分探索」どちらが有利か理由をつけて述べよ。 1は、挿入と削除はO記法で表せたのですが、追加が分かりませんでした。 2は配列の利点はランダムアクセス可能な点と任意のデータをすぐに扱える点の2点 リストの利点は扱うデータを自由に変えられる点の1点しか思いつかず、欠点はよく分かりませんでした。 3、4、5も理由をつけて説明しろと言われたら無理です。 テストに類題を出すと先生はおっしゃってたので、どうしてもすぐに回答が必要です。先生にも質問したのですが、テストに類題を出すから教えられない。自力で頑張れと言われ困っています。 どなたか御助力よろしくお願いいたします。

  • モータの制御

    永久磁石同期モータを速度制御をする場合  電流制御をマイナーループとした制御系を構成するとします。このとき、電流制御系のサンプリング間隔が速度制御系よりも短いサンプリング間隔で電流制御をすると思います。この場合、アルゴリズム(C言語でのプログラム)はどのようにしたらよいのでしょうか? マイナーループの電流指令の生成の部分がよくわかりません。 説明がわかりにく部分があるかもしれませんがよろしくお願いします。

  • wsh で関数を指定して実行したい

    wsh について質問です。 cscript などを実行する際に 実行する関数を引数によって制御したいのですが、 そうするにはスクリプト内に引数で分岐して関数を呼び分けるコードを 記述するようなやりかたしかないのでしょうか? cscript(wscript) 自体には関数名を指定して それを実行する仕組みはないのでしょうか。 よろしくお願いします。

  • SSISのデータフロー内のSQLコマンドテキストで外部のパラメータを使う方法が分かりません

    以下のようにDTExecを使って、 パラメータをSSISパッケージに引渡しをしています。 DTExec.exe /f D:\SSIS\test.dtsx /Set "\Package.Variables[User::Date].Properties[Value]";"20090101" 制御フローのSQL実行タスクではExpressionsを使い、 以下のように記述すれば良いのですが、 " SELECT   Clm1, Clm2 FROM   T_Data WHERE   Date = '" + @[User::Date] + "'" データフロー内のSQLコマンドテキストでは この表記が出来ないため、どのように記述すれば良いのか分からず 困っております、、 (それとも、そもそも出来ないのでしょうか??) どなたかご教授願えないでしょうか? 以上、よろしくお願い致します。

  • 組み合わせを作るアルゴリズム

    アルゴリズムについてうまい考えが浮かばず、お知恵を拝借できればと思い質問致しました。 要件は、値が100個ほど入った配列があり、この配列から任意の個数の値を取り出して処理をする、というものなのですが、とにかく全ての組み合わせを取り出したいのです。 例えば @data = (3, 6, 8, 6); という配列から2個取り出すとすれば、 (3, 6) (3, 8) (3, 6) (6, 8) (6, 6) (8, 6) という全6パターンが欲しいのです。(パターンの出現順は無視できます。) 順番違いはなくてよいので、たとえば (6, 3) というリストはなくて結構です。 また (3, 6) のように、全く同じリストが複数出現してもOKです。 取り出す個数が固定ならばforループのネストで処理のしようもあるのですが、任意ということでここの処理方法が浮かびません。 (ちなみにrは最大で10まで取り、できればforのネストも避けたいところなのですが。) このような処理に適した処理方法をご存知の方おられましたら、ぜひともご教授ください。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • 大学院の専門科目(情報学科)のお勧め参考書☆★

     ご覧頂きありがとうございます、私は現在機械科に所属する大学3年生です。  来年に他大学の情報科の院を受験したいのですが、入学試験科目に「データ構造とアルゴリズム」「計算機システム」という今までに勉強したことのない科目が含まれていて、その対策としてとりあえず基本情報技術者試験の勉強をしていますが、対策としては十分でない気がします。  もしご覧になっている皆様の中に上記二つの科目についてお勧めの参考書、又は勉強法をご存知な方は教えてもらえないでしょうか?どうぞよろしくお願い致します。 ------------------詳しい範囲-------------------- [計算機システム] 計算機の物理的、論理的な構造、機能、動作に関する理解を問う。具体的には、計算機アーキテクチャおよびオペレーティングシステムについて、機械語命令、アセンブリ言語、命令実行パイプライン、割込み制御、記憶階層、プロセス管理、記憶管理、同期管理、ファイル管理などから出題する。 [データ構造とアルゴリズム] 計算機のプログラミングで用いられるアルゴリズムとデータ構造についての理解を問う。具体的には、線形リスト,スタック、キュー、探索、整列、グラフアルゴリズム、アルゴリズム解析などから出題する。基本的なプログラミングの素養(私はC言語は使えます)を必要とする。

  • ハードウェアの制御

    ASPを使用してハードウェアの制御は可能でしょうか? 例えばサーバー側のソフトでクライアントのRS232Cに繋がっている外部端末を操作する等といったようなことです。 方法、参考ページ等あれば教えて下さい。

専門家に質問してみよう