①コンピューターサイエンスの基礎として、不動点の勉強をしようと思っています。

関数プログラム言語で不動点の勉強をする良い方法を教えて下さい。

②再帰、ポインタ、不動点理論以外で、コンピューターサイエンスの基礎として、分野に関わらず、勉強しておいた方が良いことはありますか?

宜しくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/04/07 21:05:28
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:drill256 No.1

回答回数175ベストアンサー獲得回数7

ポイント20pt

1.理解を深めるのであれば、16進数や2進数の小数を意識することが大事だと思います。

http://www-06.ibm.com/jp/developerworks/java/030314/j_j-jtp0114....

こちらのページに、

0で初期化した倍精度浮動小数点変数に、0.1を26回足すと、結果は2.6ではなく 2.600000000000001 であるという話しがあります。

これも、0.1は16進数では、0.19999999... です。2進では0.0001100110011001.... です。つまり、1.10011001100...1100 x 2^-4 となります。2進小数を理解し、有効桁数を理解すると、飲み込みやすいと思います。


手前味噌になりますが、こちらに16進小数の扱える電卓がありますので、よければ使ってください。

http://www.vector.co.jp/soft/win95/personal/se357013.html


2.充分だと思います。優秀な人でも、再帰呼び出し、ポインタ、浮動小数点を完璧に理解するだけで3年ぐらいはかかる気がします。これらを基礎と呼ぶならば、あえてもう1つ上げるならオブジェクト指向を勉強してはいかがでしょうか。

id:tomoyuki28jp

貴重な情報をどうもありがとうございます。

参考にさせて頂きます。

HPも拝見させて頂きました ^ ^

2007/04/03 16:46:28
id:cappin No.2

回答回数89ベストアンサー獲得回数3

ポイント20pt

不動点て浮動小数点の間違いなんですか?きっとA=F(A)となるようなAのことだと思うんですが。演繹データベースだと「兄弟や親子」という関係に対する不動「点」は「家族」(例が異端‥)

関数型言語で勉強というリクエストにはきちんとは答えられそうにないのですが、とりあえず固有値・固有ベクトル(aA=F(A))に強いといいのかもしれません。Aの次元が大きい場合も小さい場合も、なにかといろいろあるようです。

実際の問題には、最短経路関係の利用頻度が高いと感じてます。かなりいろんな問題の解法がここに帰着する感じで。あと欲を言えば最○クリークとかマッチングとかも、ざっと知ってるだけで問題の見通しの良さが違ってくると思います。

id:tomoyuki28jp

このサイトで言及されている不動点をイメージしていたのですが、浮動小数点のことなのでしょうか?

http://local.joelonsoftware.com/mediawiki/index.php/Java%E3%82%B...

専門的なご意見をどうもありがとうございます。

参考にさせて頂きます。

2007/04/03 16:48:05
id:momomoni No.3

回答回数55ベストアンサー獲得回数1

ポイント20pt

C言語で↓のような共用体を使って、

union {

 float f;

 unsigned char c[4];

} u;

fの値をビットごとに調べてみたらどうでしょうか?。

チューリングマシンについて。

id:tomoyuki28jp

まだ勉強不足な部分がありますが、

頂いた情報をもとに、調査、勉強してみようと思います。

貴重な情報をどうもありがとうございます。

2007/04/03 16:48:54
id:Baku7770 No.4

回答回数2832ベストアンサー獲得回数181

ポイント20pt

 将来何をしようとするかで全然違います。

 私は学生時代を含めて不動点は使ったことはありませんね。LISPコンパイラを日本で初めて開発した中西正和先生の授業も受講しましたが。

 微積分方程式はやることはやりましたが、コンピュータサイエンスは微積分方程式に直接値を入れていくような強引な手法を使いますので、やったところで意味を持ちません。

 私の学生時代の研究テーマは高校でマルコフ連鎖、大学で数値流体工学です。

 

id:tomoyuki28jp

> 将来何をしようとするかで全然違います。

おっしゃる通りですね。。

上記の回答にも記載しましたが、下記サイトを見て、コンピューターサイエンスの基礎として、不動点を勉強しておいた方が良いのかと思いました。

http://local.joelonsoftware.com/mediawiki/index.php/Java%E3%82%B...

最終的には、ウェブ開発/サーバーまわりのことをやりたいので、スクリプト言語だけでも必要最低限のことができるのですが、

スクリプト言語しか組まないとしても、C/C++、ポインタ、再帰を知っているといないでは大違いだと思いますし、

アルゴリズムやコンピューターサイエンスの基礎を抑えている人と、抑えていない人では、

適当な知識の積み上げでスクリプトだけを組んでいる人とは大違いかと思っています。

