学校の先生から、アルゴリズムは慣れだ慣れだと言われて、ひたすら問題を解くのですが、なにかしっくりきません。
時々、ここはなんでこういう事をしているのか分からないという所が出てきます。
例えば、基本情報技術者試験平成16年度春期午後のこの問題
http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H1 …
において、擬似言語中の上から13行目の
i: a_idx - span_idx , i < b_idx - a_idx , 1
では、教科書どおり?トレースしていくと
a_idx - span_idx
なんかは始めは0なんで、なぜ0としないでこんな事をやっているのかなあ・・・と頭を抱えてしまいます。
こうしている理由は、次々とループしていくとiの初期値は0でないときも出てくるからかな?とは想像できるのですが、
a_idx も span_idxもそれに伴って変化していくので
、なんでこんな式を使うの???
と頭がごちゃごちゃになってしまいます。
何か法則的なことがある程度はあるような気がするのですが・・・。
ごく初歩的な例で行くと、iは何の変数かといった時にプログラム中にT(i)などとあると、配列の添え字なんだなと分かる、みたいな事です。
どのようにして考えていけばいいのでしょうか?
何か法則みたいなものをご存知の方も、教えていただけないでしょうか?
よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
>アルゴリズムは慣れだ慣れだと言われて、ひたすら問題を解くのですが、なにかしっくりきません
慣れはものすごく必要ですが
問題をひたすら解くだけのそんな知識役に立ちません。
実際にプログラミングをしてみないと無意味です。
それにその勉強方法でとった資格なんて資格の肩書きだけで
なんの役にも立ちません。
科学の授業も黒板で説明されるよりは実験して
試した先生に言われることでなくて
自分考えてでりいろいろ試行錯誤したほうが覚えやすいでしょ?
おっしゃるとおりで、私もそう思っています。
授業としても4月から一回もプログラム実習がなく、黒板ばっかりで、かなり無味乾燥です。
ただ、学校では、「来月10月の国家試験で通らないと、来年の就職活動に間に合わない可能性がある。
取っているのと取っていないのとでは就職率が全く異なってくる」、と発破をかけられます。
私としては、基本情報の試験のための勉強よりもJAVAの方が好きだし資格SJCシリーズの方をどんどん取っていきたいのですが(組むことを楽しみながら)、
資格じゃないと言っておきながら結局資格(この場合は基本情報)を持っている人を企業としては採用しているという現実を学校側に突きつけられると、従わざるを得ません。
現実とは、あくまでうちの学校から就職した時の現実としてはという意味です。
大学を出ればいいってもんじゃないと言っておきながら、ほとんど一流大学しか採用しない一流企業と一緒です。
もう少しPCに触れ、色々と試しながら楽しみながら学んでいく事を私としても望んでいるのですが、
時間的に厳しいものがあるのでやむを得ない感じです・・・。
また、自分でプログラムをスイスイ組んでいけるレベルまで達していませんし、コンピュータの勉強も今年4月に始めたばかりですので・・・^^;
No.2
- 回答日時:
No1でちょっと引っかかっていたのですがβのところは間違いで、
$output[$write_idx-1]>$output[$write_idx]が正解でした。
マージソートは名前しか知らなかったので・・勉強になりました A^-^;
あとは、sizeが2^2n(2,4,8,16・・)以外のときはうまく動かないのですが、
その辺りどう改造すればいいかなど考えるのが面白いと思います
わざわざプログラムまで組んでいただいてありがとうございます!!!
やっぱり実際に入力してみると良く分かるんですね。
私はJAVAを少しかじったぐらいしかプログラムをやったことがないのですが、なんとなく似通っていたので、perlも少し分かりました。
>あとは、sizeが2^2n(2,4,8,16・・)以外のときはうまく動かないのですが、
その辺りどう改造すればいいかなど考えるのが面白いと思います
ほぉ~!こんな条件が裏に隠れていたとは思いもしませんでした。実際動かしてみると色々と出てくるのですね。
試験まであと一ヶ月もないぐらいなので、ちょっとプログラムを入力して理解・・・というのはきついので・・・、やはり問題の入力データの例を実際に当てはめて流れを追っていくしかないのですかね?
なんとなくやっていることはわかるのですが、
データの例を当てはめてトレースしていっても
それぞれの変数がどういう役割をしているのかというのが、どうもしっくりこないんです。
マージソートを知っている→試験に出る
であればいいのですが、問題は色々と組み合わさったものが出て試験場で考えなくてはならないので、
なにか解く手順のようなものがあればいいのですが。
どこを見るといい、とか。
pipipi523さんなら、
http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H1 …
の問題を出されたとしたらどう解いていかれますか?
No.1
- 回答日時:
この問題で重要なのはマージソートの考え方とその実現方法です。
たぶん。まずソートの考え方を理解する必要がありますが、
図を見ても解りにくいので実際に値の変化を見ながら追っていくのが理解し易いでしょう
しかし人の作ったプログラムを解析しているだけでは理解し難いので、
実際に入力して動かして見るのが良いと思います(動かしたり改造してたりすると理解度が違います)
例えばPerlで入力・・
実際にやってみました
(確認に使ったツール)
http://www.forest.impress.co.jp/article/2001/09/ …
@input=(47,33,68,55,74,89,25,10);#入力
$size=@input;
#問題
$span_size=2;
@output=@input;
while($span_size<=$size){
$span_idx=0;
$write_idx=0;
$ordered = 'true';#α
while($span_idx<$size){
$a_idx=$span_idx;
$b_idx=$span_idx + $span_size/2;
#for($i = $a_idx-$span_idx ; $i < $b_idx ; $i+=1){
for($i = 0 ; $i < $b_idx ; $i+=1){
$temp[$i]=$output[$i + $span_idx];
}
$a_yet='true';
$b_yet='true';
while($a_yet eq 'true' || $b_yet eq 'true'){
if($b_yet eq 'false' || ($a_yet eq 'true'
&& $b_yet eq 'true' &&
$temp[$a_idx - $span_idx] <= $output[$b_idx])){
$output[$write_idx] = $temp[$a_idx - $span_idx];
$a_idx = $a_idx + 1;
if($a_idx >= $span_idx + $span_size/2){
$a_yet = 'false';
}
}else{
$output[$write_idx] = $output[$b_idx];
$b_idx = $b_idx + 1;
if($b_idx >= $span_idx + $span_size){
$b_yet = 'false';
}
}
if($write_idx>0){#β
if($temp[$write_idx]>$output[$wtite_idx]){
$ordered='false';
}
}
$write_idx = $write_idx + 1;
}
$span_idx = $span_idx + $span_size;
}
#γ
if($ordered eq 'true'){
$span_size=$size;
}
$span_size = $span_size * 2;
}
#問題ここまで
print "END = ".join(',',@output)."\n";#結果確認
i: a_idx - span_idx , i < b_idx - a_idx , 1
は、直前で、
a_idx ← span_idx
と、なっているので0にしかならないですね
i: 0 , i < b_idx - a_idx , 1
と同等です
どっちでも正しく動くので間違いではないですが・・・ミスでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) For~Nextステートメントの終了条件について 1 2023/01/08 18:36
- 統計学 IPCAで次元削減された画像の表示 1 2023/01/05 09:54
- 情報処理技術者・Microsoft認定資格 基本情報技術者試験について知りたい! こんにちは! 今年基本情報技術者試験を受験するつもりです。 今 2 2023/07/17 21:23
- その他(学校・勉強) スシロー “ペロペロ高校生” は、日本の教育の失敗ですね? 20 2023/02/08 07:08
- 仕事術・業務効率化 効率的な勉強方法(分野問わず)を教えてください 1 2023/08/16 01:33
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- 中学校 理科だけが極端に苦手 5 2022/09/10 14:18
関連するカテゴリからQ&Aを探す
医師・看護師・助産師
薬剤師・登録販売者・MR
医療事務・調剤薬局事務
歯科衛生士・歯科助手
臨床検査技師・臨床工学技士
理学療法士・作業療法士・言語聴覚士
臨床心理士・心理カウンセラー・ソーシャルワーカー
介護福祉士・ケアマネージャー・社会福祉士
弁護士・行政書士・司法書士・社会保険労務士
フィナンシャルプランナー(FP)
中小企業診断士
公認会計士・税理士
簿記検定・漢字検定・秘書検定
情報処理技術者・Microsoft認定資格
TOEFL・TOEIC・英語検定
建築士
インテリアコーディネーター
宅地建物取引主任者(宅建)
不動産鑑定士・土地家屋調査士
マンション管理士
電気工事士
美容師・理容師
調理師・管理栄養士・パティシエ
シェフ
保育士・幼稚園教諭
教師・教員
国家公務員・地方公務員
警察官・消防士
その他(職業・資格)
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
応用情報技術者試験-午後筆記に...
-
トレースの意味を教えてください
-
情報技術検定3級について質問...
-
【2day】と【2days】の違いを教...
-
ACCESSで空白のデーターをクエ...
-
たけのこを茹でるのに鷹の爪を...
-
本試験と空試験
-
空試験
-
耐圧試験と気密試験
-
30歳未満とは30歳は含まれない...
-
高圧絶縁耐圧試験について。教...
-
障害者手帳をもってても宅地建...
-
史上最悪の試験監督はどんな試...
-
次の一月(2025年1月)にあるFP...
-
試験などで、リスクアセスメン...
-
自衛隊の部内幹部候補生になる...
-
今回担当現場のキュービクルに...
-
船舶試験について
-
100%を目指すのではなく
-
生命保険 一般課程
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
トレースの意味を教えてください
-
応用情報技術者試験-午後筆記に...
-
Excelについて
-
流れ図がよくわかりません。
-
基本情報試験の午後の言語について
-
表計算の難易度が、毎年上がっ...
-
平成21年秋期 基本情報 問8 ...
-
平成18年 秋期 基本情報技術者 ...
-
大滝みや子先生 かんたんアル...
-
全商情報処理検定/プログラミン...
-
トレサビリティー??
-
基本情報技術平成21年春午後問8...
-
CASL2の勉強方法について
-
基本情報技術者午後の勉強法
-
【2day】と【2days】の違いを教...
-
ACCESSで空白のデーターをクエ...
-
30歳未満とは30歳は含まれない...
-
耐圧試験と気密試験
-
障害者手帳をもってても宅地建...
-
自衛隊の部内幹部候補生になる...
おすすめ情報