ขนาดวิดีโอ: 1280 X 720853 X 480640 X 360
แสดงแผงควบคุมโปรแกรมเล่น
เล่นอัตโนมัติ
เล่นใหม่
✅講義資料:note.com/kihonzyouhou/n/n451b6df325f5▼▼再生リスト▼▼アルゴリズムコースth-cam.com/video/GLrlw9yOcEg/w-d-xo.html基本情報技術者試験の概要(※最初にご覧頂くことをオススメしています。)th-cam.com/play/PLEuyFWEF8u0OhszLVxc38rmwgjfWX6wzG.html
わかりやすい解説ありがとうございます!最後まで辿り着くのにかなり苦労しましたが、なんとか理解できました!!
いつもコメントありがとうございます!最後まで辿り着かれたようで良かったです👍その調子で引き続き頑張って下さい!
繰り返し巻き戻して確認を繰り返して、やっと理解ができました!理解できるととてもシンプルなことをきかれているだけなんだと分かりますね
素晴らしいですね!その感覚とても大切です^^
12:35再帰処理の説明が凄かったです。
巻き戻しと再生を繰り返してなんとか理解できた…。理解できると、あまり難しいことはしていないことに気づきますね。ありがとうございます!
素晴らしい!!その感覚大切ですね👍
C言語の再起処理で少しあやふやになっていたのですが、基本情報技術者試験のための勉強をしている際この動画を見て、ようやくどのような仕組みか理解できました大学のテストにも試験のためにもなったのでとても助かります!
コメントありがとうございます!お役に立てたようで嬉しいです^^大学のテスト頑張ってください👍
質問をお願いします。14:24あたりの説明で、·Sort(slist2,num2)→slist2[8,1]を作成、というところなのですが、Mergeによって並び替えられ、slist2[1,8]を作成、では違うのでしょうか?
コメントありがとうございます!大変失礼いたしました、こちら私の誤植ですね。slist2[1,8]が正しいです。混乱させてしまい大変申し訳ございません、ご指摘ありがとうございますm(__)m
15:53 の[8,1]も[1,8]でよろしいでしょうか?
試験Bから急に難しく感じて3:00からですが上段のslist2のnumは1ではないのでしょうか?11:33で再帰処理になってからがさらに難しい・・・
9:02あたりでnum(配列の要素)=7を2で割った結果slist1が3となっているのはnumは整数型のため余りは無視されるためでしょうか?
仰る通りです!補足すると、余りが無視されると言うより、商が3.5にならずに3になるってことです。
急に難しくなってきたけど、おかげさまでギリギリ理解できた、、この動画無かったらどうなっていたことか、、、
アルゴリズムは最初はキッツイですよね(笑)慣れれば何とかなるので、ぜひ頑張ってください!!
いつもわかりやすい解説ありがとうございます。質問です。問題そのものとはあまり関係ないのですが、16:16 に示されているように、[4,5,7]と[1,2,3,8]はMerge処理で並び変えながら結合して最終的に[1,2,3,4,5,7,8]になるのは理解できました。しかし3つのリストと4つのリストを比較して並び替えることができるなら、そもそもなぜ最小単位に分割してまた並びなおす必要があるのでしょうか。並び替える際にある程度順番になっていた方が処理が早くなるとかそういうメリットがあるのでしょうか。
こちらこそいつもありがとうございます!ご質問については、まさに仰る通りです。このアルゴリズムは「マージソート」というもので、以下の動画で簡単に説明しています。他の並び替えアルゴリズムも説明しているので、余裕があれば、比較しながら確認してみてください^^th-cam.com/video/Vqx40iaS9lw/w-d-xo.html
ご質問です。List[2]とすると、リストの2番目の値という意味List[1,8]のように複数ある場合は、そのリストの実際の要素として1.8が順番に並んでるということかと思いますが、そういうものと捉えるしかないのでしょうか。順番の番号を指しているのか、具体的な要素を指しているのか理解しきれず....
list[1,8]は二次元配列の要素指定方法ですね!アルゴリズムコース第2回を確認してみてください!
動画を止めるタイミングかいつも難しい…😂前回試験受けたときはこのような対策動画が見つからなかったのでとてもありがたいです(落ちた)今回は頑張ります!
僕も受験時代に苦労しました😂笑ぜひ頑張ってください!!
いつもありがとうございます。7:09あたりのプログラムSortの疑似言語中にMerge(slist1, num1, slist2, num2, list)と記述されていますが、Merge(slist1[ ], num1, slist2[ ], num2, list[ ])と書くと間違いでしょうか?
すみません、ご認識通りです!
5:13のあたりMargeが使われてlistに格納され、それぞれ24と13になるのは理解出来ました。ただ、その後の元に戻ったSort処理でそれらがslist1とslist2になるのが、ちょっと微妙です。
動画を最後まで見たら理解出来ました!!とっても分かりやすい動画で助かります🙇♀️
分かりやすい動画をいつもありがとうございます。一点質問です。始めの処理で、slist1 = [3, 8, 2], slist2 = [7, 5, 1]になるのはわかりましたが、次のステップでslist1 = [3, 8, 2]に関する再帰処理を実行する際、slist1 = [3], slist2 = [8, 2]と分けた時点で、slist2が更新されてしまい、初めの処理で出力された、slist2 = [7, 5, 1]が上書きされてしまい、プログラムとして成立しないと思ったのですが、私の解釈は間違っているのでしょうか。長文失礼しました。
コメントありがとうございます!ちょっとややこしいのですが「次のステップでslist1 = [3, 8, 2]に関する再帰処理を実行する際」のSlist1,2と最初に実行されたSlist1,2の配列は別物なので、値が上書きされるわけではありません。
これはぶっちゃけmergeプログラムを実行するだけでも昇順になりますか?細切れにする必要がわからなかったです。もし、細切れにする流れが無駄ならば、基本情報の試験ではこのような合理的じゃない処理が多々あって、こういうものだと思って取り組む感じですか?
>mergeプログラムを実行するだけでも昇順になりますか?なりません。Mergeプログラムは引数に2つの配列が必要です。今回は引数として1つの配列しかないので、そもそもMergeプログラムが動作しません。>細切れにする必要がわからなかった今回の問題では、仰る通り細切れにする必要性は不明です。前提として、データ並び変えアルゴリズムはいくつか存在しており、今回はその中の「マージソート」を使用しています。(他のアルゴリズムは以下の動画で説明しています。)th-cam.com/video/Vqx40iaS9lw/w-d-xo.htmlsi=l6q8IpqVEPFyNVCzこれらアルゴリズムは、並び替え対象データのデータ量やデータ特性、PCのメモリ使用量、要求される処理速度など、色々な要素を考慮して最適なアルゴリズムを選定します。試験問題ではさすがにその前提は説明されないので、一見合理的じゃない処理に見えますが、実際の現場で使用されないようなゴミ処理は出題されません!
@@kihonzyouhou ご教授頂き、ありがとうございます!引き続き、動画を見ながら学習進めます!本より動画の方がスッと入ってくるので、非常に助かってます!
再帰的にプログラムを呼び出すとき、Sort(slist1,num1)となっています。動画の2:49あたりに「slist1はSortプログラムに入力されるlist配列と考え」とおっしゃられていますが、その考え方がよくわかりません。宣言はSort(整数型:list[ ],整数型:num)なので入力はlistになると思うのですが、Sort(slist1,num1)というのは、slist1のデータがlistにコピー?されるということでしょうか。
Sortプログラムはlist[]という配列を引数としており、そのlistの中身がslist1になっていると考えるのはいかがでしょうか。
@@kihonzyouhou お忙しいところご回答ありがとうございます!。
質問ですなまじプログラミングを齧っていたせいか混乱してるのですが、なぜ変数numに初めから値が入っているのでしょうか?Sortプログラムを呼び出した際に、配列listを引数として渡しているとのことですが、仮引数などで受け取ってnumに代入しているような記述がありません。
鋭いご質問ありがとうございます!この問題では「num個の数字を配列listに格納」と、問題文でnumという変数の意味定義されており、sort関数にはその配列listを入れているので、変数に初期値が入ってます。例えば、ExcelでA1セルに「10」が入力されている場合、マクロでセル変数A1を使う際、特に変数に値を代入しなくてもセル変数A1には10が入ってるってイメージに近いと思います!
@@kihonzyouhou なるほどです。どちらかといえばコード見た方が早いと思ってそちらに気が行きがちなんですが、問題文と照らし合わせながらトレースするなりした方が良さそうですね。ありがとうございました。
初歩的な質問で恐縮ですが、2:20頃の4231を分割する条件でnum÷2個は4つのデータ÷2だから4・2がslistに入るのはわかるのですが、次の”残りnum - num ÷ 2”という式(条件?)がなぜ3・1のことになるのかがわかりません。”num÷2個と、残りのデータ”とだけ書かれていればわかるのですが、式(条件?)の意味がわかりません。ご教授願います。
仰る通り通りnum÷2個と、その残りのデータを意味しています。残りのデータ個数をnum-num÷2で表現しているだけです^^
@@kihonzyouhou ありがとうございます。
いつも分かりやすい説明本当にありがとうございます。5:40あたりに対して質問です。Mergeはslist1とslist2を併合するはずなのに、なぜlist同士を併合しているのでしょうか。
こちらこそいつもありがとうございます!list配列がMergeの引数としてslist1,2に入れ込まれてるからです。Mergeはslist1とslist2を併合するのではなく、そこに入っている中身を併合するのだとイメージすると良いかもしれません。
ご返信ありがとうございます!そういう考え方をすれば良いのですね!助かりました!
質問がありますが12:03でslist1とslist2がsortプログラムで処理された際、「5」と「7,4」に分割されるのは何故ですか?
sortプログラムの再帰処理が起こっているからです。
@@kihonzyouhou ありがとうございます
1:53 超初歩的で申し訳ありません。そもそも4231はどこをみたらわかるのでしょうか。。?問題文には見当たらず。。
プログラムの挙動を確認するため、問題1で例として出した数値なので問題文にはありません!
@@kihonzyouhou ありがとうございます泣通常の試験なら与えられてるなど別に記載があるということですよね?
@@ます-f9i そうです!
@@kihonzyouhou ありがとうございます。。。
ご丁寧な説明ありがとうございます1問目について質問です一度目のSort、つまりlist[4,2,3,1]からslist1[4,2]とslist2[2,1]に分けた後に再起処理をする際、なぜそのslist1とslist2をlistと見なしてsortを実行できるのでしょうか?問題分(2)の①には、配列listに格納されているデータを….とあるため、slistはlistとは異なる配列のためsortに入らないと思いました。。ご教示いただけると幸いです
コード内にある再帰処理sortの引数にslist1,2と指定されているからです!
@@kihonzyouhou ありがとうございます!納得です!
一問目の問題でslist1,slist2を再起処理で再度sortして4つに分けた後にmergeして2つにしてもう一度mergeして小さい順に並び変えていますが4つに分けずにslist1,slist2の状態からmergeして並び替えることはできないのでしょうか。またなぜできないかもお伺いしたいです。
sortプログラムを書き替えれば可能だと思いますが、問題で与えられてるプログラムでは、データが1つになるまでデータが分割されていきます。ですのでsortプログラムを書き換えない前提だと、ご質問は「出来ない」との回答になります!
何かの個数を数えるのは1スタートだけど、添え字は0スタートってのが慣れない…添え字が0スタートなのって何か理由があってそうなってるんですか?
理由はわかりませんが、添え字は0スタートが一般的なので割り切ったほうが早いかもしれません💦
3:04なぜslist2[2]のみ、num2なのでしょうか…?
すみません、一番下はnum2の誤植ですm(_ _)m
@@kihonzyouhou 早速のご返信ありがとうございます!解釈が合っていたようで安心しました!すーさんの動画で毎日勉強させていただいております🙇🏻♀️✨
やばい、挫けそうw
全然理解できてないと早口に聞こえてしまうのは何でだろう?人間って不思議だ~~わからなさ過ぎてくじけそう、、、
哇哦视频出的比我看的都快
✅講義資料:note.com/kihonzyouhou/n/n451b6df325f5
▼▼再生リスト▼▼
アルゴリズムコース
th-cam.com/video/GLrlw9yOcEg/w-d-xo.html
基本情報技術者試験の概要(※最初にご覧頂くことをオススメしています。)
th-cam.com/play/PLEuyFWEF8u0OhszLVxc38rmwgjfWX6wzG.html
わかりやすい解説ありがとうございます!
最後まで辿り着くのにかなり苦労しましたが、なんとか理解できました!!
いつもコメントありがとうございます!最後まで辿り着かれたようで良かったです👍その調子で引き続き頑張って下さい!
繰り返し巻き戻して確認を繰り返して、やっと理解ができました!
理解できるととてもシンプルなことをきかれているだけなんだと分かりますね
素晴らしいですね!その感覚とても大切です^^
12:35再帰処理の説明が凄かったです。
巻き戻しと再生を繰り返してなんとか理解できた…。
理解できると、あまり難しいことはしていないことに気づきますね。ありがとうございます!
素晴らしい!!その感覚大切ですね👍
C言語の再起処理で少しあやふやになっていたのですが、基本情報技術者試験のための勉強をしている際この動画を見て、ようやくどのような仕組みか理解できました
大学のテストにも試験のためにもなったのでとても助かります!
コメントありがとうございます!お役に立てたようで嬉しいです^^
大学のテスト頑張ってください👍
質問をお願いします。
14:24あたりの説明で、
·Sort(slist2,num2)→slist2[8,1]を作成、というところなのですが、
Mergeによって並び替えられ、slist2[1,8]を作成、では違うのでしょうか?
コメントありがとうございます!大変失礼いたしました、こちら私の誤植ですね。
slist2[1,8]が正しいです。混乱させてしまい大変申し訳ございません、ご指摘ありがとうございますm(__)m
15:53 の[8,1]も[1,8]でよろしいでしょうか?
試験Bから急に難しく感じて3:00からですが上段のslist2のnumは1ではないのでしょうか?
11:33で再帰処理になってからがさらに難しい・・・
9:02あたりでnum(配列の要素)=7を2で割った結果slist1が3となっているのはnumは整数型のため余りは無視されるためでしょうか?
仰る通りです!補足すると、余りが無視されると言うより、商が3.5にならずに3になるってことです。
急に難しくなってきたけど、おかげさまでギリギリ理解できた、、
この動画無かったらどうなっていたことか、、、
アルゴリズムは最初はキッツイですよね(笑)
慣れれば何とかなるので、ぜひ頑張ってください!!
いつもわかりやすい解説ありがとうございます。
質問です。問題そのものとはあまり関係ないのですが、16:16 に示されているように、[4,5,7]と[1,2,3,8]はMerge処理で並び変えながら結合して最終的に[1,2,3,4,5,7,8]になるのは理解できました。しかし3つのリストと4つのリストを比較して並び替えることができるなら、そもそもなぜ最小単位に分割してまた並びなおす必要があるのでしょうか。
並び替える際にある程度順番になっていた方が処理が早くなるとかそういうメリットがあるのでしょうか。
こちらこそいつもありがとうございます!
ご質問については、まさに仰る通りです。このアルゴリズムは「マージソート」というもので、以下の動画で簡単に説明しています。他の並び替えアルゴリズムも説明しているので、余裕があれば、比較しながら確認してみてください^^
th-cam.com/video/Vqx40iaS9lw/w-d-xo.html
ご質問です。
List[2]とすると、リストの2番目の値という意味
List[1,8]のように複数ある場合は、そのリストの実際の要素として1.8が順番に並んでる
ということかと思いますが、そういうものと捉えるしかないのでしょうか。
順番の番号を指しているのか、具体的な要素を指しているのか理解しきれず....
list[1,8]は二次元配列の要素指定方法ですね!アルゴリズムコース第2回を確認してみてください!
動画を止めるタイミングかいつも難しい…😂
前回試験受けたときはこのような対策動画が見つからなかったのでとてもありがたいです(落ちた)
今回は頑張ります!
僕も受験時代に苦労しました😂笑
ぜひ頑張ってください!!
いつもありがとうございます。7:09あたりのプログラムSortの疑似言語中にMerge(slist1, num1, slist2, num2, list)と記述されていますが、Merge(slist1[ ], num1, slist2[ ], num2, list[ ])と書くと間違いでしょうか?
すみません、ご認識通りです!
5:13のあたり
Margeが使われてlistに格納され、それぞれ24と13になるのは理解出来ました。ただ、その後の元に戻ったSort処理でそれらがslist1とslist2になるのが、ちょっと微妙です。
動画を最後まで見たら理解出来ました!!とっても分かりやすい動画で助かります🙇♀️
分かりやすい動画をいつもありがとうございます。
一点質問です。
始めの処理で、
slist1 = [3, 8, 2], slist2 = [7, 5, 1]
になるのはわかりましたが、次のステップでslist1 = [3, 8, 2]に関する再帰処理を実行する際、
slist1 = [3], slist2 = [8, 2]
と分けた時点で、slist2が更新されてしまい、初めの処理で出力された、slist2 = [7, 5, 1]が上書きされてしまい、プログラムとして成立しないと思ったのですが、私の解釈は間違っているのでしょうか。
長文失礼しました。
コメントありがとうございます!
ちょっとややこしいのですが「次のステップでslist1 = [3, 8, 2]に関する再帰処理を実行する際」のSlist1,2と最初に実行されたSlist1,2の配列は別物なので、値が上書きされるわけではありません。
これはぶっちゃけmergeプログラムを実行するだけでも昇順になりますか?細切れにする必要がわからなかったです。もし、細切れにする流れが無駄ならば、基本情報の試験ではこのような合理的じゃない処理が多々あって、こういうものだと思って取り組む感じですか?
>mergeプログラムを実行するだけでも昇順になりますか?
なりません。Mergeプログラムは引数に2つの配列が必要です。今回は引数として1つの配列しかないので、そもそもMergeプログラムが動作しません。
>細切れにする必要がわからなかった
今回の問題では、仰る通り細切れにする必要性は不明です。
前提として、データ並び変えアルゴリズムはいくつか存在しており、今回はその中の「マージソート」を使用しています。(他のアルゴリズムは以下の動画で説明しています。)
th-cam.com/video/Vqx40iaS9lw/w-d-xo.htmlsi=l6q8IpqVEPFyNVCz
これらアルゴリズムは、並び替え対象データのデータ量やデータ特性、PCのメモリ使用量、要求される処理速度など、色々な要素を考慮して最適なアルゴリズムを選定します。試験問題ではさすがにその前提は説明されないので、一見合理的じゃない処理に見えますが、実際の現場で使用されないようなゴミ処理は出題されません!
@@kihonzyouhou
ご教授頂き、ありがとうございます!
引き続き、動画を見ながら学習進めます!
本より動画の方がスッと入ってくるので、非常に助かってます!
再帰的にプログラムを呼び出すとき、Sort(slist1,num1)となっています。動画の2:49あたりに「slist1はSortプログラムに入力されるlist配列と考え」とおっしゃられていますが、その考え方がよくわかりません。宣言はSort(整数型:list[ ],整数型:num)なので入力はlistになると思うのですが、Sort(slist1,num1)というのは、slist1のデータがlistにコピー?されるということでしょうか。
Sortプログラムはlist[]という配列を引数としており、そのlistの中身がslist1になっていると考えるのはいかがでしょうか。
@@kihonzyouhou お忙しいところご回答ありがとうございます!。
質問です
なまじプログラミングを齧っていたせいか混乱してるのですが、
なぜ変数numに初めから値が入っているのでしょうか?
Sortプログラムを呼び出した際に、配列listを引数として渡しているとのことですが、
仮引数などで受け取ってnumに代入しているような記述がありません。
鋭いご質問ありがとうございます!この問題では「num個の数字を配列listに格納」と、問題文でnumという変数の意味定義されており、sort関数にはその配列listを入れているので、変数に初期値が入ってます。
例えば、ExcelでA1セルに「10」が入力されている場合、マクロでセル変数A1を使う際、特に変数に値を代入しなくてもセル変数A1には10が入ってるってイメージに近いと思います!
@@kihonzyouhou
なるほどです。
どちらかといえばコード見た方が早いと思ってそちらに気が行きがちなんですが、
問題文と照らし合わせながらトレースするなりした方が良さそうですね。
ありがとうございました。
初歩的な質問で恐縮ですが、2:20頃の4231を分割する条件でnum÷2個は4つのデータ÷2だから4・2がslistに入るのはわかるのですが、次の”残りnum - num ÷ 2”という式(条件?)がなぜ3・1のことになるのかがわかりません。”num÷2個と、残りのデータ”とだけ書かれていればわかるのですが、式(条件?)の意味がわかりません。ご教授願います。
仰る通り通りnum÷2個と、その残りのデータを意味しています。
残りのデータ個数をnum-num÷2で表現しているだけです^^
@@kihonzyouhou ありがとうございます。
いつも分かりやすい説明本当にありがとうございます。
5:40あたりに対して質問です。
Mergeはslist1とslist2を併合するはずなのに、なぜlist同士を併合しているのでしょうか。
こちらこそいつもありがとうございます!
list配列がMergeの引数としてslist1,2に入れ込まれてるからです。Mergeはslist1とslist2を併合するのではなく、そこに入っている中身を併合するのだとイメージすると良いかもしれません。
ご返信ありがとうございます!
そういう考え方をすれば良いのですね!助かりました!
質問がありますが
12:03でslist1とslist2がsortプログラムで処理された際、「5」と「7,4」に分割されるのは何故ですか?
sortプログラムの再帰処理が起こっているからです。
@@kihonzyouhou
ありがとうございます
1:53 超初歩的で申し訳ありません。
そもそも4231はどこをみたらわかるのでしょうか。。?
問題文には見当たらず。。
プログラムの挙動を確認するため、問題1で例として出した数値なので問題文にはありません!
@@kihonzyouhou ありがとうございます泣
通常の試験なら与えられてるなど別に記載があるということですよね?
@@ます-f9i そうです!
@@kihonzyouhou ありがとうございます。。。
ご丁寧な説明ありがとうございます
1問目について質問です
一度目のSort、つまりlist[4,2,3,1]からslist1[4,2]とslist2[2,1]に分けた後に再起処理をする際、なぜそのslist1とslist2をlistと見なしてsortを実行できるのでしょうか?
問題分(2)の①には、配列listに格納されているデータを….とあるため、slistはlistとは異なる配列のためsortに入らないと思いました。。
ご教示いただけると幸いです
コード内にある再帰処理sortの引数にslist1,2と指定されているからです!
@@kihonzyouhou ありがとうございます!
納得です!
一問目の問題でslist1,slist2を再起処理で再度sortして4つに分けた後にmergeして2つにしてもう一度mergeして小さい順に並び変えていますが4つに分けずにslist1,slist2の状態からmergeして並び替えることはできないのでしょうか。またなぜできないかもお伺いしたいです。
sortプログラムを書き替えれば可能だと思いますが、問題で与えられてるプログラムでは、データが1つになるまでデータが分割されていきます。ですのでsortプログラムを書き換えない前提だと、ご質問は「出来ない」との回答になります!
何かの個数を数えるのは1スタートだけど、添え字は0スタートってのが慣れない…
添え字が0スタートなのって何か理由があってそうなってるんですか?
理由はわかりませんが、添え字は0スタートが一般的なので割り切ったほうが早いかもしれません💦
3:04なぜslist2[2]のみ、num2なのでしょうか…?
すみません、一番下はnum2の誤植ですm(_ _)m
@@kihonzyouhou
早速のご返信ありがとうございます!
解釈が合っていたようで安心しました!
すーさんの動画で毎日勉強させていただいております🙇🏻♀️✨
やばい、挫けそうw
全然理解できてないと早口に聞こえてしまうのは何でだろう?人間って不思議だ~~
わからなさ過ぎてくじけそう、、、
哇哦视频出的比我看的都快