そういう意味で、scheme, Haskell, アセンブリ、lisp等も勉強したいと思っているのですが、

何をどこまでやるか、ですよね。

貴重なご意見どうもありがとうございました。

参考にさせて頂きます。

2007/04/03 16:53:55
id:hujikojp No.5

回答回数101ベストアンサー獲得回数7

ポイント20pt

不動点ってコンピュータサイエンス上でそんなに重要なもんでしょうか?

Yコンビネータあたりの話なんでしょうけど、それだけを知ったからといって何か応用があるわけでもない気がします。より深いプログラム意味論のなかで生きるものでしょう (薀蓄を傾けるためにもつかえますが)。

というわけで、不動点のみならず意味論の教科書として:

プログラム意味論 (情報数学講座)

プログラム意味論 (情報数学講座)

  • 作者: 横内 寛文
  • 出版社/メーカー: 共立出版
  • メディア: 単行本

Haskellを使って意味論を勉強するとかいう教科書があればもっと意に沿ったんでしょうけど、寡聞にして知りません。

あと、ガチなコンピュータサイエンスとしては計算可能性(チューリングマシン)、計算量理論、正規言語、オートマトン、論理学一般、型理論あたりが自分の中で思いつきます。

アルゴリズムの話とかは基礎じゃないのかもしれません。

id:tomoyuki28jp

> 不動点ってコンピュータサイエンス上で

> そんなに重要なもんでしょうか?

上記回答にも2回記載しましたが、Joel on Softwareの記事を見て、コンピューターサイエンスの最難関といわれている2つを押さえておこうかなと思い、今回ご質問させて頂きました。

専門的な知識をお持ちの方からアドバイス頂けて、勉強になりました。

参考にさせて頂きます。

どうもありがとうございました!

2007/04/03 16:57:04
  • id:Sampo
    自分が完全な回答はできないのでコメントしかできませんが、1番と3番の方は質問の意味を完全に読み間違えておられます……

    不動点とは2番の方のおっしゃるとおり、ある関数に与えたとき同じ値が帰ってくるような値のことです(関数ごとに決まります)。
    これを利用すると、再帰的な関数を記述するときに、関数の内容に自分自身が登場する必要がなくなるというものです。関数プログラミングでよく利用される概念ですが、高階関数が扱える言語なら手続き型言語にも応用可能です。
  • id:tomoyuki28jp
    コメントどうもありがとうございます!

    コンピューターサイエンスも奥が深いので、難しいですね。

    基礎からきっちりやろうと思ったら、勉強することが凄く多いので、
    この機会に、
    「何を」、
    「どういう順番で」、
    「どこまでやるか」
    をもう一度考えてみようかと思います。

    貴重なコメントどうもありがとうございました。
  • id:drill256
    どうにも誤解していたようで、お恥ずかしい限りです。初めて聞いた言葉だったので;;
    不動点とは、簡単なところでn!のn=1ということですね。ニュートン法でルートを求めるというのも、不動点理論の延長線上ってことなんでしょうか?って、自分が質問してどうする^^;

    皆さんの話を見ていて、もう一度考えてみました。
    オートマトンは既に挙げられていますが、自分もこれは重要だと思います。あと、結構いろんな分野で役に立つと思うのは分布です。
    アルゴリズム的なものは挙げ出すときりがないのでやめときます。
  • id:cappin
    元記事はfixed point theoryだったので不動点定理ですね。なお、
    (1) JavaにポインタがないというのはJavaをあまり書かない人によくある誤解で‥むしろポインタしかないとみなして書いたほうがよく動きますが‥この筆者はどうやら誤解と知ってて書いてるように思えます。
    (2) 元記事では、不動点定理は初めの方で通過すべきポインタだの再帰だのの「難関」ではなくて、長期的にクリアすべき目標の代表として挙げているように読めます。で、そっちの方がさすがに常識と合います。(そんなに極端にレベル高いはずが‥特に数学で‥^_^;)
    (3) 頭と時間に余裕があれば代数学的視点の訓練もぜひ。例えばf,gを関数(出力1つのサブルーチン)、a,bを入力として、2つの関数を使う順番を入れ換えられるか、つまり f(g(a,b))=g(f(a),f(b)) という分配法則的な構造があるかどうかなんてのを、しょっちゅう意識していた方がプログラムが見やすくなりますんで。
  • id:tomoyuki28jp
    cappinさん

    大変参考になるアドバイスをどうもありがとうございます!

    記事の考察、大変参考になりました。

    数学に関しても、頂いたアドバイスをもとに、勉強してみようかと思います。

    どうもありがとうございます!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません