【B試験_アルゴリズム】05. アルゴリズム練習_再帰処理を学ぶ | 基本情報技術者試験

Поделиться
HTML-код
  • Опубликовано: 12 сен 2024

Комментарии • 68

  • @kihonzyouhou
    @kihonzyouhou  2 года назад +2

    ✅講義資料:note.com/kihonzyouhou/n/n451b6df325f5
    ▼▼再生リスト▼▼
    アルゴリズムコース
    ruclips.net/video/GLrlw9yOcEg/видео.html
    基本情報技術者試験の概要(※最初にご覧頂くことをオススメしています。)
    ruclips.net/p/PLEuyFWEF8u0OhszLVxc38rmwgjfWX6wzG

  • @user-um4ti2tn8s
    @user-um4ti2tn8s 7 месяцев назад +1

    繰り返し巻き戻して確認を繰り返して、やっと理解ができました!
    理解できるととてもシンプルなことをきかれているだけなんだと分かりますね

    • @kihonzyouhou
      @kihonzyouhou  7 месяцев назад

      素晴らしいですね!その感覚とても大切です^^

  • @marukuro7339
    @marukuro7339 10 месяцев назад +2

    巻き戻しと再生を繰り返してなんとか理解できた…。
    理解できると、あまり難しいことはしていないことに気づきますね。ありがとうございます!

    • @kihonzyouhou
      @kihonzyouhou  10 месяцев назад

      素晴らしい!!その感覚大切ですね👍

  • @bk03_yoru
    @bk03_yoru Год назад +1

    C言語の再起処理で少しあやふやになっていたのですが、基本情報技術者試験のための勉強をしている際この動画を見て、ようやくどのような仕組みか理解できました
    大学のテストにも試験のためにもなったのでとても助かります!

    • @kihonzyouhou
      @kihonzyouhou  Год назад +1

      コメントありがとうございます!お役に立てたようで嬉しいです^^
      大学のテスト頑張ってください👍

  • @Eric-je8ql
    @Eric-je8ql Год назад +1

    12:35再帰処理の説明が凄かったです。

  • @user-dq3pd6gp7d
    @user-dq3pd6gp7d Год назад +9

    わかりやすい解説ありがとうございます!
    最後まで辿り着くのにかなり苦労しましたが、なんとか理解できました!!

    • @kihonzyouhou
      @kihonzyouhou  Год назад

      いつもコメントありがとうございます!最後まで辿り着かれたようで良かったです👍その調子で引き続き頑張って下さい!

  • @user-hk3cv7mq2b
    @user-hk3cv7mq2b Год назад +3

    急に難しくなってきたけど、おかげさまでギリギリ理解できた、、
    この動画無かったらどうなっていたことか、、、

    • @kihonzyouhou
      @kihonzyouhou  Год назад

      アルゴリズムは最初はキッツイですよね(笑)
      慣れれば何とかなるので、ぜひ頑張ってください!!

  • @suimitsu1zou
    @suimitsu1zou 2 года назад +7

    質問をお願いします。
    14:24あたりの説明で、
    ·Sort(slist2,num2)→slist2[8,1]を作成、というところなのですが、
    Mergeによって並び替えられ、slist2[1,8]を作成、では違うのでしょうか?

    • @kihonzyouhou
      @kihonzyouhou  2 года назад +6

      コメントありがとうございます!大変失礼いたしました、こちら私の誤植ですね。
      slist2[1,8]が正しいです。混乱させてしまい大変申し訳ございません、ご指摘ありがとうございますm(__)m

    • @Msho-mw9kp
      @Msho-mw9kp Год назад

      15:53 の[8,1]も[1,8]でよろしいでしょうか?

  • @purekokawaii
    @purekokawaii 6 месяцев назад +1

    試験Bから急に難しく感じて3:00からですが上段のslist2のnumは1ではないのでしょうか?
    11:33で再帰処理になってからがさらに難しい・・・

  • @user-bl5pm8gu4v
    @user-bl5pm8gu4v Год назад +5

    分かりやすい動画をいつもありがとうございます。
    一点質問です。
    始めの処理で、
    slist1 = [3, 8, 2], slist2 = [7, 5, 1]
    になるのはわかりましたが、次のステップでslist1 = [3, 8, 2]に関する再帰処理を実行する際、
    slist1 = [3], slist2 = [8, 2]
    と分けた時点で、slist2が更新されてしまい、初めの処理で出力された、slist2 = [7, 5, 1]が上書きされてしまい、プログラムとして成立しないと思ったのですが、私の解釈は間違っているのでしょうか。
    長文失礼しました。

    • @kihonzyouhou
      @kihonzyouhou  Год назад +3

      コメントありがとうございます!
      ちょっとややこしいのですが「次のステップでslist1 = [3, 8, 2]に関する再帰処理を実行する際」のSlist1,2と最初に実行されたSlist1,2の配列は別物なので、値が上書きされるわけではありません。

  • @user-tq9mr7ic5z
    @user-tq9mr7ic5z Год назад +2

    いつもわかりやすい解説ありがとうございます。
    質問です。問題そのものとはあまり関係ないのですが、16:16 に示されているように、[4,5,7]と[1,2,3,8]はMerge処理で並び変えながら結合して最終的に[1,2,3,4,5,7,8]になるのは理解できました。しかし3つのリストと4つのリストを比較して並び替えることができるなら、そもそもなぜ最小単位に分割してまた並びなおす必要があるのでしょうか。
    並び替える際にある程度順番になっていた方が処理が早くなるとかそういうメリットがあるのでしょうか。

    • @kihonzyouhou
      @kihonzyouhou  Год назад +1

      こちらこそいつもありがとうございます!
      ご質問については、まさに仰る通りです。このアルゴリズムは「マージソート」というもので、以下の動画で簡単に説明しています。他の並び替えアルゴリズムも説明しているので、余裕があれば、比較しながら確認してみてください^^
      ruclips.net/video/Vqx40iaS9lw/видео.html

  • @100マス計算世界ランク1位

    9:02あたりでnum(配列の要素)=7を2で割った結果slist1が3となっているのはnumは整数型のため余りは無視されるためでしょうか?

    • @kihonzyouhou
      @kihonzyouhou  Год назад +3

      仰る通りです!補足すると、余りが無視されると言うより、商が3.5にならずに3になるってことです。

  • @user-oz3tj1fz6m
    @user-oz3tj1fz6m 10 месяцев назад +1

    これはぶっちゃけmergeプログラムを実行するだけでも昇順になりますか?細切れにする必要がわからなかったです。もし、細切れにする流れが無駄ならば、基本情報の試験ではこのような合理的じゃない処理が多々あって、こういうものだと思って取り組む感じですか?

    • @kihonzyouhou
      @kihonzyouhou  10 месяцев назад +2

      >mergeプログラムを実行するだけでも昇順になりますか?
      なりません。Mergeプログラムは引数に2つの配列が必要です。今回は引数として1つの配列しかないので、そもそもMergeプログラムが動作しません。
      >細切れにする必要がわからなかった
      今回の問題では、仰る通り細切れにする必要性は不明です。
      前提として、データ並び変えアルゴリズムはいくつか存在しており、今回はその中の「マージソート」を使用しています。(他のアルゴリズムは以下の動画で説明しています。)
      ruclips.net/video/Vqx40iaS9lw/видео.htmlsi=l6q8IpqVEPFyNVCz
      これらアルゴリズムは、並び替え対象データのデータ量やデータ特性、PCのメモリ使用量、要求される処理速度など、色々な要素を考慮して最適なアルゴリズムを選定します。試験問題ではさすがにその前提は説明されないので、一見合理的じゃない処理に見えますが、実際の現場で使用されないようなゴミ処理は出題されません!

    • @user-oz3tj1fz6m
      @user-oz3tj1fz6m 10 месяцев назад +1

      @@kihonzyouhou
      ご教授頂き、ありがとうございます!
      引き続き、動画を見ながら学習進めます!
      本より動画の方がスッと入ってくるので、非常に助かってます!

  • @user-vc8ds4ec8l
    @user-vc8ds4ec8l Год назад +2

    やばい、挫けそうw

  • @pday
    @pday 11 месяцев назад

    いつもありがとうございます。7:09あたりのプログラムSortの疑似言語中にMerge(slist1, num1, slist2, num2, list)と記述されていますが、Merge(slist1[ ], num1, slist2[ ], num2, list[ ])と書くと間違いでしょうか?

    • @kihonzyouhou
      @kihonzyouhou  11 месяцев назад +1

      すみません、ご認識通りです!

  • @stynjo
    @stynjo 2 года назад +1

    質問です
    なまじプログラミングを齧っていたせいか混乱してるのですが、
    なぜ変数numに初めから値が入っているのでしょうか?
    Sortプログラムを呼び出した際に、配列listを引数として渡しているとのことですが、
    仮引数などで受け取ってnumに代入しているような記述がありません。

    • @kihonzyouhou
      @kihonzyouhou  2 года назад

      鋭いご質問ありがとうございます!この問題では「num個の数字を配列listに格納」と、問題文でnumという変数の意味定義されており、sort関数にはその配列listを入れているので、変数に初期値が入ってます。
      例えば、ExcelでA1セルに「10」が入力されている場合、マクロでセル変数A1を使う際、特に変数に値を代入しなくてもセル変数A1には10が入ってるってイメージに近いと思います!

    • @stynjo
      @stynjo 2 года назад

      @@kihonzyouhou
      なるほどです。
      どちらかといえばコード見た方が早いと思ってそちらに気が行きがちなんですが、
      問題文と照らし合わせながらトレースするなりした方が良さそうですね。
      ありがとうございました。

  • @user-qq8hp6fv2r
    @user-qq8hp6fv2r Год назад

    いつも分かりやすい説明本当にありがとうございます。
    5:40あたりに対して質問です。
    Mergeはslist1とslist2を併合するはずなのに、なぜlist同士を併合しているのでしょうか。

    • @kihonzyouhou
      @kihonzyouhou  Год назад +1

      こちらこそいつもありがとうございます!
      list配列がMergeの引数としてslist1,2に入れ込まれてるからです。Mergeはslist1とslist2を併合するのではなく、そこに入っている中身を併合するのだとイメージすると良いかもしれません。

    • @user-qq8hp6fv2r
      @user-qq8hp6fv2r Год назад

      ご返信ありがとうございます!
      そういう考え方をすれば良いのですね!助かりました!

  • @yuyu3604
    @yuyu3604 Год назад

    5:13のあたり
    Margeが使われてlistに格納され、それぞれ24と13になるのは理解出来ました。ただ、その後の元に戻ったSort処理でそれらがslist1とslist2になるのが、ちょっと微妙です。

    • @yuyu3604
      @yuyu3604 Год назад +1

      動画を最後まで見たら理解出来ました!!とっても分かりやすい動画で助かります🙇‍♀️

  • @tky51
    @tky51 Год назад

    ご丁寧な説明ありがとうございます
    1問目について質問です
    一度目のSort、つまりlist[4,2,3,1]からslist1[4,2]とslist2[2,1]に分けた後に再起処理をする際、なぜそのslist1とslist2をlistと見なしてsortを実行できるのでしょうか?
    問題分(2)の①には、配列listに格納されているデータを….とあるため、slistはlistとは異なる配列のためsortに入らないと思いました。。
    ご教示いただけると幸いです

    • @kihonzyouhou
      @kihonzyouhou  Год назад +1

      コード内にある再帰処理sortの引数にslist1,2と指定されているからです!

    • @tky51
      @tky51 Год назад

      @@kihonzyouhou ありがとうございます!
      納得です!

  • @knho-i8k
    @knho-i8k Год назад

    再帰的にプログラムを呼び出すとき、Sort(slist1,num1)となっています。動画の2:49あたりに「slist1はSortプログラムに入力されるlist配列と考え」とおっしゃられていますが、その考え方がよくわかりません。宣言はSort(整数型:list[ ],整数型:num)なので入力はlistになると思うのですが、Sort(slist1,num1)というのは、slist1のデータがlistにコピー?されるということでしょうか。

    • @kihonzyouhou
      @kihonzyouhou  Год назад +1

      Sortプログラムはlist[]という配列を引数としており、そのlistの中身がslist1になっていると考えるのはいかがでしょうか。

    • @knho-i8k
      @knho-i8k Год назад

      @@kihonzyouhou お忙しいところご回答ありがとうございます!。

  • @user-rz1sh4dp9f
    @user-rz1sh4dp9f Год назад +2

    一問目の問題でslist1,slist2を再起処理で再度sortして4つに分けた後にmergeして2つにしてもう一度mergeして小さい順に並び変えていますが4つに分けずにslist1,slist2の状態からmergeして並び替えることはできないのでしょうか。またなぜできないかもお伺いしたいです。

    • @kihonzyouhou
      @kihonzyouhou  Год назад +2

      sortプログラムを書き替えれば可能だと思いますが、問題で与えられてるプログラムでは、データが1つになるまでデータが分割されていきます。ですのでsortプログラムを書き換えない前提だと、ご質問は「出来ない」との回答になります!

  • @user-qt8ez2mv6g
    @user-qt8ez2mv6g Год назад +2

    動画を止めるタイミングかいつも難しい…😂
    前回試験受けたときはこのような対策動画が見つからなかったのでとてもありがたいです(落ちた)
    今回は頑張ります!

    • @kihonzyouhou
      @kihonzyouhou  Год назад

      僕も受験時代に苦労しました😂笑
      ぜひ頑張ってください!!

  • @user-ss7xm7ek9s
    @user-ss7xm7ek9s 11 месяцев назад

    何かの個数を数えるのは1スタートだけど、添え字は0スタートってのが慣れない…
    添え字が0スタートなのって何か理由があってそうなってるんですか?

    • @kihonzyouhou
      @kihonzyouhou  11 месяцев назад

      理由はわかりませんが、添え字は0スタートが一般的なので割り切ったほうが早いかもしれません💦

  • @western13able
    @western13able Год назад

    質問がありますが
    12:03でslist1とslist2がsortプログラムで処理された際、「5」と「7,4」に分割されるのは何故ですか?

    • @kihonzyouhou
      @kihonzyouhou  Год назад +1

      sortプログラムの再帰処理が起こっているからです。

    • @western13able
      @western13able Год назад

      @@kihonzyouhou
      ありがとうございます

  • @user-gl1kr5jr5n
    @user-gl1kr5jr5n Год назад

    1:53 超初歩的で申し訳ありません。
    そもそも4231はどこをみたらわかるのでしょうか。。?
    問題文には見当たらず。。

    • @kihonzyouhou
      @kihonzyouhou  Год назад

      プログラムの挙動を確認するため、問題1で例として出した数値なので問題文にはありません!

    • @user-gl1kr5jr5n
      @user-gl1kr5jr5n Год назад

      @@kihonzyouhou ありがとうございます泣
      通常の試験なら与えられてるなど別に記載があるということですよね?

    • @kihonzyouhou
      @kihonzyouhou  Год назад

      @@user-gl1kr5jr5n そうです!

    • @user-gl1kr5jr5n
      @user-gl1kr5jr5n Год назад

      @@kihonzyouhou ありがとうございます。。。

  • @user-ie5xk9gq1s
    @user-ie5xk9gq1s Год назад

    初歩的な質問で恐縮ですが、2:20頃の4231を分割する条件でnum÷2個は4つのデータ÷2だから4・2がslistに入るのはわかるのですが、次の”残りnum - num ÷ 2”という式(条件?)がなぜ3・1のことになるのかがわかりません。”num÷2個と、残りのデータ”とだけ書かれていればわかるのですが、式(条件?)の意味がわかりません。ご教授願います。

    • @kihonzyouhou
      @kihonzyouhou  Год назад +1

      仰る通り通りnum÷2個と、その残りのデータを意味しています。
      残りのデータ個数をnum-num÷2で表現しているだけです^^

    • @user-ie5xk9gq1s
      @user-ie5xk9gq1s Год назад

      @@kihonzyouhou ありがとうございます。

  • @Kuna-144
    @Kuna-144 6 месяцев назад

    ご質問です。
    List[2]とすると、リストの2番目の値という意味
    List[1,8]のように複数ある場合は、そのリストの実際の要素として1.8が順番に並んでる
    ということかと思いますが、そういうものと捉えるしかないのでしょうか。
    順番の番号を指しているのか、具体的な要素を指しているのか理解しきれず....

    • @kihonzyouhou
      @kihonzyouhou  6 месяцев назад +1

      list[1,8]は二次元配列の要素指定方法ですね!アルゴリズムコース第2回を確認してみてください!

  • @user-ek5iy8uw2o
    @user-ek5iy8uw2o 11 месяцев назад

    3:04なぜslist2[2]のみ、num2なのでしょうか…?

    • @kihonzyouhou
      @kihonzyouhou  11 месяцев назад

      すみません、一番下はnum2の誤植ですm(_ _)m

    • @user-ek5iy8uw2o
      @user-ek5iy8uw2o 11 месяцев назад

      @@kihonzyouhou
      早速のご返信ありがとうございます!
      解釈が合っていたようで安心しました!
      すーさんの動画で毎日勉強させていただいております🙇🏻‍♀️✨

  • @啊啊-r4p
    @啊啊-r4p 2 года назад

    哇哦视频出的比我看的都快

  • @user-wl7xl5ze7w
    @user-wl7xl5ze7w 8 месяцев назад +1

    全然理解できてないと早口に聞こえてしまうのは何でだろう?人間って不思議だ~~
    わからなさ過ぎてくじけそう、、、