パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

日本人情報技術者のレベルは世界最低?」記事へのコメント

  • 腕試し (スコア:2, 参考になる)

    by Anonymous Coward on 2003年07月17日 12時37分 (#360649)
    IT Proに「腕試し」シリーズというのがありますが、あまりのレベルの低さに毎度毎度笑っていいものか悲しむべきか考えてしまいます。
    回答者のことではありません。問題が無茶苦茶なのです。
    直接ではありませんが、これも日本のIT技術者のレベルの低さを表しているようにも感じられて、……やっぱり悲しむべきことなのでしょうか。
    • by wosamu (4952) on 2003年07月17日 13時01分 (#360676) 日記
      その記事は読んだこと無いんですが、きっとその無茶苦茶さそのものが「問題」なんでしょう。
      実戦的ですね。

      というわけでちょっと見てみたんですけど・・・。
      情報処理試験の問題みたいですね。
      親コメント
      • by Anonymous Coward
        >情報処理試験の問題みたいですね。

        それで思い出したけど、同系のシリーズの、これ [nikkeibp.co.jp]とかこれ [nikkeibp.co.jp]もなかなかの出来で泣けてきます。

        後者のCASLのプログラムがちゃんと動くかどうか追っかけてみてくださいな。
    • by kero (6940) on 2003年07月17日 13時10分 (#360690) ホームページ 日記
      やってみましたが,多分半分くらいは現場で役に立たない知識です.
      ただ,満点とった訳じゃないんでえらそうなことは言えないかも.
      --
      kero
      親コメント
      • by Anonymous Coward
        まぁ、情報処理技術者試験だって「役に立たねぇ!」
        なんて言われているわけですからそのあたりは仕方ないかと…

        ペーパー試験で立派な技術者になれるのなら苦労はないわな
    • by Anonymous Coward
      偏った意見なのでフレームの基になるかもしれませんが、 特に Web 系 (って最近いうんでしょうか) のプログラマは レベルが低い人が多いです。 その程度じゃ「Java ができる」って言えないぞ。ボソボソ
    • by Anonymous Coward
      腕試し!コンピュータはなぜ動くのか(4)をやってみて一つ
      疑問に思いました。

      問い5の素数かどうか求める最も効率的なものという設問です
      √91にもとめるのに必要な計算量って結構多きいのではと思い
      • by Shidho (5649) on 2003年07月17日 15時18分 (#360803) 日記
        √91を正確にもとめるならそうですけど、
        整数の問題の場合、半分の桁数の数よりちょっと多い数、としてかまいません。
        今回だと、√91=10とすればいいので、
        そんなに計算量はいりません。

        さらに、
        今回の選択肢だと、すでに√91は与えられていると考えても
        いいかもしれません。

        #でも、こういう問題はどの程度までこっちの意図が通じるかわからないのできらい。
        親コメント
        • by Anonymous Coward
          >今回だと、√91=10とすればいいので、そんなに計算量はいりません。

          例えば√91を求めるのに1*1、2*2、3*3と増やしていって
          91を超えるまで10*10にたどり着くのにかかる計算量が
          大したことないって話ですよね?

          掛け算は掛ける数の回数足し算をやっていると聞いたことがあります。
          本当に、内部的なCPUレベルの処理時間、計算効率といった部分で
          秀でているのか疑問に思ったのです。
          でっちあげですが例えば
          • by Shidho (5649) on 2003年07月17日 20時57分 (#361021) 日記
            >例えば√91を求めるのに1*1、2*2、3*3と増やしていって
            >91を超えるまで10*10にたどり着くのにかかる計算量が
            >大したことないって話ですよね?

            たぶん違います。
            91ならlog_10(ここでは、10を底とする対数)は1よりちょっと大きいくらいでしょ。せいぜい2くらい。
            だから√91はその半分、せいぜい10^1と求められるってことです。
            あとは、1~10までの数字で割れるかどうか確かめればいいってことです。

            log_10っていうのは、基本的にはケタの数ですから、
            入力値の文字数を調べればいいんですよ。
            だから、かけ算はいらない。

            割り算の効率については条件同じなので省きます。

            #ただ、ここでは91が文字列で与えられるという仮定をしてます。
            #この仮定が崩されると対数の概数を求める際の割り算が発生します。
            親コメント
          • by watayan (143) on 2003年07月17日 23時10分 (#361100) ホームページ 日記
            普通に計算するなら,掛け算は掛ける数の「2進数での桁数」回数のビットシフトと足し算で済みます(筆算と同じことをする)し,奇数を小さい方から足していけば掛け算なしで平方数が作れます。
            親コメント
          • ホントはアセンブラで調査したいがそれを言い出すとアルゴリズム
            がどうとかでてくるので実際に使う一般的な高級言語(Java)でテスト

            public class Test {
                private static boolean calc1(int num ) {
                    int loop = num/2;
                    for( int i=2 ; i<loop ; i++ ) {
                        if( num%i==0 ) {
                            return false;
                        }
                    }
             
            • ループがどこで終わるかってことがこの議論の主眼なんだからこのベンチマークはまったく見当はずれですよ(ループが全部 i== 7 で終わるんだから)。calc2がcalc1より速いとすると,それはただsqrtが重いだけのことでしょう。numを97とかの素数にしてやれば違いがわかりますよ。calc3がまったく勘違い(無駄にループまわしてるだけでなく結果まで間違うことがある)していることもそこでわかるでしょう。

              for(int i = 2; i * i < num; i++)
              とか
              int loop = 1;
              while(loop * loop < num){ loop += 1; }
              for(int i = 2; i < loop; i++)
              の方が速いんじゃない?って話だったと思うんだけど。
              親コメント
              • え~っと、お恥ずかしい限りです。
                91を勝手に素数と思いこんでおりました。
                素数で再度調査した結果calc2が早っすね。
                なんだか残念。calc3は忘れて下さい・・・。

                主題は一応sqrtとそのループ数の合計処理速度vs単純に/2とそのループ数の合計
      • by sakamoto (8009) on 2003年07月17日 18時43分 (#360958) 日記
        入力が有限なら答を全て覚えておいて、表を 作っておくのが一番効率的です。
        # 素数判定は昨年ついに多項式時間のものが発表されましたね。
        --
        -- 哀れな日本人専用(sorry Japanese only) --
        親コメント
      • by Anonymous Coward
        IPPro から引用
        > 問題文:91が素数かどうかを判定する方法として、最も効率的なものはどれですか?
        > 選択肢:2~√91までのすべての整数で割ってみればよい。

        割る数をaとすると、
         a^2 > 91
        になった時点で√91を越えたことになる。
        これなら平方根を求める計算もいらないし。
        えと、そういう疑問ではないですか……(汗
        • by saitoh (10803) on 2003年07月17日 23時18分 (#361104)
          √91までのすべての整数で割るとして、
          for (a:=2;a< ??;a++) みたいなループじゃなくて、 どうせなら、
          do {

          b=91/a;

          }while(b>a);

          とすれば、√91越えたところでループを抜けますが。。 そういうはなしじゃないのかなぁ。。。

          親コメント
        • by Anonymous Coward
          そうすると91=7*13の13はチェックされないのでは?
          7で割るからいいのか?

          あー、そーですか、はいはい
          • by Anonymous Coward
            約数を求めるのではなく、91が素数かどうかを判定するだけなので、これで充分と思われ。
            むしろ問題なのは、√91に達する前に素数か否かの判定が出てしまうことのような気が。
    • by Anonymous Coward
      | IT Proに「腕試し」シリーズというのがありますが、
      | 問題が無茶苦茶なのです。

      あれはきっと、読者が問題作成者の実力を判定するテストなんですよ。
    • by Anonymous Coward
      世界のエンジニアにクイズで挑戦!
      ~ネットワーク・テスト・エンジニア・ランキングキャンペーン

      ディジタル・カメラやモバイル・バッグが当たる期間限定特典

      http://advanced.comms.agilent.com/quiz/local/JPN/game/game.htm

一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy

処理中...